캐시의 Pub/Sub 메시징: 개요
이 게시/구독(Pub/Sub) 메시징 패러다임은 발신자(게시자)와 수신자(구독자)에 대한 지식 없이 여러 애플리케이션 간에 메시지를 교환할 수 있는 중간 채널(주제라고 함)을 제공합니다. 게시자 애플리케이션은 주제를 통해 구독자 애플리케이션에 메시지를 보냅니다.
모든 Pub/Sub 모델에는 통신 채널이 필요하므로 NCache 게시자가 주제에 메시지를 게시할 수 있도록 주제의 매체 역할을 합니다. 구독자는 주제를 통해 알림으로 메시지를 받습니다. 사용 NCache 토픽의 매체로서 모델 내에서 느슨한 결합을 보장하고 추상화를 증가시켜 분산된 토픽에 추가적인 이점을 제공합니다.
분산 캐시 외에도 NCache 또한 전용 제공 Pub/Sub 메시징 캐시.
중대한
다음과 같은 이유로 전용 Pub/Sub 캐시를 권장합니다.
축출: 캐시에 메시지와 캐시 항목이 포함되어 있는 경우 캐시 항목을 자주 제거하면 메시지를 구독자에게 전달하기 전에 제거할 수도 있습니다.
국가 이전: 상태 이전은 각 캐시 항목 작업에 비용을 추가합니다. 메시지는 자주 게시, 릴레이 및 만료되기 때문에 이 반복적인 활동은 상태 전송을 트리거하기 때문에 비용이 많이 들 수 있습니다.
Pub/Sub 메시징이 중요한 이유
실시간 이벤트는 이벤트 기반 분산 아키텍처의 다양한 애플리케이션 간에 알림 공유가 필요합니다. Pub/Sub 패턴을 사용하면 게시자가 구독자와 이벤트를 공유할 수 있으므로 관심 있는 이벤트 발생 시 원하는 처리가 수행됩니다.
예를 들어, 가입자 그룹은 주문 배송 세부 정보를 처리하여 주문 배송을 추적할 수 있도록 해당 정보에 관심을 가질 수 있습니다. 따라서 그들은 주문 세부 사항에 대한 메시지를 전달하는 주제를 구독하게 됩니다. 게시자가 해당 주제에 대한 메시지를 게시하면 구독자에게 알림이 전달되고 추가 처리를 위한 주문 세부정보가 포함된 메시지가 수신됩니다.
게시/구독 구성요소
의 기본 구성 요소 NCache 게시자 구독자 모델은 아래에 나열되어 있으며 나중에 자세히 설명합니다.
주제 : 메시지가 게시되는 장소입니다.
제작사 : 주제/주제에 메시지를 게시하는 애플리케이션(웹 애플리케이션, 데스크톱 애플리케이션, 마이크로서비스)
구독자: 주제/주제로부터 메시지 수신에 관심이 있는 애플리케이션입니다.
구독 : 구독자가 의도한 메시지를 수신하기 위해 생성된 관심 엔터티입니다.
요청사항: 게시자가 보내고 구독자가 주제를 통해 받는 실제 데이터 개체입니다.
주제
게시자는 주제에 대한 메시지를 게시합니다. 구독자는 주제를 구독하여 메시지를 받습니다. 이 주제는 다음 위치에 배포된 형식으로 존재합니다. NCache. 따라서 모든 클러스터 노드에서 생성됩니다. 여기에는 게시자가 대기열에 게시하는 실제 데이터 개체를 저장하는 메시지 저장소가 포함됩니다. 또한 구독하는 모든 구독자 목록과 게시자 목록을 내부적으로 유지 관리합니다.
XNUMXD덴탈의 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
. 구독 할당이 발생하면 구독자는 알림을 받습니다. 그런 다음 구독자는 여러 메시지를 대량으로 가져오는 폴링 메커니즘을 구현하여 서버 측 오버헤드를 줄입니다. 메시지를 받은 후 가입자는 승인을 보내고 메시지는 배달된 것으로 간주됩니다.
주의 사항
메시지를 받을 구독자가 없으면 메시지가 주제에 저장됩니다. 첫 번째 구독자가 주제를 구독하는 즉시 메시지가 할당되어 전달됩니다.
메시지 전달 옵션
게시자는 다음을 수행해야 합니다. 메시지 배달 옵션 지정 게시 시 메시지가 단일 구독자에게 전달될지 아니면 모든 구독자에게 브로드캐스트될지 결정합니다. 성공적인 전달의 정의는 지정된 전달 옵션에 따라 달라집니다.
두 가지 전달 옵션과 해당하는 성공적인 전달 기준은 다음과 같습니다.
모든: 등록된 모든 구독자는 메시지를 받습니다. 모든 구독자가 확인하면 메시지가 삭제됩니다.
어느: 등록된 단일 구독자는 메시지를 받습니다. 할당된 구독자가 승인을 보내지 않으면 메시지가 다음 구독자에게 다시 할당됩니다. 승인을 보내면 메시지가 성공적으로 전달된 것으로 간주됩니다.
주의 사항
지정된 배달 옵션에 따라 메시지가 성공적으로 배달되면 캐시에서 제거됩니다.
메시지 저장 및 배포
다음은 캐시에 메시지를 저장하고 배포하는 데 있어 중요한 측면입니다.
메시지는 토폴로지를 기반으로 노드 간에 배포됩니다.
Partition-Replica 및 Partitioned 토폴로지의 경우 해시 기반 배포가 사용됩니다.
복제된 토폴로지의 경우 메시지는 클러스터된 캐시의 모든 노드에 복제됩니다. 그러나 코디네이터 노드는 메시지 조작을 담당합니다.
미러 토폴로지의 경우 메시지가 활성 노드에 게시된 다음 그에 따라 수동 노드에 복제됩니다.
메시지 저장소가 거의 제거되면 전체 메시지 저장소 및 제거 시작을 나타내는 이벤트가 기록됩니다.
메시지에는 캐시 메모리에 오버헤드가 있습니다. 따라서 캐시 크기를 계산하는 동안 메시지 크기를 고려해야 합니다.
메시지 동작
여기에서는 다음과 같은 경우에 예상되는 메시지 동작에 대해 설명합니다.
캐시 지우기: 캐시가 지워지면 메시지는 캐시 항목과 함께 제거됩니다.
캐시 재시작 시: 캐시 지우기와 유사하게 캐시 내용은 캐시가 다시 시작될 때 지워집니다. 여기에는 모든 주제와 그 안에 포함된 메시지도 포함됩니다.
축출: If 퇴거가 활성화됨 Pub/Sub 캐시에서 데이터가 먼저 제거된 다음 메시지가 제거됩니다.
국가 이전: 상태 전송의 경우 메시지가 클러스터의 다른 노드로 이동하면 메시지가 최종적으로 저장된 노드가 전달을 담당합니다.
메시지 전달 실패 알림
중대한
만료된 메시지가 전달되기 전에 만료되면 구독자는 전달 실패 알림을 받습니다.
메시지가 구독자 중 누구에게도 할당되거나 전달되지 않는 경우 실패로 간주됩니다. 가입자가 존재하지 않거나 네트워크 결함으로 인해 비활성화된 경우 발생할 수 있습니다. 이러한 시나리오에서 게시자는 다음을 수행할 수 있습니다. 메시지 전달 실패 알림 등록. 배달 실패 알림은 만료된 메시지에만 해당됩니다. 메시지 전달은 구독자에게 전달되기 전에 메시지가 만료되면 실패한 것으로 간주됩니다.
주의 사항
주제에 대해 여러 게시자가 있는 경우 실패 알림은 실패 알림에 등록한 활성 게시자에게 전달됩니다.
메시지 만료
캐시 항목과 유사하게 게시자는 메시지 만료 설정. 메시지는 만료 간격이 지나면 즉시 캐시에서 만료되며 동일한 정리 간격 메커니즘을 사용합니다.
메시지 만료는 캐시에서 지속되는 시간을 결정합니다. 전달 여부와 상관없이 메시지가 전달되지 않으면 만료 시간 이후 삭제됩니다. 메시지가 만료되기 전에 성공적으로 배달되면 만료 시간을 기다리지 않고 캐시에서 제거됩니다.
주문된 메시지
NCache 이제 클라이언트 측에서 메시지 순서가 유지되는 순서가 지정된 메시지를 지원합니다. 출판사는 다음을 수행할 수 있습니다. 주문된 메시지 게시 메시지 청크에 대한 시퀀스 이름을 지정합니다. 그런 다음 순서가 지정된 메시지는 게시된 순서와 동일한 순서로 구독자에게 전달됩니다. 순서 문자열은 순서가 지정된 메시지 체인에 대해 동일해야 합니다. 시퀀스 문자열을 사용하면 모든 메시지가 동일한 노드에 상주합니다. 위치 선호도 기구.
주의 사항
동기 전달 모드 주문된 메시지에 사용할 수 있습니다.
다음은 순서가 지정된 메시지의 중요한 특징입니다.
동일한 시퀀스를 가진 게시자의 메시지는 단일 캐시 노드에 있습니다.
경우
DeliveryOption
Any로 설정하면 동일한 시퀀스의 모든 정렬된 메시지가 동일한 구독자에게 전달됩니다. 특정 가입자의 연결이 끊기거나 사용할 수 없게 되는 경우 이를 위해 새 가입자가 재할당됩니다. 그러나 만약DeliveryOption
가 모두로 설정되면 동일한 순서의 모든 정렬된 메시지가 모든 구독자에게 전달됩니다.상태 전송의 경우 순서가 지정된 메시지는 순서를 잃고 순서를 유지하지 않고 게시될 수 있습니다.
정렬된 메시지는 Publish API의 동기화 모드를 통해서만 게시할 수 있습니다. 대량 및 비동기 API 호출은 지원되지 않습니다.
모니터링
NCache Pub/Sub 주제 통계를 모니터링하고 다양한 관찰 기능을 제공합니다. 성능 카운터 이와 관련하여. Pub/Sub 주제 활동 및 상태는 Windows PerfMon 카운터 과 명령줄 도구.
안정성 및 고가용성
NCache 메시지 전달을 위한 확인 메커니즘을 구현합니다. 메시지는 다음을 기반으로 성공적으로 전달될 때까지 메모리에 보관됩니다. 적어도 한 번 배달 기준. 따라서, NCache 분산 아키텍처에서 Pub/Sub 메시징에 대한 메시지 전달 안정성을 보장합니다.
또한, 최대 XNUMX개 노드의 내결함성 파티션-복제본 토폴로지 Pub/Sub 메시징 저장소를 고가용성으로 만듭니다. 어떤 이유로든 노드가 클러스터를 떠나면 복제본에는 메시지 백업이 있습니다.
이 섹션의
게시/구독 주제
Pub/Sub 모델에 대한 주제를 생성, 가져오기, 삭제하는 방법을 설명합니다. NCache.
주제에 메시지 게시
주제를 만들고 주제에 메시지를 게시하는 샘플 코드를 제공합니다.
주제 구독
주제를 구독하고 관심 메시지를 수신하는 샘플 코드를 제공합니다.
게시/구독 이벤트
게시자와 구독자에게 캐시와 애플리케이션에서 발생하는 다양한 이벤트에 대해 알리는 Pub/Sub 이벤트를 설명합니다.
Pub/Sub 주제 모니터링
다음을 통해 Pub/Sub 통계를 모니터링할 수 있는 방법을 설명합니다. NCache 모니터, PerfMon 및 명령줄 도구.