Recentemente, comecei a aprender as nuances da arquitetura escalonável e corporativa de computadores, e um dos componentes centrais é uma fila de mensagens. Para aprender o máximo possível de qualquer paradigma de programação, estou tentando implementar minha própria versão de um serviço de fila de mensagens.
Até o momento, meu design inicial é executado em um ouvinte de soquete encadeado, mas para impedir que a mesma mensagem seja baixada duas vezes por dois nós de processamento separados, o registro do índice da fila de mensagens é bloqueado quando uma leitura é iniciada e desbloqueado após o registro ter sido efetuado. Atualizada. Como tal, isso nega a necessidade de ser encadeado e significa que há um limite para o tamanho de um sistema escalável com base na velocidade de processamento do servidor em que o serviço da fila de mensagens está sendo executado.
A maneira de contornar isso seria executar o serviço de fila de mensagens em vários servidores, mas isso aumentará a probabilidade de a mesma mensagem ser baixada duas vezes. A única maneira de impedir que esses problemas ocorram seria incluir um retorno de chamada de revogação que (depois que os servidores ou mesmo os encadeamentos em um único servidor sincronizassem suas informações e detectassem tal reemissão) comandaria o nó de processamento para interromper sua trabalho atual e consulte novamente a fila de mensagens para a próxima mensagem, mas, novamente, haveria um teto em que a maior parte do tráfego enviado seria sincronizações e retornos de chamada de revogação, causando um gargalo e retardando o processamento de informações para que um Muitos nós de processamento estariam executando operações nulas e perdendo tempo.
A última maneira em que posso resolver esse problema é fazer com que cada servidor da fila de mensagens (e cada encadeamento em cada servidor) tenha um deslocamento específico para o local na fila que está procurando, mas isso pode ter problemas com base no tipo de aplicativo, especialmente se for necessário que o processamento seja feito em uma ordem específica.
Portanto, tudo o que foi dito, existem projetos de arquitetura de fila de mensagens que possam me mostrar como os serviços existentes de fila de mensagens de nível empresarial evitam esses problemas?