Playwright Worker Queues-এ Routing Keys এবং Profile Leases ব্যবহার করা
TimeoutError: page.click failed-এর মতো Playwright error প্রায়শই একটি মিথ্যা তথ্য দেয়।
এই error আপনাকে জানায় স্ক্রিপ্টটি কী দেখেছে। কিন্তু স্ক্রিপ্টটি কেন শুরু থেকেই ভুল জায়গায় ছিল, তা এটি বলে না।
আমি একবার দেখেছি দুটি worker একই অ্যাকাউন্টের জন্য job গ্রহণ করেছে। উভয় worker একই সময়ে একই browser profile ওপেন করেছে। একজন worker একটি ধীরগতির পেজের জন্য অপেক্ষা করছিল। অন্য workerটি পুনরায় চেষ্টা (retry) করেছে, session state পরিবর্তন করেছে এবং এর ফলে একটি failure ঘটেছে।
সমস্যাটি কোডে ছিল না। সমস্যাটি ছিল queue-তে।
বেশিরভাগ worker queue stateless job-এর জন্য ডিজাইন করা হয়েছে।
- একটি job নিন।
- একটি free worker খুঁজুন।
- টাস্কটি চালান।
- এটি সম্পন্ন হিসেবে চিহ্নিত করুন।
এটি screenshot বা API call-এর জন্য কাজ করে। কিন্তু browser automation-এর ক্ষেত্রে এটি ব্যর্থ হয়।
একটি browser profile stateless নয়। এটি একটি নির্দিষ্ট অ্যাকাউন্ট, একটি proxy এবং একটি session state-এর অন্তর্ভুক্ত। দ্রুততম worker মানেই সবসময় সঠিক worker নয়।
নিরাপদে scale করতে হলে আপনাকে আপনার logic পরিবর্তন করতে হবে।
জিজ্ঞাসা করার পরিবর্তে: কোন worker টি free আছে?
জিজ্ঞাসা করুন: এখন কোন account environment ব্যবহার করা নিরাপদ?
আপনি তিনটি লেয়ারের মাধ্যমে এটি সমাধান করতে পারেন:
Routing Keys কোনো worker-কে যেকোনো job নিতে দেবেন না। profile ID বা account ID-এর ওপর ভিত্তি করে একটি routing key ব্যবহার করুন। এটি নিশ্চিত করে যে একটি নির্দিষ্ট profile-এ এক সময়ে কেবল একটি worker কাজ করছে।
Profile Leases একটি queue claim মানে হলো একটি worker একটি job-এর মালিক। একটি profile lease মানে হলো একটি worker-কে একটি নির্দিষ্ট সময়ের জন্য একটি নির্দিষ্ট browser profile ব্যবহার করার অনুমতি দেওয়া হয়েছে। একটি heartbeat সহ lease ব্যবহার করুন। যদি টাস্কটি প্রত্যাশার চেয়ে বেশি সময় নেয়, তবে worker-কে leaseটি রিনিউ (renew) করতে হবে।
Fencing Tokens Stale worker-রা বিপজ্জনক। যদি নেটওয়ার্ক ল্যাগের কারণে কোনো worker তার lease হারায় কিন্তু কাজ চালিয়ে যায়, তবে সেটি ডেটা লেখার চেষ্টা করতে পারে। একটি fencing token ব্যবহার করুন। স্টোরেজ লেয়ারের উচিত কোনো পুরনো token থেকে আসা যেকোনো write অপারেশন প্রত্যাখ্যান করা।
আপনাকে একটি readiness gate-ও যোগ করতে হবে। Playwright চালু করার আগে এগুলো পরীক্ষা করে নিন:
- অ্যাকাউন্টটি কি paused অবস্থায় আছে?
- প্রোফাইলটির কি মানুষের রিভিউ প্রয়োজন?
- প্রক্সি অঞ্চলটি কি job-এর প্রয়োজনীয়তার সাথে মিলে যায়?
একটি blocked job মানেই সবসময় একটি failed job নয়। এটি প্রায়শই কেবল সঠিক context-এর জন্য অপেক্ষা করা একটি job।
কেবল গতির ওপর গুরুত্ব দেয় এমন queue তৈরি করা বন্ধ করুন। এমন queue তৈরি করুন যা account state-কে অগ্রাধিকার দেয়।
Source: https://dev.to/web4browser/using-routing-keys-and-profile-leases-in-playwright-worker-queues-a53
