누가 스포츠를 좋아하지 않습니까? 매년 스포츠 시즌이 시작되면 우리 모두는 좋아하는 팀을 응원하기 시작합니다. 이제 바쁜 일정이나 직장에서의 긴급 상황으로 인해 좋아하는 팀이 경기를 치르는 동안에도 몇 번이나 경기를 놓쳤습니까? 우리 모두 거기에 가본 적이 있다고 확신합니다. 이것은 순위표의 개념으로 이어집니다. 즉, 놓친 항목에 대처하기 위해 잘 계산된 방식으로 순위 또는 데이터 포인트를 표시하는 점수판입니다. 무엇 NCache 즉, 분산 캐싱 솔루션을 사용하여 순위표 애플리케이션을 훨씬 더 효율적으로 만들어 놀라운 성능을 달성할 수 있습니다. 방법에 대해 논의해 봅시다.
여기서 우리는 무엇을 달성하려고 합니까?
따라서 경기 장소에서 업데이트를 실시간으로 가져와서 업데이트를 구독한 모든 사용자에게 표시하는 애플리케이션을 만들고 싶다고 가정해 보겠습니다. 이미 종료된 경기의 경우 사용자는 경기의 자세한 점수와 결과를 얻습니다. 마찬가지로 구독한 사용자도 새 경기가 시작되면 알림을 받습니다.
이 기능을 제공하는 수많은 시스템이 있지만 라이브 채점 응용 프로그램의 경우 네트워크 결함과 지연이 큰 걸림돌이 됩니다. 좋은 소식은 NCache 가져 오는 것은 당신이 모든 것에 대해 걱정할 필요가 없다는 것입니다 NCache.
NCache 분산 인메모리 컴퓨팅을 사용하여 나이가 많든 적든 관계없이 수백, 수천 명의 사용자에게 가장 빠르고 최적의 출력을 제공합니다. 속도를 저하시키거나 충돌을 일으키는 성능 병목 현상 없이 대량 트래픽을 관리합니다. 또한 분산되고 선형적으로 확장 가능한 메모리 내 데이터 저장소이므로 많은 클라이언트 요청을 처리하고 캐시 클라이언트와의 안정적인 연결을 보장합니다. 샘플 애플리케이션을 실행할 준비가 되어 있으며 다음에서 사용할 수 있습니다. 깃허브 데모로.
NCache 리더보드 애플리케이션: 개요
애플리케이션이 수행하는 작업에 대한 개요부터 시작하겠습니다. 기본 기능은 두 부분으로 나뉩니다.
- 가입한 사용자: 라이브 스코어를 보기 위해 구독한 사용자입니다.
- 점수 업데이트 팀: 구독한 사용자의 라이브 스코어를 업데이트하는 사용자.
경기가 시작되면 점수 업데이트 팀은 해당 업데이트를 받을 수 있는 라이선스가 있는 모든 사람에게 업데이트를 제공하는 API에서 경기에 대한 업데이트를 시작합니다. 애플리케이션 아키텍처의 전체 보기는 다음과 같습니다.
우리 시스템에서 NCache, 실시간 알림이 다음에 게시됩니다. NCache 사용하는 클러스터 서버 캐시 게시 구독 모델 게시자는 특정 주제에 링크된 메시지를 게시하고 주제를 구독한 구독자는 해당 주제가 변경될 때마다 업데이트를 받습니다. 우리의 경우 경기 업데이트가 발생할 때마다 게시되고 경기를 구독하는 모든 사용자는 경기 점수에 대한 업데이트로 이를 받습니다.
경기의 모든 구독자는 다음을 사용하여 즉시 업데이트를 받습니다. NCache SignalR Backplane. SignalR Backplane 는 Teledyne LeCroy 오실로스코프 및 LSA-XNUMX 시리즈 임베디드 신호 분석기가 NCache 의 확장 ASP.NET SignalR 의 효율적인 사용을 가능하게 하는 ASP.NET SignalR 여러 서버에서 각 사용자에게 관련 데이터의 원활한 흐름을 보장하면서 웹 팜에서. 매치 핸들러는 다음을 사용합니다. NCache 백업 소스 데이터베이스에서 캐시 데이터를 읽고 씁니다. 응용 프로그램의 작동을 이해하려면 아래 그림을 보십시오.
Pub/Sub를 사용하여 일치 업데이트로 게시 및 구독
사용 NCache 게시/구독 모델, 사용자는 경기 업데이트를 위해 주제를 구독합니다. 악보 업데이트 팀이 악보를 업데이트할 때마다 메시지가 게시되고 구독한 사용자에게 업데이트에 대한 알림이 전송됩니다. 따라서 구독한 사용자는 새로 업데이트된 데이터를 매번 다시 학습하므로 업데이트된 점수입니다.
아래 제공된 코드는 특정 주제에 대한 메시지를 게시하는 방법을 설명합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
ICache cache = CacheManager.GetCache("myPartitionedCache"); // create pub/sub topic on match start cache.MessagingService.CreateTopic(matchName); // create start update MatchUpdate start = new MatchUpdate(datetime, "match_start", "stadium", "Match has Started"); // create new Message packet with the match update Message message = new Message(start); // fetch topic handler from cache ITopic topic = _cache.MessagingService.GetTopic(matchName); // publish Message on topic topic.Publish(message, DeliveryOption.All); |
아래 코드는 사용자가 특정 주제를 구독하는 방법을 보여줍니다.
1 2 3 4 5 6 7 8 |
ITopicSubscription matchSubscription = cache.MessagingService.GetTopic(matchName).CreateSubscription(MatchUpdates); ... // Creating Callback public void MatchUpdates(object sender, MessageEventArgs args) { hub.Clients.All.SendAsync("MatchUpdate", new JsonResult((MatchUpdate)args.Message.Payload)); } |
사용 SignalR Backplane 경기에 대한 업데이트를 받기 위해
NCache SignalR Backplane 에서 제공하는 확장 프로그램입니다. NCache 지속적인 업데이트를 신청한 모든 사용자와 지속적인 연결을 유지합니다. 이 기능을 제공하는 가장 좋은 점은 지속적인 지연을 최소화하고 애플리케이션에 실시간 기능을 추가하여 실망스러운 지연이 없다는 것입니다.
아래 코드를 보시면 NCache SignalR Backplane 애플리케이션에 등록할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Get cache name and event key from appsettings.json string cacheName = Configuration.GetValue("CacheName"); string eventKey = Configuration.GetValue("EventKey"); GlobalHost.DependencyResolver.UseNCache(cacheName, eventKey); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseSignalR(routes => { routes.MapHub("/signalr"); }); app.UseMvc(); |
데이터 소스에서 데이터 읽기/쓰기를 위한 백업 소스
경기 점수가 데이터 소스에서도 업데이트되도록 애플리케이션은 데이터베이스와 동기화된 상태를 유지해야 합니다. NCache 제공 Data 다음을 포함하는 소스 공급자:
- 읽기 제공자: 캐시되지 않은 업데이트의 경우 업데이트된 데이터를 가져오기 위해 데이터베이스를 직접 확인합니다.
- 공급자를 통해 쓰기: 데이터 소스와 데이터 소스의 동기화를 유지하기 위해 데이터는 데이터 소스뿐만 아니라 캐시에도 기록되므로 불일치가 없습니다.
위의 두 가지 요소를 염두에 두고 데이터 소스를 캐시와 동기화된 상태로 유지하기 위한 아래 코드를 살펴보십시오.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public ScoreUpdateController(IConfiguration configuration) { // get cache name from appsettings.json string cacheName = configuration.GetValue("CacheName"); // get read/write thru provider name from appsettings.json string readThruProviderName = configuration.GetValue("ReadThruProviderName"); string writeThruProviderName = configuration.GetValue("WriteThruProviderName"); // initialize store match handler if not initialized before if (storeHandler == null) storeHandler = new StoreHandler(cacheName, readThruProviderName, writeThruProviderName); // acquire cache handler cache = CacheManager.GetCache(configuration.GetValue("CacheName")); } |
아래 코드는 read-through가 활성화된 상태에서 업데이트를 가져오고 업데이트된 데이터를 캐시와 데이터 저장소에 쓰는 것을 보여줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public void SaveUpdates(string matchName, MatchUpdate matchUpdate) { // fetch list handler from cache IDistributedList distributedList = cache.DataTypeManager.GetList(matchName, readThruOptions); // if there is no list initialized, create new list with writethru enabled if (distributedList == null) { distributedList = cache.DataTypeManager.CreateList(matchName, null, writeThruOptions); } // add new update to list distributedList.Add(matchUpdate); |
요약하자면…
우리는 방금 다음을 사용하여 라이브 스코어보드 애플리케이션을 만드는 방법을 배웠습니다. NCache 결함이나 불일치 없이 실시간으로 경기를 스트리밍하는 수많은 사용자를 수용할 수 있습니다. 얼마나 멋진가요? 골이 실제로 발생한 지 몇 분 후에 표시되는 시대는 지났습니다. 이제 이동 중에도 좋아하는 게임을 즐길 수 있습니다!
그래서 어느 팀을 응원하고 있습니까? 또한! 다른 매우 흥미로운 기능과 사용 사례를 확인하는 것을 잊지 마세요. NCache 결코 실망하지 않습니다.
디지털 스코어보드는 스포츠 팬에게 실시간 업데이트 및 정보를 제공하는 데 중요한 역할을 합니다. 라이브 채점 응용 프로그램의 맥락에서 효율적이고 신뢰할 수 있는 시스템을 갖추는 것이 가장 중요합니다. NCache 다수의 사용자와 그들의 요청을 처리하기 위한 최적의 성능과 확장성을 보장하는 분산 캐싱 솔루션을 제공합니다. 분산 인메모리 컴퓨팅을 활용하여 NCache 네트워크 결함 및 지연을 최소화하여 사용자에게 원활한 경험을 제공합니다. 잘 작동하는 디지털 스코어보드의 중요성은 아무리 강조해도 지나치지 않으며 다음과 같은 솔루션이 있습니다. NCache 스포츠 애호가의 전반적인 경험을 향상시키는 데 기여합니다.