캐시의 Pub/Sub 메시징: 개요
이 발행/구독(Pub/Sub) 메시징 패러다임은 송신자(게시자)와 수신자(구독자) 간의 직접적인 연결 없이 여러 애플리케이션 간에 메시지를 교환할 수 있는 중간 채널(토픽이라고 함)을 제공합니다. 게시자 애플리케이션은 토픽을 통해 구독자 애플리케이션으로 메시지를 보냅니다. 모든 Pub/Sub 모델은 통신을 위한 채널을 필요로 하므로, NCache 토픽을 매개체로 사용하여 게시자가 토픽에 메시지를 게시할 수 있도록 합니다. 구독자는 토픽을 통해 알림으로 메시지를 수신합니다. NCache 메시지 버스로서 애플리케이션은 직접적인 결합 없이 높은 가용성과 확장성을 달성할 수 있으며, 게시자는 수천 명의 구독자에게 실시간으로 이벤트를 브로드캐스트할 수 있습니다. 분산 캐시 외에도, NCache 또한 전용 제공 Pub/Sub 메시징 캐시.
중대한
다음과 같은 이유로 전용 Pub/Sub 캐시를 권장합니다.
축출: 캐시에 메시지와 캐시 항목이 포함되어 있는 경우 캐시 항목을 자주 제거하면 메시지를 구독자에게 전달하기 전에 제거할 수도 있습니다.
국가 이전: 상태 이전은 각 캐시 항목 작업에 비용을 추가합니다. 메시지는 자주 게시, 릴레이 및 만료되기 때문에 이 반복적인 활동은 상태 전송을 트리거하기 때문에 비용이 많이 들 수 있습니다.
분산 아키텍처에서 Pub/Sub 메시징을 사용하는 이유는 무엇일까요?
실시간 이벤트는 이벤트 기반 분산 아키텍처의 다양한 애플리케이션 간에 알림 공유가 필요합니다. Pub/Sub 패턴을 사용하면 게시자가 구독자와 이벤트를 공유할 수 있으므로 관심 있는 이벤트 발생 시 원하는 처리가 수행됩니다.
예를 들어, 구독자 그룹은 주문 배송 세부 정보에 관심이 있어 이를 처리하여 주문 배송을 추적할 수 있습니다. 따라서 구독자는 주문 세부 정보에 대한 메시지를 전달하는 토픽을 구독하게 됩니다. 게시자가 토픽에 메시지를 게시하면 구독자는 알림을 받고 주문 세부 정보가 포함된 메시지를 수신하여 추가 처리를 할 수 있습니다.
핵심 구성 요소 NCache 펍/하위 모델
의 기본 구성 요소 NCache 게시자 구독자(Pub/Sub) 모델은 아래에 나열되어 있으며 나중에 자세히 설명합니다.
주제 : 메시지가 게시되는 장소입니다.
제작사 : Topic/Topics에 메시지를 게시하는 애플리케이션(웹 애플리케이션, 데스크톱 애플리케이션, 마이크로서비스)입니다.
구독자: Topic/Topics에서 메시지를 수신하는 데 관심이 있는 애플리케이션입니다.
구독 : 구독자가 의도한 메시지를 수신하기 위해 생성된 관심 엔터티입니다.
요청사항: 게시자가 전송하고 구독자가 주제를 통해 수신하는 실제 데이터 객체입니다.
주제 NCache
게시자는 주제에 메시지를 게시합니다. 구독자는 메시지를 받기 위해 주제를 구독합니다. 이 주제는 분산된 형태로 존재합니다. NCache따라서 모든 클러스터 노드에서 생성됩니다. 여기에는 게시자가 큐에 게시하는 실제 데이터 객체를 저장하는 메시지 저장소가 포함됩니다. 또한 구독하는 모든 구독자 목록과 게시자 목록을 내부적으로 유지합니다. ITopic/Topic 인터페이스 용이 주제 생성, 주제 얻기예산 및 주제 삭제. 당신은 또한 수 주제를 비동기적으로 삭제 주제가 삭제될 때까지 기다리는 것을 피하세요.
주의 사항
주제와 기본 메시지의 분산된 특성으로 인해 확장성이 향상됩니다.
메시지가 주제에 게시되면 이벤트가 발생하고 주제는 선호도에 따라 구독자에게 이를 전달합니다. 메시지 전달 옵션 그래서 그들은 필요에 따라 메시지를 받을 수 있습니다. 다음 그림은 게시자와 구독자를 위한 중개 채널로서의 토픽의 역할을 보여줍니다.
주의 사항
일시적으로 구독자 연결이 끊어졌다가 자동으로 다시 연결되는 경우 구독 및 실패 이벤트 알림과 같은 주제와 관련된 모든 정보가 구독자 측에서 어떠한 중단 없이 주제에 다시 등록됩니다.
주제 우선순위
NCache 토픽 수준 우선순위 기능을 도입하여 중요도에 따라 토픽에 상대적인 우선순위를 지정할 수 있습니다. 중요한 메시지를 게시해야 하는 토픽에는 높은 우선순위를 부여할 수 있으며, 이 경우 해당 메시지가 먼저 전달됩니다. 마찬가지로 중요도가 낮은 메시지에는 낮은 우선순위를 부여하여 캐시에서 먼저 처리되도록 할 수 있습니다. 간단하게 설정할 수 있습니다. 주제 수준 우선순위 중요한 메시지 전달의 우선순위를 정하기 위해 주제를 생성할 때.
중대한
주제의 우선순위는 주제를 생성할 때만 지정할 수 있으며, 이후에는 변경할 수 없습니다.
주제 삭제 알림
주제 삭제 알림을 받으려면 애플리케이션이 다음에 등록됩니다. OnTopicDeleted 이벤트주제 삭제 시 캐시의 모든 메시지와 관련 메타 정보가 삭제됩니다. 따라서 구독자와 게시자는 다음과 같은 이유로 삭제 알림을 받습니다.
- 구독자는 등록된 토픽에서 들어오는 메시지를 기다리고 있을 수 있습니다. 토픽이 삭제되면 구독자는 이벤트 알림을 통해 실행을 적절히 처리하고 무한 대기 상태를 피할 수 있습니다.
- 게시자는 존재하지 않는 주제에 메시지를 보내는 것을 방지하고 보류 중인 메시지와 향후 실행을 이에 따라 처리할 수 있습니다.
주제에 메시지 게시
게시자는 주제에 메시지 게시 주제 이름을 지정하여 메시지를 비동기적으로 대량으로 게시하여 애플리케이션 성능을 향상시킬 수 있습니다. 분할 캐시는 클러스터 전체에 메시지를 분산합니다. 메시지 라우팅의 경우 모든 메시지에는 고유한 ID가 있습니다. MessageID 게시자 쪽에서 해시 코드는 MessageID 메시지를 저장할 클러스터 노드를 결정합니다. NCache 게시자가 메시지를 게시하는 동안 다음 속성을 사용할 수 있습니다.
주의 사항
NCache 성능 및 메모리 사용을 개선하기 위해 단일 호출에서 대량의 메시지를 게시할 수 있습니다.
메시지 전달 옵션: 게시자는 메시지를 게시할 때 단일 구독자에게 전달할지 아니면 모든 구독자에게 브로드캐스트할지 결정할 수 있습니다. 메시지 전달 옵션.
메시지 만료: 게시자는 다음을 수행할 수 있습니다. 메시지 만료 설정 캐시에 있는 메시지의 수명을 제어합니다. 만료일에 대해 더 자세히 다루었습니다. 메시지 안내
메시지 배달 실패 알림: 게시자는 MessageDeliveryFailure 등록 특정 메시지를 전달하지 못한 경우 알림을 받습니다. 이러한 배달 실패 시나리오는 다음에서 자세히 설명합니다. 메시지 할당 및 구독에 전달 안내
중대한
메시지 전달 실패 알림은 만료된 메시지에만 해당됩니다.
- 주제 삭제 알림: 게시자는 다음을 위해 등록할 수 있습니다. 주제 삭제 알림 주제가 삭제된 후에 해당 메시지가 불필요하게 게시되는 것을 방지하기 위함입니다.
주제 구독
구독자 응용 프로그램은 다음을 수행할 수 있습니다. 주제 메시지 구독 구독을 통해 관심 있는 주제에 스스로를 등록함으로써 참여합니다. Pub/Sub에서 구독은 구독자가 특정 주제에 대해 갖는 관심을 나타냅니다.
주의 사항
캐시 클러스터에 새 노드가 추가되고 상태 전송이 트리거되는 경우 메시지 및 캐시 데이터와 함께 모든 구독이 새 노드에 복제됩니다.
NCache 주제 이름이나 패턴을 제공하여 주제를 구독할 수 있습니다. 자세한 내용은 다음을 참조하십시오. 구독 방법. 또한 다음을 설정할 수도 있습니다. 메시지 전달 모드 구독을 생성하는 동안 동기 또는 비동기로. NCache 다음과 같이 설명하는 여러 유형의 Pub/Sub 구독을 제공합니다.
구독 및 유형
구독 기간 NCache 다음 유형으로 분류될 수 있습니다.
튼튼한
주의 사항
지속형 구독은 지정된 구독입니다.
안에 영구 구독캐시는 애플리케이션/머신 종료, 애플리케이션 재시작 또는 네트워크 장애로 인해 연결이 끊어지더라도 구독자가 메시지를 놓치지 않도록 보장합니다. 따라서 지속형 구독은 구독자 연결 해제 및 재연결로 인해 영향을 받지 않습니다.
주의 사항
구독자가 구독을 적절하게 해지하지 않는 한, 영구 구독은 삭제되지 않습니다.
구독자 연결이 끊어지면 해당 구독자에게 전송된 메시지는 구독자가 다시 연결되거나 메시지가 만료될 때까지 서버에 저장됩니다. 구독자가 구독을 제대로 해지하지 않는 한, 구독자 연결이 끊어져도 지속형 구독은 자동으로 삭제되지 않습니다. 지속형 구독은 다음과 같이 분류됩니다.
공유 : 공유된 지속형 구독은 여러 구독자가 명명된 구독을 공유한다는 것을 의미합니다. 공유 구독에 할당된 메시지는 라운드 로빈 방식으로 구독자 간에 로드 밸런싱됩니다. 구독자가 네트워크를 떠나더라도 메시지는 활성 구독자에게 계속 전달됩니다. 따라서 할당 후 구독자가 우아하게 또는 갑자기 떠나면 할당된 메시지가 다른 활성 구독자에게 다시 할당됩니다.
중대한
공유 구독은 지속형 구독에서만 지원됩니다.
공유 구독에서 구독은 주제에 남아 있으며 모든 구독자가 구독을 취소할 때까지 구독을 취소할 수 없습니다. 즉, 활성 구독자가 한 명이라도 있는 한 구독은 활성 상태로 유지됩니다.
- 독특한: 독점적 지속형 구독은 한 번에 구독에 등록된 활성 구독자가 한 명뿐임을 의미합니다. 구독자가 우아하게 구독을 취소하면 독점적 구독을 새 구독자에게 할당할 수 있습니다. 구독자가 갑자기 탈퇴하면 유휴 시간을 기다린 후 새 구독 요청이 수락됩니다. 할당된 메시지는 구독자가 없더라도 항상 그대로 유지됩니다.
비내구재
안에 비영구 구독구독자는 연결 상태가 유지되는 동안만 자신에게 전송된 메시지를 수신합니다. 구독자가 네트워크를 떠나면 연결 해제 기간 동안 게시된 메시지는 수신되지 않습니다. 비영구 구독은 기본적으로 독점 구독입니다.
중대한
구독자 애플리케이션을 다시 시작하면 구독자의 메시지가 손실됩니다.
또한, 비영구 구독은 가입자가 네트워크를 떠나면 자동으로 삭제됩니다. 즉, 해당 가입자가 다시 가입하거나 연결을 다시 설정하면 새 구독으로 간주됩니다.
지속 구독 만료
여러분의 시간과 재능으로 지속형 구독에 대한 만료일 설정 일정 기간 동안 활동이 없는 경우(예: 장시간 활성 구독자가 없는 경우) 구독이 만료되면 해당 구독에 할당된 메시지는 다음 사항에 따라 재할당됩니다. DeliveryOption 이 메시지 중.
주의 사항
구독자가 다른 활동을 폴링하거나 수행할 때마다 구독 만료 시간이 재설정됩니다.
비활성 구독 처리
주의 사항
비영구 구독만 비활성으로 표시되며 이는 영구 구독에는 적용되지 않습니다.
일정 비활성 기간을 기다린 후 구독에 대해 활성 구독자가 없는 경우 구독이 만료된 것으로 간주됩니다. 가입자가 비활성화 기간 동안 연결이 끊긴 후 다시 가입하면 할당된 메시지를 받을 수 있습니다.
중대한
비활성 구독은 서버 측에서 메모리 과부하를 방지하기 위해 처리되어야 합니다.
비활성 기간 동안 기다린 후 구독이 만료되고 할당된 메시지가 다른 구독에 다시 할당됩니다. 메시지 재할당은 메시지 전달 옵션에 따라 다릅니다.
구독 A에 할당된 메시지의 배달 옵션이 ALL로 설정되어 있고 구독 A가 만료되기 전에 이미 다른 구독 B에 할당된 경우 재할당이 필요하지 않습니다.
구독에 할당된 메시지의 배달 옵션이 ANY로 설정되어 있고 구독이 만료된 경우 할당된 메시지는 항상 다른 구독에 다시 할당됩니다.
메시지
메시지는 게시자가 토픽을 통해 구독자에게 전송하는 실제 데이터 객체를 포함합니다. 게시자가 토픽에 메시지를 게시하면 등록된 구독자는 관심 있는 메시지가 게시되었음을 알립니다. 여러 개의 메시지가 있는 경우, 각 메시지는 특정 토픽의 큐에 순서대로 저장됩니다. 여기에서는 구독에 대한 메시지 할당, 메시지 전달 및 확인 응답 메커니즘에 대해 자세히 설명합니다.
주의 사항
동일한 메시지를 여러 주제에 할당할 수 있습니다. 이는 자동 생성된 ID를 통해 고유하게 식별됩니다.
메시지 할당 및 구독에 전달
처음에는 메시지가 서버 측에서 할당되지 않습니다. 모든 구독은 다음에 따라 메시지를 받습니다. DeliveryOption구독 할당이 발생하면 구독자는 알림을 받습니다. 그런 다음 구독자는 폴링 메커니즘을 구현하여 여러 메시지를 대량으로 가져오므로 서버 측 오버헤드가 줄어듭니다. 메시지를 수신한 후 구독자는 확인 응답을 보내면 메시지가 전달된 것으로 간주됩니다.
주의 사항
메시지를 수신할 구독자가 없는 경우 메시지는 Topic에 저장됩니다. 메시지는 Topic을 구독하자마자 첫 번째 구독자에게 할당되고 전달됩니다.
메시지 전달 옵션
게시자는 메시지를 게시할 때 단일 구독자에게 전달할지 또는 모든 구독자에게 동시에 전송할지 결정하기 위해 메시지 전달 옵션을 지정해야 합니다. 성공적인 전달의 정의는 지정된 전달 옵션에 따라 달라진다는 점에 유의해야 합니다. 두 가지 전달 옵션과 그에 따른 성공적인 전달 기준은 다음과 같습니다.
모든: 등록된 모든 구독자에게 메시지가 전송됩니다. 모든 구독자가 메시지 수신을 확인하면 해당 메시지는 삭제됩니다.
어느: 등록된 단일 구독자는 메시지를 받습니다. 할당된 구독자가 승인을 보내지 않으면 메시지가 다음 구독자에게 다시 할당됩니다. 승인을 보내면 메시지가 성공적으로 전달된 것으로 간주됩니다.
주의 사항
지정된 배달 옵션에 따라 메시지가 성공적으로 배달되면 캐시에서 제거됩니다.
메시지 저장 및 배포
다음은 캐시에 메시지를 저장하고 배포하는 데 있어 중요한 측면입니다.
메시지는 토폴로지를 기반으로 노드 간에 배포됩니다.
Partition-Replica 및 Partitioned 토폴로지의 경우 해시 기반 배포가 사용됩니다.
복제된 토폴로지의 경우 메시지는 클러스터된 캐시의 모든 노드에 복제됩니다. 그러나 코디네이터 노드는 메시지 조작을 담당합니다.
미러 토폴로지의 경우 메시지가 활성 노드에 게시된 다음 그에 따라 수동 노드에 복제됩니다.
메시지 저장소가 거의 제거되면 전체 메시지 저장소 및 제거 시작을 나타내는 이벤트가 기록됩니다.
메시지에는 캐시 메모리에 오버헤드가 있습니다. 따라서 캐시 크기를 계산하는 동안 메시지 크기를 고려해야 합니다.
메시지 동작
여기에서는 다음과 같은 경우에 예상되는 메시지 동작에 대해 설명합니다.
캐시 지우기: 캐시가 지워지면 메시지는 캐시 항목과 함께 제거됩니다.
캐시 재시작 시: 캐시 지우기와 마찬가지로, 캐시 내용은 캐시를 다시 시작하면 지워집니다. 여기에는 모든 주제와 그 안에 포함된 메시지도 포함됩니다.
축출: If 축출 Pub/Sub 캐시에서 이 기능을 활성화하면 데이터가 먼저 제거되고 그 다음에 메시지가 제거됩니다.
국가 이전: 상태 전송의 경우 메시지가 클러스터의 다른 노드로 이동하면 메시지가 최종적으로 저장된 노드가 전달을 담당합니다.
메시지 전달 실패 알림
중대한
메시지 전달 실패 알림을 등록한 게시자는 만료 기한이 있는 메시지가 구독자에게 전달되기 전에 만료될 경우 알림을 받습니다.
메시지가 구독자 중 누구에게도 할당되거나 전달되지 않는 경우 실패로 간주됩니다. 가입자가 존재하지 않거나 네트워크 결함으로 인해 비활성화된 경우 발생할 수 있습니다. 이러한 시나리오에서 게시자는 다음을 수행할 수 있습니다. 메시지 전달 실패 알림 등록. 배달 실패 알림은 만료된 메시지에만 적용된다는 점에 유의하는 것이 중요합니다. 메시지가 구독자에게 전달되기 전에 만료되면 메시지 배달이 실패한 것으로 간주됩니다.
주의 사항
주제에 대해 여러 게시자가 있는 경우, 실패 알림은 실패 알림에 등록한 활성 게시자 중 하나에 전달됩니다.
메시지 만료
캐시 항목과 유사하게 게시자는 메시지 만료 설정. 메시지는 만료 간격이 지나면 즉시 캐시에서 만료되며 동일한 정리 간격 메커니즘을 사용합니다.
메시지 만료는 캐시에서 지속되는 시간을 결정합니다. 전달 여부와 상관없이 메시지가 전달되지 않으면 만료 시간 이후 삭제됩니다. 메시지가 만료되기 전에 성공적으로 배달되면 만료 시간을 기다리지 않고 캐시에서 제거됩니다.
주문된 메시지
NCache 이제 클라이언트 측에서 메시지 순서가 유지되는 정렬된 메시지를 지원합니다. 게시자는 주문된 메시지 게시 메시지 덩어리에 대한 시퀀스 이름을 지정함으로써 순서가 지정된 메시지가 게시된 순서대로 구독자에게 전달됩니다. 순서가 지정된 메시지 체인의 경우 시퀀스 문자열은 동일해야 합니다. 시퀀스 문자열을 사용하면 위치 선호도 메커니즘을 통해 모든 메시지가 동일한 노드에 저장됩니다. 순서가 지정된 메시지의 주요 특징은 다음과 같습니다.
주의 사항
동기식 전달 모드는 정렬된 메시지에 사용될 수 있습니다.
동일한 시퀀스를 가진 게시자의 메시지는 단일 캐시 노드에 있습니다.
경우
DeliveryOptionAny로 설정하면 동일한 시퀀스의 모든 정렬된 메시지가 동일한 구독자에게 전달됩니다. 특정 가입자의 연결이 끊기거나 사용할 수 없게 되는 경우 이를 위해 새 가입자가 재할당됩니다. 그러나 만약DeliveryOption가 모두로 설정되면 동일한 순서의 모든 정렬된 메시지가 모든 구독자에게 전달됩니다.상태 전송의 경우 순서가 지정된 메시지는 순서를 잃고 순서를 유지하지 않고 게시될 수 있습니다.
정렬된 메시지는 Publish API의 동기화 모드를 통해서만 게시할 수 있습니다. 대량 및 비동기 API 호출은 지원되지 않습니다.
모니터링
NCache Pub/Sub 주제 통계를 모니터링하고 다양한 관찰 기능을 제공합니다. 성능 카운터 이와 관련하여 Pub/Sub 주제 활동 및 상태는 다음을 통해 모니터링할 수 있습니다. Windows PerfMon 카운터 명령줄 도구.
안정성 및 고가용성
NCache 메시지 전달을 위한 확인 메커니즘을 구현합니다. 메시지는 성공적으로 전달될 때까지 메모리에 보관됩니다. 적어도 한 번 배달 기준. 따라서, NCache 분산 아키텍처에서 Pub/Sub 메시징에 대한 메시지 전달 안정성을 보장합니다.
또한, 최대 XNUMX개 노드의 내결함성 파티션-복제본 토폴로지 Pub/Sub 메시징 저장소를 고가용성으로 만듭니다. 어떤 이유로든 노드가 클러스터를 떠나면 복제본에는 메시지 백업이 있습니다.
이 섹션의
게시/구독 주제
Pub/Sub 모델에 대한 주제를 생성, 가져오기 및 삭제하는 방법을 설명합니다. NCache.
주제에 메시지 게시
토픽을 생성하고 해당 토픽에 메시지를 게시하는 방법을 설명합니다.
주제 구독
주제에 대해 구독하고 관심 있는 메시지를 받는 방법을 설명합니다.
게시/구독 이벤트
게시자와 구독자에게 캐시와 애플리케이션에서 발생하는 다양한 이벤트에 대해 알리는 Pub/Sub 이벤트를 설명합니다.