Recientemente comencé a aprender los matices de la arquitectura informática escalable y empresarial, y uno de los componentes centrales es una cola de mensajes. Para aprender lo más que pueda de cualquier paradigma de programación, estoy tratando de implementar mi propia versión de un servicio de cola de mensajería.
Hasta ahora, mi diseño inicial se ejecuta en un escucha de socket roscado, pero para evitar que el mismo mensaje sea descargado dos veces por dos nodos de procesamiento separados, el registro del índice de la cola de mensajes se bloquea cuando se inicia una lectura y se desbloquea después de que el registro ha sido actualizado. Como tal, esto niega la necesidad de que se enhebre y significa que hay un límite para el tamaño de un sistema escalable en función de la velocidad de procesamiento del servidor en el que se ejecuta el servicio de cola de mensajería.
La forma de evitar esto sería ejecutar el servicio de cola de mensajes en varios servidores, pero esto aumentará la probabilidad de que el mismo mensaje se descargue dos veces. La única forma de evitar que ocurran tales problemas sería incluir una devolución de llamada de revocación que (después de que los servidores, o incluso los hilos en un solo servidor, hayan sincronizado su información y detectado dicha reemisión) ordenaría al nodo de procesamiento que detenga su trabajo actual y vuelva a consultar la cola de mensajes para el siguiente mensaje, pero nuevamente, habría un límite en el que la mayor parte del tráfico que se enviaría sería sincronizaciones y revocaciones de revocación, lo que provocaría un cuello de botella y ralentizaría el procesamiento de la información para que Muchos de los nodos de procesamiento estarían realizando operaciones nulas y perdiendo el tiempo.
La última forma en que puedo pensar para solucionar este problema es hacer que cada servidor de la cola de mensajes (y cada hilo en cada servidor) tenga un desplazamiento específico en cuanto a en qué parte de la cola está buscando, pero eso podría tener problemas basados en el tipo de aplicación, especialmente si se requiere que el procesamiento se realice en un orden específico.
Entonces, dicho todo esto, ¿hay algún diseño de arquitectura de colas de mensajes que pueda mostrarme cómo los servicios de colas de mensajes de nivel empresarial existentes evitan estos problemas?