Categories: ArchitecturalAzure

Azure Front Door Service ile Web App’lerin Performansını ve Erişilebilirliğini Arttırmak

Cloud üzerinde global(çok bölgeli) düzeyde bir web uygulaması geliştiriyorsak ve ayrıca uygulamanın performanslı, scalable ve highly available olmasını istiyorsak, iyi bir uygulama giriş noktasına ihtiyacımız var demektir.

Bu kapsamda, Microsoft‘un uzun zamandır scalability ve security gibi konular için kendi hizmetleri içerisinde de kullanıyor olduğu bir web uygulama giriş noktası olan Azure Front Door Service, ihtiyaçlarımızı oldukça karşılamaktadır.

Azure Front Door Service için kısaca, global web uygulamalarımızın performans ve high availability gibi endişelerini göz önüne alarak, routing işlemlerini WAF(Web Application Firewall) ve CDN gibi ihtiyaçlarla birlikte gerçekleştiren global bir web application acceleration platform’udur diyebiliriz.

Peki, uygulamanın performansına nasıl bir katkısı oluyor?

Azure Front Door, son kullanıcının uygulamaya erişmeye çalışırken network’de geçirdiği round-trip süresini minimize etmektedir ve son kullanıcıyı, ona en yakın ve en hızlı olan backend pool’una yönlendirmektedir. Bunun için ise, Anycast protocol’ünden yararlanmaktadır.

Tıpkı bir CDN‘in gelen trafiği, en yakın olan noktaya yönlendirildiği gibi, Front Door da gelen trafiği, resilient bir şekilde en hızlı ve en uygun olan noktaya yönlendirmektedir.

Bu işlemler için ise, Microsoft Global Network altyapısını kullanmaktadır. Böylece daha iyi bir network performansı ve reliability sunmaktadır.

NOT: Microsoft kendi datacenter’ları arasında kullandığı, yüksek kapasiteli bir private global network’e sahiptir.

Bazı core özellikleri

  • Yukarıda bahsettiğimiz gibi, uygulamanın network performansını oldukça arttırır.
  • Smart health prob’ları ile uygulamayı latency ve availability açısından monitor ederek, otomatik ve hızlı failover sağlar.
  • URL-based routing özelliği ile, microservice architecture’ını oldukça destekler. Kolaylıkla request’in path’ine göre, trafiğin routing işleminin gerçekleştirilebilmesine olanak sağlar.
  • SSL termination yeteneği ile, uygulama backend’ini encryption ve decryption maliyetinden kurtarır.
  • İhtiyacımız varsa kullanıcı session’ını, belirli bir application backend’inde tutabilmemizi sağlar.
  • Ayrıca güvenliği sağlayabilmek için ise, custom Web Application Firewall (WAF) rule’ları oluşturulabilmesine olanak ve DDoS koruması sağlar.

Peki, nasıl kullanabiliriz?

Azure Front Door ile bir örnek gerçekleştirebilmek için, öncelikle “West Europe” ve “UK South” bölgelerinde aşağıdaki gibi birer Azure Web App oluşturalım.

Ardından ilgili Web App‘lere, uygulamanın hangi lokasyonda konumlandığı bilgisini içeren basit birer ASP.NET Core Web App projesi oluşturup, deploy edelim.

Deployment işlemi başarıyla tamamlandıysa, Front Door oluşturma aşamasına geçebiliriz.

İlk olarak Azure Portal üzerinden Front Door oluşturma ekranına girelim ve “Basics” sekmesinde ilgili resource group’u seçerek, ardından “Configuration” sekmesine geçelim.

Bu sekmede, ilk olarak uygulamamıza bir giriş noktası oluşturmamız gerekmektedir. Bunun için, “Frontend hosts” kısmında bulunan + işaretine tıklayarak, aşağıdaki gibi bir host oluşturalım.

Şimdi ise, bir backend pool’u oluşturmamız gerekiyor. Bunun için, “Backend pools” kısmında bulunan + işaretine tıklayarak, aşağıdaki ekrana gelelim.

Burada öncelikle “Name” kısmına unique bir isim verelim. Ardından ilgili backend’leri ekleyebilmek için, “BACKENDS” sekmesi altındaki “+ Add a backend” butonuna tıklayalım.

Burada ise “Backend host type” olarak, “App service” seçeneğini seçelim. Ardından “Backend host name” kısmında ise daha önce oluşturmuş olduğumuz ilgili App Service‘i seçelim.

NOT: Bu işlemi oluşturmuş olduğumuz host’a backend olarak eklemek istediğimiz ilgili her bir App Service için, tek tek gerçekleştirmemiz gerekmektedir.

Burada dikkat etmemiz gereken iki parametre ise, “Priority” ve “Weight” parametreleri.

  • Priority” parametresi ile trafiğin, öncelikle hangi backend’e yönlendirilmesini istediğimizi belirtebiliyoruz.
  • Weight” parametresi ile de trafiğin, yüzde kaçının yönlendirilmesini istediğimizi belirtebiliyoruz.

Bu noktada, “Priority” parametresini tüm backend’ler için aynı olarak ayarlarsak, trafik ayarlanmış olan “Weight” parametresine göre dengeli bir şekilde backend’ler arasında yönlendirilecektir.

Parametreleri configure ettikten sonra ise, “Add” butonuna basarak ekleme işlemini gerçekleştirelim.

Her iki bölgedeki backend’leri ekledikten sonra ise, “HEALTH PROBES” ve “LOAD BALANCING” kısımlarını default değerleri ile bırakalım.

  • HEALTH PROBES” sekmesinden kısaca, eklemiş olduğumuz backend’lerin sağlıklı olup olmadığını Front Door‘un kontrol edebilmesi için gerekli probe request’lerinin interval süresini ayarlayabilmekteyiz.
  • LOAD BALANCING” sekmesinden iste, health probe’ları destekleyecek ekstra parametreler belirtebiliyoruz.

Şimdi ise routing rule’larını tanımlama kısmına geçebiliriz. Bunun için “Routing rules” kısmında bulunan + işaretine tıklayalım ve aşağıdaki gibi configure edelim.

Bu ekranda ise kısaca, route mapping işlemini gerçekleştiriyoruz. Yukarıdaki değerlerle root URL‘e gelecek olan her bir request’in, oluşturmuş olduğumuz “mytodoapp-bpool” isimli backend pool’una yönlendirilmesini sağladık.

Bu konu hakkında daha detaylı bilgiye ise, buradan erişebilirsiniz.

Bu işlemlerin ardından, “Review + create” butonuna basarak Front Door‘un oluşturulma işlemini tamamlayalım.

Test ve Sonuç

Front Door ile bir örnek gerçekleştirebilmek için Azure üzerinde, “West Europe” ve “UK South” bölgelerine test amaçlı iki adet Web App deploy ettik. Ardından bu Web App‘lere bir giriş noktası olacak olan bir Azure Front Door hizmeti oluşturduk.

Örnek amaçlı Front Door‘dan beklentimiz ise, bizi en yakın yani en hızlı olan backend pool’una yönlendirmesi. Ayrıca herhangi bir hata anında da, failover işlemini gerçekleştirmesi. Tabi bu failover işlemi sadece hata anında değil, bölgesel maintanance işlemlerinde de operasyonun sıfır kesintili gerçekleşebilmesi için önemli.

Şimdi test için uygulamaya Front Door adresi üzerinden erişelim. Ben “West Europe” bölgesinde yaşadığım için, Front Door’un beni “West Europe” da oluşturmuş olduğumuz backend’e yönlendirmesi gerekmektedir.

Beklediğimiz gibi FD beni en yakın olan noktaya yönlendirdi.

Şimdi herhangi bir VPN tool’u ile konumumuzu “UK” bölgesine çevirelim ve tekrar siteye girelim.

Gördüğümüz gibi bu sefer beni, “UK South” bölgesinde konumlandırdığımız backend noktasına yönlendirdi. Tıpkı asset’ler için bir CDN kullanmak gibi.

Şimdi failover senaryosunu test edebilmek için ise, VPN‘i kapatıp (eğer sizde “West Europe” bölgesindeyseniz) ardından “West Europe” bölgesinde oluşturmuş olduğumuz Web App‘i durduralım.

Bu sefer de bizi, sağlıklı olan “UK South” bölgesine yönlendirmesini gerekmektedir.

Beklediğimiz gibi sağlıklı olan “UK South” bölgesine yönlendirme işlemini gerçekleştirdi.

Bunların dışında Application Insights hizmeti ile de, canlı metric’leri izleyebilmek mümkün. Ayrıca WAF özelliğini configure ederek, rate limiting veya geo-based access control gibi işlemleri de gerçekleştirebilmekteyiz.

Referanslar

https://docs.microsoft.com/en-us/azure/web-application-firewall/afds/afds-overview?WT.mc_id=AZ-MVP-5003382
https://docs.microsoft.com/en-us/azure/frontdoor/front-door-overview?WT.mc_id=AZ-MVP-5003382
https://docs.microsoft.com/en-us/azure/frontdoor/front-door-routing-architecture?WT.mc_id=AZ-MVP-5003382
https://docs.microsoft.com/en-us/azure/frontdoor/front-door-backend-pool?WT.mc_id=AZ-MVP-5003382

Gökhan Gökalp

Recent Posts

Containerized Uygulamaların Supply Chain’ini Güvence Altına Alarak Güvenlik Risklerini Azaltma (Güvenlik Taraması, SBOM’lar, Artifact’lerin İmzalanması ve Doğrulanması) – Bölüm 1

{:tr}Bildiğimiz gibi modern yazılım geliştirme ortamında containerization'ın benimsenmesi, uygulamaların oluşturulma ve dağıtılma şekillerini oldukça değiştirdi.…

8 ay ago

Identity & Access Management İşlemlerini Azure AD B2C ile .NET Ortamında Gerçekleştirmek

{:tr}Bildiğimiz gibi bir ürün geliştirirken olabildiğince farklı cloud çözümlerinden faydalanmak, harcanacak zaman ve karmaşıklığın yanı…

1 yıl ago

Azure Service Bus Kullanarak Microservice’lerde Event’ler Nasıl Sıralanır (FIFO Consumers)

{:tr}Bazen bazı senaryolar vardır karmaşıklığını veya eksi yanlarını bildiğimiz halde implemente etmekten kaçamadığımız veya implemente…

2 yıl ago

.NET Microservice’lerinde Outbox Pattern’ı ile Eventual Consistency için Atomicity Sağlama

{:tr}Bildiğimiz gibi microservice architecture'ına adapte olmanın bir çok artı noktası olduğu gibi, maalesef getirdiği bazı…

2 yıl ago

Dapr ve .NET Kullanarak Minimum Efor ile Microservice’ler Geliştirmek – 02 (Azure Container Apps)

{:tr}Bir önceki makale serisinde Dapr projesinden ve faydalarından bahsedip, local ortamda self-hosted mode olarak .NET…

2 yıl ago