최근에 확장 가능한 엔터프라이즈 컴퓨터 아키텍처의 뉘앙스를 배우기 시작했으며 중앙 구성 요소 중 하나가 메시징 대기열입니다. 모든 프로그래밍 패러다임에서 최대한 많은 것을 배우기 위해 자체 버전의 메시징 대기열 서비스를 구현하려고합니다.
지금까지 초기 디자인은 스레드 소켓 리스너에서 실행되지만 두 개의 개별 처리 노드에서 동일한 메시지가 두 번 다운로드되는 것을 방지하기 위해 읽기가 시작될 때 메시지 큐 색인 레지스터가 잠기고 레지스터가 완료된 후 잠금이 해제됩니다 업데이트되었습니다. 따라서 이는 스레드 될 필요성을 없애고 메시징 큐 서비스가 실행중인 서버의 처리 속도에 따라 확장 가능한 시스템의 크기에 한계가 있음을 의미합니다.
이를 해결하는 방법은 여러 서버에서 메시지 큐 서비스를 실행하는 것이지만 동일한 메시지가 두 번 다운로드 될 가능성이 높아집니다. 이러한 문제가 발생하지 않도록하는 유일한 방법은 서버 또는 단일 서버의 스레드가 정보를 동기화 한 후 이러한 재발급을 감지 한 후 처리 노드에서 중지하도록 명령 취소 콜백을 포함하는 것입니다. 현재 작업을 수행하고 다음 메시지에 대한 메시지 큐를 다시 쿼리하지만 다시 전송되는 트래픽의 대부분이 동기화 및 취소 콜백으로 인해 병목 현상이 발생하고 정보 처리 속도가 느려질 수 있습니다. 많은 처리 노드가 널 작업을 수행하고 시간을 낭비하고 있습니다.
이 문제를 해결할 수있는 마지막 방법은 각 메시지 대기열 서버 (및 각 서버의 각 스레드)가 대기열의 위치와 관련하여 특정 오프셋을 갖도록하는 것입니다. 특히 특정 순서로 처리해야 할 경우 응용 프로그램 유형.
그렇다면 기존 엔터프라이즈 급 메시지 대기열 서비스가 이러한 문제를 어떻게 피할 수 있는지 보여줄 수있는 메시지 대기열 아키텍처 디자인이 있습니까?