Playwright Worker Queues میں Routing Keys اور Profile Leases کا استعمال
Playwright کا ایک error جیسے کہ TimeoutError: page.click failed اکثر جھوٹا ہوتا ہے۔
یہ error آپ کو بتاتا ہے کہ اسکرپٹ نے کیا دیکھا۔ یہ آپ کو یہ نہیں بتاتا کہ اسکرپٹ شروع سے ہی غلط جگہ پر کیوں تھا۔
میں نے ایک بار دیکھا کہ دو workers نے ایک ہی اکاؤنٹ کے لیے jobs اٹھا لیں۔ دونوں workers نے ایک ہی وقت میں ایک ہی browser profile کھول لی۔ ایک worker ایک سست (slow) پیج کا انتظار کر رہا تھا۔ دوسرے worker نے دوبارہ کوشش کی، session state تبدیل کی، اور اس سے failure پیدا ہو گئی۔
مسئلہ کوڈ کا نہیں تھا۔ مسئلہ queue کا تھا۔
زیادہ تر worker queues stateless jobs کے لیے ڈیزائن کی گئی ہوتی ہیں۔
- ایک job لیں۔
- ایک فارغ worker تلاش کریں۔
- ٹاسک چلائیں۔
- اسے مکمل (done) قرار دیں۔
یہ screenshots یا API calls کے لیے تو ٹھیک ہے، لیکن browser automation کے لیے ناکام ہو جاتا ہے۔
ایک browser profile stateless نہیں ہوتی۔ یہ ایک اکاؤنٹ، ایک proxy، اور ایک session state سے تعلق رکھتی ہے۔ تیز ترین worker ہمیشہ صحیح worker نہیں ہوتا۔
محفوظ طریقے سے scale کرنے کے لیے، آپ کو اپنی logic بدلنی ہوگی۔
یہ پوچھنے کے بجائے کہ: کون سا worker فارغ ہے؟
پوچھیں: اب کون سا account environment استعمال کرنا محفوظ ہے؟
آپ اسے تین تہوں (layers) کے ذریعے حل کر سکتے ہیں:
Routing Keys کسی بھی worker کو کوئی بھی job پکڑنے نہ دیں۔ profile ID یا account ID پر مبنی routing key استعمال کریں۔ اس سے یہ یقینی بنتا ہے کہ ایک وقت میں صرف ایک ہی worker کسی مخصوص profile کو چھوئے۔
Profile Leases Queue claim کا مطلب ہے کہ ایک worker ایک job کا مالک ہے۔ Profile lease کا مطلب ہے کہ ایک worker کو ایک مقررہ وقت کے لیے ایک مخصوص browser profile استعمال کرنے کی اجازت ہے۔ Heartbeat کے ساتھ lease استعمال کریں۔ اگر ٹاسک توقع سے زیادہ وقت لے لے، تو worker کو lease کی تجدید (renew) کرنی چاہیے۔
Fencing Tokens پرانے (stale) workers خطرناک ہوتے ہیں۔ اگر کوئی worker network lag کی وجہ سے اپنی lease کھو دیتا ہے لیکن چلتا رہتا ہے، تو وہ ڈیٹا لکھنے کی کوشش کر سکتا ہے۔ Fencing token استعمال کریں۔ storage layer کو پرانے token سے ہونے والی کسی بھی write کو مسترد کر دینا چاہیے۔
آپ کو ایک readiness gate بھی شامل کرنا چاہیے۔ Playwright شروع کرنے سے پہلے، ان چیزوں کو چیک کریں:
- کیا اکاؤنٹ paused ہے؟
- کیا profile کو انسانی نظرِ ثانی (human review) کی ضرورت ہے؟
- کیا proxy region job کی ضروریات کے مطابق ہے؟
ایک blocked job ہمیشہ failed job نہیں ہوتی۔ یہ اکثر صرف ایک ایسی job ہوتی ہے جو صحیح context کا انتظار کر رہی ہو۔
ایسی queues بنانا بند کریں جو صرف رفتار کو ترجیح دیتی ہیں۔ ایسی queues بنائیں جو account state کو ترجیح دیں۔
Source: https://dev.to/web4browser/using-routing-keys-and-profile-leases-in-playwright-worker-queues-a53
