سؤال

يا. يمكنني استخدام تأخير _job لمعالجة الخلفية. لدي 8 خادم وحدة المعالجة المركزية ، MySQL وأبدأ 7 عمليات تأخير _job

RAILS_ENV=production script/delayed_job -n 7 start 

س 1:أتساءل هل من الممكن أن تبدأ عمليات تأخير أو أكثر من عمليات التأخير أو أكثر في معالجة نفس العملية (نفس صف السجل في قاعدة البيانات المتأخرة). لقد راجعت رمز المكون الإضافي الخاص بالتأخير في تأخيره ، لكن لا يمكنني العثور على توجيه القفل بطريقة يجب أن يكون (لا يوجد جدول قفل أو تحديد ... للتحديث).

أعتقد أن كل عملية يجب أن تغلق جدول قاعدة البيانات قبل تنفيذ تحديث على عمود Lock_by. يقومون بإغلاق السجل ببساطة عن طريق تحديث حقل Locked_by (تحديث تأخير _jobs تعيين Locked_by ...). هل هذا يكفي حقًا؟ لا حاجة إلى قفل؟ لماذا ا؟ أعلم أن التحديث له أولوية أعلى من الاختيار ، لكنني أعتقد أن هذا ليس له تأثير في هذه الحالة.

ما فهمي للوضع المتخيل هو:

Process1: Get waiting job X. [OK]
Process2: Get waiting jobs X. [OK]
Process1: Update locked_by field. [OK]
Process2: Update locked_by field. [OK]
Process1: Get waiting job X. [Already processed]
Process2: Get waiting jobs X. [Already processed]

أعتقد في بعض الحالات أن المزيد من الوظائف يمكن أن تحصل على نفس المعلومات ويمكن أن تبدأ في معالجة نفس العملية.

س 2: هل 7 تأخير _jobs رقم جيد لخادم 8CPU؟ لماذا نعم/لا.

شكرا 10x!

هل كانت مفيدة؟

المحلول

أعتقد أن الإجابة على سؤالك هي في السطر 168 من "lib/evention_job/job.rb ':

self.class.update_all(["locked_at = ?, locked_by = ?", now, worker], ["id = ? and (locked_at is null or locked_at < ?)", id, (now - max_run_time.to_i)])

هنا يتم تنفيذ تحديث الصف فقط ، إذا لم يقفل أي عامل آخر بالفعل المهمة وتم التحقق من ذلك إذا تم تحديث الجدول. ليس هناك حاجة إلى قفل الجدول أو ما شابه (والذي من شأنه أن يقلل بشكل كبير من أداء تطبيقك) ، لأن DBMS يضمن أن تنفيذ استعلام واحد معزول من التأثيرات قبالة الاستعلامات الأخرى. في المثال الخاص بك ، لا يمكن الحصول على القفل للوظيفة X ، لأنه يقوم بتحديث جدول الوظائف إذا وفقط إذا لم يتم قفله من قبل.

لسؤالك الثاني: يعتمد ذلك. على خادم 8 وحدة المعالجة المركزية. وهو مخصص لهذه الوظيفة ، 8 عمال نقطة انطلاق جيدة ، نظرًا لأن العمال واحد متخلف ، يجب أن تدير واحدة لكل نواة. اعتمادًا على إعدادك أكثر أو أقل من العمال أفضل. يعتمد بشكل كبير على وظائفك. خذ ميزة وظائفك من Cores Mutiple؟ أم أن وظيفتك تنتظر معظم الوقت للموارد الخارجية؟ لديك تجربة مع إعدادات مختلفة وإلقاء نظرة على جميع الموارد المعنية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top