Playwright İşçi Kuyruklarında Yönlendirme Anahtarları ve Profil Kiralama Kullanımı

TimeoutError: page.click failed gibi bir Playwright hatası genellikle bir yalandır.

Hata size betiğin ne gördüğünü söyler. Betiğin neden en başta yanlış yerde olduğunu söylemez.

Bir keresinde iki işçinin aynı hesap için iş aldığını gördüm. Her iki işçi de aynı anda aynı tarayıcı profilini açmıştı. Bir işçi yavaş bir sayfanın yüklenmesini bekliyordu. Diğer işçi ise işlemi tekrar denedi, oturum durumunu değiştirdi ve bir hataya neden oldu.

Sorun kodda değildi. Sorun kuyruktaydı.

Çoğu işçi kuyruğu durumsuz (stateless) işler için tasarlanmıştır.

  • Bir iş al.
  • Boş bir işçi bul.
  • Görevi çalıştır.
  • Tamamlandı olarak işaretle.

Bu, ekran görüntüleri veya API çağrıları için işe yarar. Tarayıcı otomasyonu için başarısız olur.

Bir tarayıcı profili durumsuz değildir. Tek bir hesaba, tek bir proxy'ye ve tek bir oturum durumuna aittir. En hızlı işçi her zaman doğru işçi değildir.

Güvenli bir şekilde ölçeklendirmek için mantığınızı değiştirmelisiniz.

Şunu sormak yerine: Hangi işçi boş?

Şunu sorun: Şu an hangi hesap ortamını kullanmak güvenli?

Bunu üç katmanla çözebilirsiniz:

  1. Yönlendirme Anahtarları (Routing Keys) Herhangi bir işçinin herhangi bir işi almasına izin vermeyin. Profil ID'sine veya hesap ID'sine dayalı bir yönlendirme anahtarı kullanın. Bu, her seferinde yalnızca bir işçinin belirli bir profile dokunmasını sağlar.

  2. Profil Kiralama (Profile Leases) Bir kuyruk talebi, bir işçinin bir işe sahip olduğu anlamına gelir. Bir profil kiralama ise bir işçinin belirli bir süre boyunca belirli bir tarayıcı profilini kullanmasına izin verildiği anlamına gelir. Bir "heartbeat" (yaşam sinyali) ile kiralama kullanın. Görev beklenenden uzun sürerse, işçi kiralamayı yenilemelidir.

  3. Fencing Token (Sınırlandırma Belirteçleri) Güncelliğini yitirmiş işçiler tehlikelidir. Bir işçi ağ gecikmesi nedeniyle kiralamasını kaybederse ancak çalışmaya devam ederse, veri yazmaya çalışabilir. Bir fencing token kullanın. Depolama katmanı, eski bir tokenden gelen tüm yazma işlemlerini reddetmelidir.

Ayrıca bir hazırlık kontrolü (readiness gate) eklemelisiniz. Playwright'ı başlatmadan önce şunları kontrol edin:

  • Hesap duraklatıldı mı?
  • Profil insan incelemesi gerektiriyor mu?
  • Proxy bölgesi iş gereksinimleriyle eşleşiyor mu?

Engellenmiş bir iş, her zaman başarısız olmuş bir iş değildir. Genellikle sadece doğru bağlamı bekleyen bir iştir.

Sadece hıza öncelik veren kuyruklar inşa etmeyi bırakın. Hesap durumuna öncelik veren kuyruklar inşa edin.

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