استخدام مفاتيح التوجيه (Routing Keys) وعقود استئجار الملفات الشخصية (Profile Leases) في طوابير عمل Playwright
إن خطأ Playwright مثل TimeoutError: page.click failed غالباً ما يكون مضللاً.
يخبرك الخطأ بما رصده السكربت، لكنه لا يخبرك لماذا كان السكربت في المكان الخاطئ منذ البداية.
رأيت ذات مرة عاملين (workers) يستلمان مهاماً لنفس الحساب. قام كلا العاملين بفتح نفس ملف تعريف المتصفح (browser profile) في نفس الوقت. كان أحد العاملين ينتظر صفحة بطيئة، بينما قام العامل الآخر بإعادة المحاولة وتغيير حالة الجلسة (session state)، مما تسبب في حدوث فشل.
لم تكن المشكلة في الكود، بل كانت المشكلة في طابور المهام (queue).
معظم طوابير العمل مصممة للمهام عديمة الحالة (stateless jobs).
- استلام مهمة.
- البحث عن عامل متاح.
- تنفيذ المهمة.
- تحديدها كمكتملة.
هذا الأسلوب يعمل مع لقطات الشاشة (screenshots) أو استدعاءات الـ API، لكنه يفشل في أتمتة المتصفح (browser automation).
ملف تعريف المتصفح ليس عديم الحالة؛ فهو ينتمي إلى حساب واحد، وبروكسي (proxy) واحد، وحالة جلسة واحدة. لذا، فإن أسرع عامل ليس دائماً هو العامل المناسب.
للتوسع بشكل آمن، يجب عليك تغيير منطق العمل الخاص بك.
بدلاً من السؤال: أي عامل متاح؟
اسأل: أي بيئة حساب آمنة للاستخدام الآن؟
يمكنك حل هذه المشكلة عبر ثلاث طبقات:
مفاتيح التوجيه (Routing Keys) لا تسمح لأي عامل باستلام أي مهمة عشوائياً. استخدم مفتاح توجيه يعتمد على معرف الملف الشخصي (profile ID) أو معرف الحساب (account ID). يضمن ذلك عدم تعامل أكثر من عامل واحد مع ملف شخصي معين في وقت واحد.
عقود استئجار الملفات الشخصية (Profile Leases) تعني المطالبة في الطابور أن العامل يمتلك مهمة، أما عقد استئجار الملف الشخصي فيعني أن العامل مسموح له باستخدام ملف تعريف متصفح معين لفترة زمنية محددة. استخدم نظام استئجار مع "نبضات قلب" (heartbeat)؛ فإذا استغرقت المهمة وقتاً أطول من المتوقع، يجب على العامل تجديد عقد الاستئجار.
رموز الحماية (Fencing Tokens) العمال "القدامى" أو غير المتزامنين (stale workers) يشكلون خطراً. إذا فقد العامل عقد الاستئجار الخاص به بسبب تأخر في الشبكة ولكنه استمر في العمل، فقد يحاول كتابة بيانات. استخدم رمز حماية (fencing token)؛ حيث يجب على طبقة التخزين رفض أي عمليات كتابة صادرة من رمز قديم.
يجب عليك أيضاً إضافة بوابة جاهزية (readiness gate). قبل تشغيل Playwright، تحقق مما يلي:
- هل الحساب متوقف مؤقتاً؟
- هل يحتاج الملف الشخصي إلى مراجعة بشرية؟
- هل تتوافق منطقة البروكسي مع متطلبات المهمة؟
المهمة المحظورة ليست دائماً مهمة فاشلة، بل غالباً ما تكون مجرد مهمة تنتظر السياق المناسب.
توقف عن بناء طوابير مهام تعطي الأولوية للسرعة فقط، وابدأ ببناء طوابير تعطي الأولوية لحالة الحساب.
المصدر: https://dev.to/web4browser/using-routing-keys-and-profile-leases-in-playwright-worker-queues-a53
