트랜잭션이 많은 여러 서버 애플리케이션이 서로 통신해야 하는 환경에서는 애플리케이션에 가장 적합한 통신 채널을 찾는 것이 중요합니다. 게시자/구독(PubSub) 모델은 애플리케이션에 대한 통신 플랫폼을 제공할 때 가장 널리 사용되는 방법 중 하나입니다. 우리 모두는 이러한 매체의 공통점이 무엇인지 알고 있습니다. 여러 클라이언트가 메시지를 게시하고 여러 클라이언트가 메시지를 구독할 수 있습니다. 이 모든 작업은 극도로 분리된 방식으로 발생합니다. 즉, 게시자는 메시지를 구독 클라이언트에 직접 배포하지 않습니다. 대신 메시지 버스는 모든 클라이언트가 통신하는 중간 채널로 사용됩니다.
간단히 말해서, PubSub 메시징은 게시자나 구독자 모두 서로의 신원을 알지 못하는 방식입니다.
여기서 발행인과 구독자의 수가 증가하면 어떤 일이 일어나는지 잠시 생각해 보겠습니다. 이 숫자가 클수록 메시징 부하가 커집니다. 이러한 상황은 확장성 병목 현상을 유발하는 PubSub 플랫폼으로 이어지며, 이는 분리된 메시징 인터페이스를 도입하려는 주요 목적을 무산시킵니다.
pub/sub의 일반적인 작업을 상속할 뿐만 아니라 편의를 위해 다른 많은 기능을 추가하는 솔루션을 살펴보겠습니다. 빠르고 확장성이 뛰어난 방법입니다.
NCache 세부 정보 NCache 게시/하위 문서 Pub/Sub 메시징 확장-웨비나
사용 NCache 인메모리 PubSub
NCache .NET 애플리케이션을 위한 빠르고 유연하며 가장 선형적으로 확장 가능한 분산 캐시를 제공합니다.
사용 NCache 이동 중에 애플리케이션을 확장하려는 경우 이벤트 기반 PubSub 플랫폼이 매우 유용할 수 있기 때문입니다. 시스템에서 병목 현상이 발생하는 것을 방지합니다.
방법은 다음과 같습니다. NCache 애플리케이션의 메시징 버스 역할을 합니다.
NCache Pub/Sub 구현을 위한 중개 인터페이스 역할을 합니다. 이 그림은 하나가 아닌 여러 클라이언트가 한 번에 하나 이상의 주제를 구독할 수 있음을 보여줍니다.
많은 응용 프로그램이 캐시에 연결하고 캐시에 메시지 게시를 시작할 수 있습니다. NCache 서버. 이러한 메시지는 요구 사항에 따라 다양한 클라이언트에서 구독합니다. 을 통해 NCache, 모든 구독자 또는 한 명의 구독자가 게시된 메시지를 받을지 여부를 결정하게 됩니다. 그렇게 함으로써, NCache .NET 서버 애플리케이션의 메시징 버스 역할을 합니다.
NCache 세부 정보 Pub / Sub NCache 게시/구독 이벤트
다음을 사용한 빠른 PubSub 예 NCache
전 세계의 플레이어가 사용하는 온라인 게임 응용 프로그램이 있다고 가정해 보겠습니다. 내 응용 프로그램에는 오디오 통신뿐만 아니라 런타임 메시지도 통합하는 기능이 있습니다. 여러 플레이어가 채널과 자신의 팀 플레이어에게 동시에 메시지를 보냅니다.
게임을 플레이하는 플레이어 수를 고려할 때 메시지 로드가 엄청날 것입니다. 여기에 필요한 것은 게임 성능을 향상시키는 통신 인터페이스입니다. 그리고 이것을 위해 나는 선호합니다 NCache 내 게임의 메시지 버스로.
다음은 서버 애플리케이션이 메시지를 게시하고 수신할 수 있는 시나리오를 구현하는 데 사용하는 스니펫입니다. 이 코드는 주제를 가져오고 이에 대한 메시지를 게시하는 방법을 보여줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Precondition: Cache is already connected // Get the topic ITopic teamChat = cache.MessagingService.GetTopic("RuntimePlayerComms"); // Create the object to be sent in message // Get information of the player through player ID Player teamLeader = FetchInfo(1); // Create the message var newChatMessage = new Message(teamLeader); // Set the expiration time of the message newChatMessage.ExpirationTime = TimeSpan.FromSeconds(60); // Publish the message with delivery option set to All subscribers teamChat.Publish(newChatMessage, DeliveryOption.All, true); |
주제에 대해 메시지가 게시되면 구독자는 메시지를 수신하기 위해 해당 주제에 대한 구독을 생성합니다. 다음 코드는 구독 애플리케이션이 원하는 메시지를 수신하기 위해 특정 주제를 구독하는 방법을 보여줍니다.
1 2 3 4 5 6 7 8 9 |
// Precondition: Cache is already connected // Get the topic ITopic teamChat = cache.MessagingService.GetTopic("RuntimePlayerComms"); // Create and register subscribers for the topic // MessageReceived is the callback through which the message is delivered ITopicSubscription subscriber = teamChat.CreateSubscription(MessageReceived); |
지금까지 내가 이야기한 것은 pub/sub의 일반적인 작동에 관한 것이었지만 정말로 알아야 할 것은 추가 길이입니다. NCache 당신의 필요를 충족시키기 위해 간다.
내가 이전에 외쳤던 "다른 기능"이 무엇인지 궁금하십니까? 에서 독점적으로 제공하는 기능에 대해 알아보겠습니다. NCache.
독점 지속 구독
일반적으로 클라이언트가 주제를 구독할 때 해당 구독을 지속 불가능한 구독이라고 합니다. 즉, 클라이언트가 서버에서 연결을 끊으면 모든 구독이 손실됩니다.
NCache 지속 가능한 구독을 제공합니다. 이 경우 서버와 클라이언트 간의 연결이 끊어지더라도 해당 클라이언트의 모든 구독은 그대로 유지됩니다. 따라서 클라이언트가 다시 연결되면 구독자가 연결 해제된 동안 게시된 모든 메시지를 수신합니다.
애플리케이션에서 이 시나리오를 실행하는 방법은 간단합니다. 배타적 지속 구독을 구현하려면 애플리케이션에 다음 코드 줄을 추가합니다.
1 2 3 4 5 6 7 8 |
// Create and register subscribers for the topic // MessageReceived callback is specified // The subscription policy is Exclusive IDurableTopicSubscription subscriber = teamChat.CreateDurableSubscription("RuntimePlayerComms", SubscriptionPolicy.Exclusive, MessageReceived, TimeSpan.FromMinutes(20)); |
연결이 유지되는 한 새 클라이언트는 해당 구독을 구독할 수 없습니다. 이 연결이 끊어지면 메시지가 유지되고 연결이 다시 설정되면 클라이언트로 전송됩니다. 이것은 메시지가 손실되지 않도록 수행됩니다.
NCache 세부 정보 Pub / Sub NCache 영구 구독
지속 가능한 공유 구독
독점 구독 외에도 공유 구독을 통해 내구성을 달성할 수도 있습니다. 이 유형의 구독에서는 둘 이상의 클라이언트가 단일 구독을 구독할 수 있습니다. 이것은 로드 공유의 목적을 제공합니다.
공유 구독은 라운드 로빈 방법을 사용하여 연결된 모든 클라이언트에 메시지를 보냅니다. 따라서 클라이언트 연결이 끊어지더라도 메시지는 나머지 구독자에게 계속 배포됩니다.
단일 클라이언트가 연결되어 있는 한 구독은 활성 상태를 유지합니다. 다음 코드는 내 온라인 게임 응용 프로그램이 지속 가능한 공유 구독을 구현하는 방법입니다.
1 2 3 4 5 6 7 8 9 |
// Create and register subscribers for the topic // MessageReceived callback is specified // The subscription policy is Shared IDurableTopicSubscription subscriber = teamChat.CreateDurableSubscription("RuntimePlayerComms", SubscriptionPolicy.Shared, MessageReceived, TimeSpan.FromMinutes(20)); |
기본적으로 이러한 구독은 구독당 정확히 한 명의 구독자를 허용하는 배타적입니다.
패턴 기반 구독
때때로 명명된 구독을 하나씩 구독하는 대신 현재 및 향후 모든 주제를 한 번에 구독하는 패턴이 제공됩니다. 이를 수용하기 위해, NCache 패턴 기반 구독을 제공하여 클라이언트를 용이하게 합니다. 이 방법을 통해 제공된 패턴에 해당하는 토픽 또는 여러 토픽을 쉽게 구독할 수 있습니다.
에서 지원하는 와일드카드의 종류를 알기 위해 NCache님의 PubSub 구독에 대해서는 다음을 참조하세요. NCache 에 대한 문서 패턴 기반 구독.
다음은 게임 애플리케이션에서 패턴 기반 와일드카드를 사용하는 방법에 대한 예제 스니펫입니다.
1 2 3 4 5 6 |
// Only ? * [] wildcards supported string topicName = "team*"; string subscriptionName = "TeamPlayersComms"; // Get the topic ITopic teamChat = cache.MessagingService.GetTopic(topicName, TopicSearchOptions.ByPattern); |
NCache PubSub용?
왜 호의 NCache, 당신은 물어볼 수 있습니까? 잘… NCache is
- 메모리 내 솔루션이기 때문에 빠릅니다.
- 런타임 시 추가 서버를 추가할 수 있으므로 선형적으로 확장 가능합니다. 언제든지.
- 클라이언트 개입 없이 데이터를 동적으로 자동 재조정하므로 유연합니다.
내가보기 엔, NCache 애플리케이션 내에서 메시지 통신을 수용할 수 있는 최상의 확장 가능하고 가장 빠른 방법을 제공합니다. 사실 그 NCache 메모리 내 분산 캐싱 솔루션으로 메시지 로드로 인해 발생할 수 있는 병목 현상을 충분히 해결할 수 있습니다. 이제 이것이 .NET 애플리케이션에 필요한 윈-윈 상황입니다.