Нещодавно я почав вивчати нюанси масштабованої та корпоративної архітектури комп’ютера, і одним із центральних компонентів є черга повідомлень. Щоб дізнатися якнайбільше з будь-якої парадигми програмування, я намагаюся реалізувати власну версію служби черги повідомлень.
Поки що моя початкова конструкція працює на прослуховувачі різьбових сокетів, але для того, щоб запобігти завантаженню одного і того ж повідомлення два рази двома окремими вузлами обробки, регістр індексу черги повідомлень блокується при ініціюванні зчитування, а розблокується після того, як реєстр був оновлено. Таким чином, це заперечує необхідність її потокового потоку і означає, що існує стеля розміру масштабованої системи на основі швидкості обробки сервера, на якій працює служба черги повідомлень.
Шляхом цього було б запустити службу черги повідомлень на декількох серверах, але це збільшить ймовірність завантаження одного і того ж повідомлення вдвічі. Єдиним способом запобігти виникненню таких проблем було б включити зворотний виклик відкликання, який (після того, як сервери або навіть потоки на одному сервері синхронізували свою інформацію та виявили таку повторну видачу) наказали б вузлу обробки припинити його поточне завдання та повторно запитувати чергу чергових повідомлень для наступного повідомлення, але знову ж таки, буде стеля, де більша частина трафіку, що надсилається, буде синхронізацією та відкликанням зворотних викликів, викликаючи вузьке місце та уповільнюючи обробку інформації, щоб багато вузлів обробки виконували б нульові операції та витрачали час.
Останній спосіб, який я можу вирішити, щоб вирішити цю проблему - це кожен сервер черги повідомлень (і кожен потік на кожному сервері) матиме певне зміщення щодо того, де в черзі він шукає, але це може мати проблеми на основі тип програми, особливо якщо обробку потрібно виконати в певному порядку.
Отже, маючи на увазі, чи існують конструкції архітектури черги повідомлень, які могли б показати мені, як існуючі служби черги повідомлень класів підприємств уникають цих проблем?