كيفية إنشاء متتبع ارتباطات قابلة للتطوير للزحف إلى مليون صفحة باستخدام جهاز واحد خلال ساعتين فقط

كان هناك الكثير من المقالات حول كيفية بناء الزاحف الثعبان. إذا كنت مبتدئًا في الثعبان ولم تكن معتادًا على المعالجة المتعددة أو تعدد العمليات ، فربما يكون هذا البرنامج التعليمي هو الخيار الصحيح لك.

لا تحتاج إلى معرفة كيفية إدارة المعالجة أو سلاسل الرسائل أو حتى قائمة الانتظار ، ما عليك سوى إدخال عناوين url التي تريد فكها ، واستخراج بنية الويب حسب حاجتك ، وتغيير عدد برامج الزحف والتزامن لإنشاء ، والباقي هو "أشعلها"!

جميع التعليمات البرمجية هنا مجرد محاكاة الزاحف الموزعة فعالة ، ومعرفة كيفية استخدام عامل ميناء والكرفس. هناك بعض الأشياء التي يجب الإعلان عنها قبل البدء:

1. بغض النظر عن موقع الويب الذي تريد كشطه ، يرجى الحصول على سياسة الروبوت و TOS.
2. لا ترسل طلبات كبيرة إلى نفس الموقع في وقت واحد. أرجوك كن لطيف.
3. لا تفعل أي شيء ينتهك القانون المحلي لبلدك

هذا البرنامج التعليمي هو نسخة مطورة من المنشور السابق ، كيفية بناء كتلة عامل ميناء مع الكرفس و RabbitMQ في 10 دقائق. هناك الكثير من التفاصيل الفنية حول كيفية كتابة dockerfile ، واستخدام docker-compose ، وكيفية تكوين Celery و RabbiMQ ، لذلك لن أتحدث عنها مرة أخرى.

1. دعنا نذهب

بسبب Docker ، يمكننا توسيع نطاق أي تطبيقات بسهولة. لذلك لا يوجد سوى اثنين من الملفات الرئيسية في هذه المقالة. تحقق من الوظيفة السابقة لمزيد من التفاصيل.

مفتاح واحد:

قائمة عناوين url: يمكنك الحصول على قائمة نطاقات Alexa لأعلى مليون موقع من موقع الويب هذا ، وتخزينها في قاعدة البيانات أو ملف نصي حسب حاجتك. من أجل الحصول على اختبار سريع ، أقوم فقط بإنشاء صفحة ترحيب nginx في خادم السحابة الخاص بي. ثم رفعه إلى قائمة 1000000.

ثم استخدم طريقة longtime_add.delay لإرسالها جميعًا إلى RabbitMQ ، وسيط الرسائل.

مفتاحان:

باستخدام أمر "عامل المقياس - عامل الإنشاء = 10" ، ستقوم عامل الإنشاء - إنشاء كتلة عامل بملف "المهام" هذا. سيحصل على قائمة عناوين URL وإرسالها إلى الطلبات ، وإعادة رمز status_code ، وتخزين status_code مع time.time () الأسلوب. إذا كان يعمل ، سترى شيء مثل هذا في قاعدة بيانات Mongo:

{ 'وضع': 200، 'create_time': 1488271604،63484}

بشكل عام ، نظرًا لشبكة المضيف أو الخادم ، فإن الاتصالات ليست مستقرة دائمًا ، بمجرد فشلنا في المحاولة مرة أخرى. لذلك قمنا بتعيين تأخير إعادة المحاولة إلى 10 ثوانٍ هنا. بمجرد الفشل فإنه سيتم إعادة المحاولة 10 ثانية في وقت لاحق.

@ app.task (ربط = صحيح، default_retry_delay = 10)

2. تكوين dockerfile و docker- يؤلف

كرف ENTRYPOINT - عامل test_celery - التزامن = 20 - loglevel = info

يجب ملاحظة شيء ما هنا: لا تقم بتعيين التزامن في dockerfile عالية جدًا. في هذه الحالة ، 20 كبيرة بما يكفي لجهازي.

ما يجب أن نضيفه في ملف docker-compose هو قاعدة بيانات mongo ، وقم بتعيين المنفذ '27018: 27017'. يجب أن يكون الرقم الأول هو نفسه في المهام.

3. دعنا نركض

إذا وجدت صعوبة في المتابعة ، فقم فقط باستنساخ الكود على جهازك المحلي ، ثم فعل نفس الشيء كما في المقالة السابقة.

تفاصيل وحدة المعالجة المركزية. المصدر: إنتل

يوجد في جهازي المحلي وحدتان من وحدات المعالجة المركزية ، بينما يحتوي كل واحد على 12 مؤشر ترابط و 6 مراكز ، ويبلغ إجمالي الذاكرة 32 جيجا. إنه قوي بما يكفي لتشغيل 40 عاملاً في حين أن كل واحد لديه 20 عملة.

40 عاملا

كلما زاد التزامن لكل عامل ، زادت مساحة الذاكرة التي يحتاجها. في هذه الحالة ، كلف 40 عاملاً حوالي 12 جيجا من الذاكرة تمامًا ، وحوالي نصف اليسار. إذا قمت بزيادة عدد العملات المتزامنة أو العمال قليلاً ، فستكون سرعة الزاحف أسرع ، ولكن عرض النطاق الترددي للشبكة في منزلي لا يتجاوز 1 ميغابايت / ثانية. على الرغم من زيادة عدد العمال ، إلا أن السرعة لا تزيد على الإطلاق. في هذا الاختبار ، عنق الزجاجة هو شبكتي الفقيرة.

بعد 40 عاملاً و 15 دقيقة ، حصلت على حوالي 100000 عنصر في قاعدة بيانات Mongo الخاصة بي ، باستخدام جهاز واحد.

استنتاج

إذا كان لديك خادم أو كمبيوتر قوي ، فمن الضروري نشر مجموعات عامل ميناء لزيادة أداء جهازك ، أو مع بعض الخوادم الصغيرة مثل Raspberry Pi ، يعتبر docker اختيارًا أفضل أيضًا. بالطبع ، بدون عامل ميناء ، يمكنك بناء زاحف موزع أيضًا. ستنشر بعض البرامج مثل Fabric تطبيقاتك على مجموعات الخوادم باستخدام بعض الأوامر.

إذا كان لديك أي أسئلة أو اقتراحات حول هذا الموضوع ، فلا تتردد في ترك الرد هنا ، ومرحبا بكم في إرسال طلبات السحب لهذا المشروع. أراك التالي تعليمي!