Yakın zamanda ölçeklenebilir ve kurumsal bilgisayar mimarisinin nüanslarını öğrenmeye başladım ve merkezi bileşenlerden biri de bir mesajlaşma kuyruğu. Herhangi bir programlama paradigmasından en iyisini öğrenmek için bir mesajlaşma kuyruğu servisi olan kendi versiyonumu uygulamaya çalışıyorum.
Şimdiye kadar, ilk tasarımım iş parçacığı bir soket dinleyicisi üzerinde çalışıyor, ancak aynı mesajın iki ayrı işlem düğümü tarafından iki kez indirilmesini önlemek için, bir mesaj başlatıldığında mesaj sırası indeks yazıcısı kilitlendi ve kayıt yapıldıktan sonra kilidi açıldı. güncellenmiş. Bu nedenle, bu iş parçacığı için gereksinimi ortadan kaldırır ve ileti dizisi hizmetinin çalıştığı sunucunun işlem hızına bağlı olarak ölçeklenebilir bir sistemin boyutu için bir tavan olduğu anlamına gelir.
Bunu çözmenin yolu, birden çok sunucuda ileti sırası hizmetini çalıştırmak olacaktır, ancak bu, aynı iletinin iki kez indirilme olasılığını artıracaktır. Bu tür sorunları önlemenin tek yolu, (sunucular, hatta tek bir sunucudaki iş parçacıkları, bilgilerini senkronize ettikten ve böyle bir yeniden yayınlama tespit ettikten sonra) işlem düğümüne durması için komut verecek olan bir iptal çağrısı eklemek olacaktır. mevcut iş ve bir sonraki mesaj için mesaj kuyruğunu yeniden sorgulamak, ancak yine, gönderilen trafiğin çoğunun senkronizasyon ve iptal çağrılarının alınacağı, bir tıkanıklığa neden olan ve bilgilerin işlenmesini yavaşlatan bir tavan olacaktır. işlem düğümlerinin çoğu boş işlem yapıyor ve zamanını boşa harcıyordu.
Bu sorunu çözmeyi düşünebildiğim son yol, her ileti kuyruğu sunucusunun (ve her sunucudaki her iş parçacığının) kuyruğun aradığı yerle ilgili olarak belirli bir uzaklığı olmasını sağlamaktır; Uygulamanın türü, özellikle işlemenin belirli bir sırada yapılması gerekiyorsa.
Söylenenlerin hepsi, mevcut kurumsal sınıf mesaj sırası servislerinin bu sorunları nasıl önlediğini gösterebilecek herhangi bir mesaj sırası mimarisinin tasarımları var mı?