Niedawno zacząłem uczyć się niuansów skalowalnej i korporacyjnej architektury komputerowej, a jednym z głównych elementów jest kolejka przesyłania wiadomości. Aby jak najlepiej nauczyć się z dowolnego paradygmatu programowania, próbuję wdrożyć własną wersję usługi kolejki przesyłania wiadomości.
Do tej pory mój początkowy projekt działał na nasłuchiwaniu z wątkami, ale aby zapobiec dwukrotnemu pobieraniu tej samej wiadomości przez dwa osobne węzły przetwarzania, rejestr indeksu kolejek komunikatów jest blokowany po zainicjowaniu odczytu i odblokowywany po zarejestrowaniu rejestru zaktualizowane. W związku z tym eliminuje to potrzebę wątkowania i oznacza, że istnieje pułap wielkości skalowalnego systemu w oparciu o szybkość przetwarzania serwera, na którym działa usługa kolejki przesyłania komunikatów.
Aby obejść ten problem, należy uruchomić usługę kolejki wiadomości na wielu serwerach, ale zwiększy to prawdopodobieństwo dwukrotnego pobrania tej samej wiadomości. Jedynym sposobem zapobiegania takim problemom byłoby włączenie wywołania zwrotnego odwołania, które (po tym, jak serwery, a nawet wątki na jednym serwerze zsynchronizują swoje informacje i wykryją taką ponowną emisję) nakazałby węzłowi przetwarzania, aby zatrzymał jego bieżące zadanie i ponownie przeprowadź zapytanie do kolejki komunikatów dla następnej wiadomości, ale znowu będzie pułap, w którym większość wysyłanego ruchu to synchronizacje i odwołania zwrotne, powodując wąskie gardło i spowalniające przetwarzanie informacji, tak że wiele węzłów przetwarzających wykonywałoby operacje zerowe i marnowało czas.
Ostatnim sposobem, w jaki mogę wymyślić obejście tego problemu, jest posiadanie każdego serwera kolejki komunikatów (i każdego wątku na każdym serwerze) z określonym przesunięciem co do miejsca, w którym szuka kolejki, ale może to mieć problemy na podstawie rodzaj aplikacji, szczególnie jeśli przetwarzanie musi być wykonane w określonej kolejności.
Tak więc czy to wszystko, czy są jakieś projekty architektury kolejek komunikatów, które mogłyby pokazać mi, w jaki sposób istniejące usługi kolejek wiadomości klasy korporacyjnej unikają tych problemów?