AWS ALB WebSocket Timeout: Neden Ses Uygulamaları Kopuyor? – webdedik gönderisi

AWS ALB WebSocket Timeout: Neden Ses Uygulamaları Kopuyor?

Bir ses uygulamasında kullanıcı mikrofon açık tutuyor ama konuşmuyor. Düşünüyor. Bir dakika sessizlik. Sonra cevap vermeye başlıyor, hiçbir şey olmuyor. Uygulama kendini yeniden bağlıyor, ajan ilk soruyu tekrar soruyor. Döngü başlıyor.

Bu yazıda anlatılan sorun tam da bu: AWS Application Load Balancer, her iki yönde de 60 saniye veri akışı olmayan WebSocket bağlantılarını kapatıyor. Hiçbir hata logu, hiçbir 5xx durum kodu yok. Load balancer sadece konfigürasyonuna göre çalışıyor.

Sorun Voice Activity Detection (VAD) kullanan uygulamalarda ortaya çıkıyor. Kullanıcı konuşmadığı sürece mikrofon veri göndermez. Sessizlik sürerse, ve 60 saniye çok kısa gelebilir, ALB bağlantıyı keser. Tarayıcı close code 1006 alır, bu da rastgele bir ağ hatası gibi görünür. Gerçek sebep hiç belli olmaz.

Bu yazarın haftada 412 ses oturumundan 58'i (yüzde 14) bu şekilde koptu. Hiçbir alarm çalmadı çünkü sistem normal çalışıyordu.

Çözüm üç adımda: Birincisi, sunucu tarafından her 25 saniyede bir WebSocket ping gönder. Bağlantı aktif kalır, ALB timeout tetiklenmez. İkincisi, ALB idle_timeout değerini 60 saniyeden daha yüksek ayarla (örneğin 300 saniye). Üçüncüsü, istemci tarafında bağlantı koptuğunda otomatik yeniden bağlanma mekanizması ekle, ama bu, ping göndermeyi tamamlayamaz.

Eğer WebSocket kullanan bir uygulamanda sessiz dönemler yaşanıyorsa ve bağlantılar kopuyorsa, ilk şüphelenecek yer load balancer idle timeout ayarı olmalı. Loglar sessiz kalabilir ama bağlantı ölür.

konu hakkında tepkinizi verebilirsiniz