Azure Front Door nedir?
Azure Front Door, Microsoft’un global load balancer ve CDN hizmeti. Uygulamanızın önüne oturuyor ve gelen trafiği en yakın edge location’dan karşılıyor. İşi sadece trafik yönlendirmek değil: SSL termination, WAF (Web Application Firewall), caching, URL rewriting ve health probe’lar gibi özellikleri var. Standard ve Premium olmak üzere iki tier’da sunuluyor. Premium tier’da Microsoft’un threat intelligence feed’iyle beslenen managed rule set’ler ve bot protection gibi ek güvenlik katmanları geliyor. Kısacası, uygulamanızı hem hızlandırıyor hem koruyor.
WebSocket desteği
Azure Front Door, Standard ve Premium tier’ların ikisinde de WebSocket’i destekliyor. Ekstra konfigürasyon gerekmiyor. WebSocket, RFC 6455 ile standartlaştırılmış bir TCP tabanlı protokol ve sunucu ile istemci arasında tek bir TCP bağlantısı üzerinden çift yönlü iletişim sağlıyor. HTTP’deki gibi sürekli polling yapmaya gerek kalmıyor ve aynı TCP bağlantısını birden fazla istek için kullanabiliyor.
Chat uygulamaları, canlı dashboard’lar, finansal veri akışları, GPS takip, online eğitim, canlı yayın ve oyunlar gibi gerçek zamanlı güncelleme gerektiren uygulamalar için WebSocket mantıklı bir tercih. Mesela bir trading sitesi, fiyat verilerini gerçek zamanlı olarak WebSocket üzerinden push edebilir.
Front Door üzerinde WebSocket kullanırken bilmeniz gerekenler
Bağlantı WebSocket’e upgrade edildikten sonra Front Door, istemci ile origin server arasındaki veriyi olduğu gibi iletiyor. Kurulu bağlantı üzerinde herhangi bir inspection ya da manipülasyon yapmıyor. WAF tarafında da benzer bir durum var: WAF denetimleri sadece WebSocket bağlantısının kurulma aşamasında uygulanıyor. Bağlantı kurulduktan sonra WAF aradan çekiliyor.
Dikkat edilmesi gereken birkaç nokta var. WebSocket route’ları için caching’i kapatmanız gerekiyor. Caching açık olan route’larda Front Door, WebSocket Upgrade header’ını origin’e iletmiyor ve isteği normal bir HTTP request olarak değerlendiriyor. Bu da WebSocket upgrade’inin başarısız olmasına yol açıyor.
Idle timeout 5 dakika. Front Door, son 5 dakika içinde origin’den ya da istemciden herhangi bir veri transferi algılamazsa bağlantıyı kapatıyor. WebSocket bağlantıları en fazla 4 saat açık kalabiliyor. Altyapı tarafındaki server upgrade’leri veya bakım çalışmaları nedeniyle bağlantı daha erken de düşebilir. Bu yüzden uygulamanızda retry logic bulundurmanız gerekiyor.
Kapasite tarafında her Azure Front Door profili için global olarak en fazla 3.000 eşzamanlı bağlantı limiti var. Bu limiti aşacak workload’larınız varsa Azure Front Door service limits dokümanını kontrol edin.
WebSocket protokolü nasıl çalışıyor?
WebSocket bağlantıları port 80 (standart) veya port 443 (TLS/SSL üzerinden) kullanıyor. Stateful bir protokol, yani taraflardan biri kapatana kadar bağlantı açık kalıyor. Bağlantı kurulumu HTTP Upgrade request’i ile başlıyor. İstemci ws: ya da wss: şeması kullanarak bir HTTP isteği gönderiyor ve bu istekte Connection: Upgrade, Upgrade: websocket, Sec-WebSocket-Key ve Sec-WebSocket-Version header’ları bulunuyor.
Sunucu bu isteği kabul ederse 101 Switching Protocols status code’u ile yanıt veriyor. Yanıtta Connection: Upgrade ve Upgrade: websocket header’ları ile birlikte Sec-WebSocket-Accept header’ı dönüyor. Bu header, bağlantının başarıyla upgrade edildiğini doğruluyor. İstemci bu yanıtı aldıktan sonra WebSocket bağlantısı açılıyor ve veri iletimi başlıyor.
Bağlantı istemci, sunucu ya da ağ kesintisi nedeniyle koparsa, yeniden bağlantı kurma sorumluluğu istemci uygulamasında. Bu yüzden client tarafında reconnection mekanizması olması şart.
Bir not: SSE desteklenmiyor
Front Door şu an Server-Sent Events (SSE) desteği sunmuyor. Real time veri akışı için SSE kullanan uygulamalarınız varsa bunu göz önünde bulundurmanız gerekiyor. WebSocket iki yönlü iletişim sağlarken SSE sadece sunucudan istemciye tek yönlü çalışıyor, ama bazı use case’ler için SSE yeterli ve daha basit bir çözüm olabiliyor. Front Door arkasında SSE kullanmanız gerekiyorsa farklı bir mimari düşünmeniz gerekebilir.
Azure Front Door’un WebSocket desteği, real time uygulamalar için CDN ve güvenlik katmanını korurken çift yönlü iletişimi mümkün kılıyor. Ek konfigürasyon gerektirmemesi güzel ama 4 saatlik maksimum bağlantı süresi, 3.000 concurrent connection limiti ve SSE desteğinin olmaması gibi kısıtlamaları var. Bu kısıtlamalar uygulamanız için sorun oluşturmuyorsa, Front Door üzerinden WebSocket kullanmak oldukça düz bir süreç. Caching’i kapatmayı ve retry logic eklemeyi unutmayın yeter.
