SignalR uygulamaları birden fazla sunucuya nasıl ölçeklenir
ASP.NET Core SignalR uygulamasını birden fazla sunucuya yaymak için Redis backplane ve Azure SignalR Service seçenekleri ele alınıyor. Mesajların sunucular arasında nasıl dağıtıldığı, yapılandırma adımları ve sticky session konusundaki önemli noktalar anlatılıyor. Gerçek zamanlı bir uygulamayı production'a taşıyan geliştiriciler için pratik bir rehber.
Kilit noktalar
- Redis backplane için Microsoft.AspNetCore.SignalR.StackExchangeRedis paketini kurup AddSignalR().AddStackExchangeRedis(...) ile bağlantı dizesini kaydedin.
- Azure SignalR Service için Microsoft.Azure.SignalR paketi ve AddAzureSignalR() çağrısı kullanılır; bağlantı dizesi Azure:SignalR:ConnectionString anahtarında tutulur.
- Redis backplane kullanırken sticky session genellikle yine gereklidir; yalnızca belgelenmiş istisnalar geçerlidir.
- Tüm sunucular aynı backplane veya Azure SignalR yapılandırmasını paylaşmalıdır.
- Mesajlar kalıcı değildir; geçmiş gerekiyorsa ayrı bir depolama katmanı kurun.
- Hub'larda kimlik doğrulama ve yetkilendirme uygulayın; istemci tarafından gelen kullanıcı adına güvenmeyin.
Birden fazla sunucu arkasında çalışan bir SignalR uygulamasında her sunucu yalnızca kendi bağlantılarını yönettiği için bir sunucudaki kullanıcının gönderdiği mesaj diğer sunucudaki istemcilere ulaşmayabilir. Bu sorunu çözmek için iki ana yol var: sunucular arasında mesaj dağıtan bir Redis backplane ya da bağlantıları yöneten yönetilen bir hizmet olan Azure SignalR Service. Yazıda her iki seçeneğin kurulumu, AddStackExchangeRedis() ve AddAzureSignalR() çağrılarıyla Program.cs yapılandırması anlatılıyor.
Redis kullanıldığında sticky session hâlâ gerekebilir; Azure SignalR Service ise bu gereksinimi ortadan kaldırır. Yazar ayrıca üretim ortamı için yetkilendirme, yeniden bağlanma davranışı, yük testi ve Redis'in kalıcı mesaj deposu olarak kullanılmaması gibi noktalara dikkat çekiyor. Ayrıntılı kod ve tablolar için orijinal makaleye göz atmak faydalı olacaktır.
Gerçek dünyada kullanımı
- Birden fazla uygulama sunucusu arkasında çalışan bir canlı sohbet uygulaması.
- Azure üzerinde barındırılan ve bağlantı yönetimini yönetilen bir servise devretmek isteyen bildirim sistemi.
- Kendi altyapısında çalışan ve Redis'i zaten işletilen bir ekibin gerçek zamanlı panosu.
Neden önemli
Çoklu sunucu dağıtımında mesajların tüm istemcilere ulaşması için bir scale-out çözümü şarttır. Hangi yolu seçtiğiniz, sticky session ihtiyacınızı ve işletme yükünüzü doğrudan etkiler.
Benzer haberler
- ASP.NET Core arka plan servislerinde graceful shutdown nasıl yönetilirC# Corner23 Eki
- MCP Sunucularında Ölçekte Rate Limiting ve Kaynak YönetişimiDEV Community: #aspnetcore1 gün önce
- C# interface'lerinde collection dönüş tipleri: interface, view ve snapshot farkıNick Cosentino (Dev Leader)2 gün önce