Menggunakan Routing Keys dan Profile Leases dalam Playwright Worker Queues
Kesalahan Playwright seperti TimeoutError: page.click failed sering kali merupakan sebuah kebohongan.
Kesalahan tersebut memberi tahu Anda apa yang dilihat oleh skrip. Kesalahan tersebut tidak memberi tahu Anda mengapa skrip berada di tempat yang salah sejak awal.
Saya pernah melihat dua worker mengambil pekerjaan untuk akun yang sama. Kedua worker tersebut membuka profil browser yang sama di waktu yang bersamaan. Satu worker sedang menunggu halaman yang lambat. Worker lainnya mencoba lagi, mengubah status sesi, dan menyebabkan kegagalan.
Masalahnya bukan pada kodenya. Masalahnya ada pada antrean (queue).
Sebagian besar worker queue dirancang untuk pekerjaan yang stateless.
- Ambil pekerjaan.
- Cari worker yang bebas.
- Jalankan tugas.
- Tandai sebagai selesai.
Ini berhasil untuk tangkapan layar (screenshot) atau panggilan API. Ini gagal untuk otomatisasi browser.
Profil browser tidaklah stateless. Ia milik satu akun, satu proxy, dan satu status sesi. Worker tercepat tidak selalu merupakan worker yang tepat.
Untuk melakukan penskalaan (scale) dengan aman, Anda harus mengubah logika Anda.
Alih-alih bertanya: Worker mana yang bebas?
Bertanyalah: Lingkungan akun mana yang aman untuk digunakan sekarang?
Anda dapat menyelesaikan ini dengan tiga lapisan:
Routing Keys Jangan biarkan sembarang worker mengambil sembarang pekerjaan. Gunakan routing key berdasarkan ID profil atau ID akun. Ini memastikan hanya satu worker yang menyentuh profil tertentu pada satu waktu.
Profile Leases Klaim antrean berarti seorang worker memiliki sebuah pekerjaan. Profile lease berarti seorang worker diizinkan untuk menggunakan profil browser tertentu untuk jangka waktu tertentu. Gunakan lease dengan heartbeat. Jika tugas memakan waktu lebih lama dari yang diharapkan, worker harus memperbarui lease tersebut.
Fencing Tokens Worker yang usang (stale) itu berbahaya. Jika seorang worker kehilangan lease-nya karena lag jaringan tetapi tetap berjalan, ia mungkin mencoba menulis data. Gunakan fencing token. Lapisan penyimpanan harus menolak setiap penulisan dari token lama.
Anda juga harus menambahkan readiness gate. Sebelum Anda menjalankan Playwright, periksa hal-hal berikut:
- Apakah akun sedang dijeda?
- Apakah profil memerlukan peninjauan manusia?
- Apakah wilayah proxy sesuai dengan persyaratan pekerjaan?
Pekerjaan yang terblokir tidak selalu berarti pekerjaan yang gagal. Sering kali itu hanyalah pekerjaan yang sedang menunggu konteks yang tepat.
Berhentilah membangun antrean yang hanya memprioritaskan kecepatan. Bangunlah antrean yang memprioritaskan status akun.
Sumber: https://dev.to/web4browser/using-routing-keys-and-profile-leases-in-playwright-worker-queues-a53
