Menggunakan Routing Keys dan Profile Leases dalam Playwright Worker Queues

Ralat Playwright seperti TimeoutError: page.click failed selalunya adalah satu penipuan.

Ralat tersebut memberitahu anda apa yang dilihat oleh skrip. Ia tidak memberitahu anda mengapa skrip tersebut berada di tempat yang salah pada mulanya.

Saya pernah melihat dua pekerja (workers) mengambil tugasan untuk akaun yang sama. Kedua-dua pekerja membuka profil pelayar yang sama pada masa yang sama. Seorang pekerja sedang menunggu halaman yang perlahan. Pekerja yang satu lagi mencuba semula, mengubah keadaan sesi (session state), dan menyebabkan kegagalan.

Masalahnya bukan pada kod. Masalahnya adalah pada barisan (queue).

Kebanyakan barisan pekerja direka untuk tugasan tanpa keadaan (stateless jobs).

  • Ambil tugasan.
  • Cari pekerja yang kosong.
  • Jalankan tugasan.
  • Tandakan ia selesai.

Ini berfungsi untuk tangkapan skrin atau panggilan API. Ia gagal untuk automasi pelayar.

Profil pelayar bukanlah tanpa keadaan (stateless). Ia milik satu akaun, satu proksi, dan satu keadaan sesi. Pekerja yang terpantas tidak semestinya pekerja yang betul.

Untuk berskala dengan selamat, anda mesti mengubah logik anda.

Daripada bertanya: Pekerja mana yang kosong?

Tanya: Persekitaran akaun mana yang selamat untuk digunakan sekarang?

Anda boleh menyelesaikan ini dengan tiga lapisan:

  1. Routing Keys Jangan biarkan mana-mana pekerja mengambil sebarang tugasan. Gunakan routing key berdasarkan ID profil atau ID akaun. Ini memastikan hanya satu pekerja menyentuh profil tertentu pada satu-satu masa.

  2. Profile Leases Tuntutan barisan (queue claim) bermaksud seorang pekerja memiliki tugasan. Profile lease bermaksud seorang pekerja dibenarkan menggunakan profil pelayar tertentu untuk tempoh masa yang ditetapkan. Gunakan lease dengan heartbeat. Jika tugasan mengambil masa lebih lama daripada yang dijangkakan, pekerja mesti memperbaharui lease tersebut.

  3. Fencing Tokens Pekerja yang lapuk (stale workers) adalah berbahaya. Jika seorang pekerja kehilangan lease disebabkan oleh lengah rangkaian (network lag) tetapi terus berjalan, ia mungkin cuba menulis data. Gunakan fencing token. Lapisan storan harus menolak sebarang penulisan daripada token lama.

Anda juga mesti menambah pintu kesediaan (readiness gate). Sebelum anda melancarkan Playwright, semak perkara berikut:

  • Adakah akaun digantung?
  • Adakah profil memerlukan semakan manusia?
  • Adakah wilayah proksi sepadan dengan keperluan tugasan?

Tugasan yang disekat tidak semestinya tugasan yang gagal. Ia selalunya hanyalah tugasan yang sedang menunggu konteks yang betul.

Berhenti membina barisan yang hanya mengutamakan kelajuan. Bina barisan yang mengutamakan keadaan akaun.

Sumber: https://dev.to/web4browser/using-routing-keys-and-profile-leases-in-playwright-worker-queues-a53