soylenmezsmt adlı üyeden alıntı: mesajı görüntüle
Hocam yine rahatsız ediyorum ama ufak bir sorum daha var.
1 numaralı worker, 1 ID’li siparişi aldı ve şu anda işliyor ise, diğer 9 sunucu boş demektir.
Diyelim ki bir sipariş daha geldi ve bu da yine 1 numaralı worker’a gitti. Böyle olunca diğer 9 sunucu hâlâ boşta kalıyor ama 1 makine 2 siparişi aynı anda işliyor, bu da servisi yavaşlatıyor.
Normalde, bu yeni siparişi diğer boş sunuculardan birinin alması gerekirdi.

Bunun için şöyle yapmak mantıklı mı:
Bütün worker’ların kendine ait bir WSS bağlantısı olacak, aradaki Redis sunucusu ise sırasıyla veya boşluk-doluluk oranına göre siparişleri rastgele atayacak.
Böyle yapmak mantıklı mı, yoksa daha mantıklı bir yöntem
var mı?
Hocam queue zaten tam olarak istediğin şeyi yapıyor. Competitive consumers pattern’de her worker queue’yu dinler ve queue round-robin(RabbitMQ bu algoritmayı kullanıyor load balancing için) ile mesajları dağıtır, worker bir siparişi işliyorsa ve ack göndermeden yeni mesaj çekmez, yeni sipariş geldiğinde boş olan worker o işi alır. Tek yapman gereken prefetch count’u doğru ayarlamak prefetch=1 yaparak her worker’ın aynı anda sadece 1 sipariş almasını garantilersin, böylece load tam dengeli dağılır. Websocket ile manuel dağıtım yapman gereksiz çünkü queue zaten bunu yapıyor ve battle-tested, sen Redis ile load balancer yazarsan ekstra complexity eklersin, hata riski ortaya çıkar.Kritik işlemler için (ödeme, stok gibi) idempotency kontrolü ve gerekirse distributed lock eklemen iyi olur ama temel load balancing için queue’nun kendi mekanizması yeterli, bu işini görecektir