Microsoft AZ-204: Azure Önbelleğe Alma, CDN ve Performans — Çalışma kılavuzu
Şunun bir parçası: Microsoft Azure Developer Associate AZ-204 — Çalışma kılavuzu. Doğrulanmış cevaplarla şurada pratik yapın: Microsoft sınav merkezi, veya şurada süreli deneme sınavları çözün: ExamRoll.io.
Genel Bakış
Azure’da hızlı ve güvenilir kullanıcı deneyimleri, içeriği ve durumu kullanıcılara yakın konumlandırmaya, kaynak (origin) yükünü en aza indirmeye ve hataları sorunsuz bir şekilde yönetmeye bağlıdır. Azure Cache for Redis, Azure CDN ve Azure Front Door birlikte bellek içi hızlandırma, uç (edge) önbellekleme ve güvenlikle birlikte küresel anycast yönlendirme sağlar. Redis veri yapıları ve bağlantı desenleri, CDN profilleri ve önbellekleme semantiği ile Front Door yönlendirme ve sistem durumu yoklamaları (health probes) konularında uzmanlaşmak, düşük gecikmeli ve dayanıklı uygulamalar tasarlamanıza olanak tanır.
Azure Cache for Redis: katmanlar, veri yapıları, çıkarma (eviction) ve desenler
Azure Cache for Redis, yaygın Redis veri yapılarını ve daha yüksek katmanlarda gelişmiş özellikleri destekleyerek milisaniyenin altında veri erişimi sağlayan, yönetilen bir Redis hizmetidir.
Katmanlar:
- Basic: SLA ve veri çoğaltma (replication) olmayan tek düğümlü önbellek. Geliştirme/test ve kritik olmayan iş yükleri için iyidir. Veri kalıcılığı, kümeleme (clustering) ve VNet entegrasyonu yoktur.
- Standard: Otomatik yük devretme (failover) ve SLA içeren iki düğümlü birincil/kopya (primary/replica) yapı. Üretim ortamları için uygundur. Minimum kesintiyle dikey ölçeklendirmeyi (scaling up/down) destekler, ancak kümeleme veya kalıcılık yoktur.
- Premium: Daha yüksek performans ve iş hacmi (throughput), daha büyük önbellek boyutları, Redis kalıcılığı (RDB ve AOF), yatay ölçeklendirme için kümeleme (parçalama/sharding), sanal ağ entegrasyonu, bölge yedekliliği (desteklenen bölgelerde) ve olağanüstü durum kurtarma (DR) için coğrafi çoğaltma (geo-replication). Ayrıca zamanlanmış yama pencerelerini ve gelişmiş güvenliği de destekler.
Veri yapıları ve ne zaman kullanılacakları:
- Strings: Temel anahtar/değer, sayaçlar, JSON blobları; hız sınırlama (rate limiting) ve sayaçlar için atomik INCR/DECR.
- Hashes: Nesne alanlarını (ör. kullanıcı profili) kısmi güncellemeler ve alan verimliliği için alan-değer çiftleriyle tek bir anahtar altında saklayın.
- Lists: Kuyruklar veya yığınlar (stack), ekleme sırasına göre sıralanır; basit iş kuyrukları için LPUSH/BRPOP ile kullanın.
- Sets: Benzersiz koleksiyonlar; etiketler, üyelik kontrolleri, kesişimler için kullanın.
- Sorted Sets: Puanlarla sıralama; liderlik tabloları (leaderboards) ve zamana göre sıralanmış etkinlikler için idealdir.
- Bitmaps/Bitfields: Konumlara göre boolean bayrakların ve sayaçların kompakt takibi.
- HyperLogLog: Sabit bellekle yaklaşık kardinalite (benzersiz sayımlar).
- Geospatial: Enlem/boylam koordinatlarını saklama ve sorgulama, yarıçap aramaları.
- Streams: Olay alımı (ingestion) ve tüketici grupları (consumer groups) için yalnızca ekleme yapılabilen (append-only) bir günlük.
Çıkarma (eviction) ilkeleri (maxmemory’ye ulaşıldığında uygulanır):
- volatile-lru: Son kullanma süresi olan anahtarlar arasından en az kullanılanı çıkarır (Azure Cache for Redis’te varsayılan).
- allkeys-lru: Son kullanma süresine bakılmaksızın en az kullanılan anahtarları çıkarır.
- volatile-ttl: Son kullanma zamanı en yakın olan anahtarı çıkarır.
- volatile-random / allkeys-random: Rastgele anahtarları çıkarır, son kullanma süresi olan veya tüm anahtarlarla sınırlıdır.
- noeviction: Hiçbir anahtarı çıkarmaz; bellek ekleyecek yazma komutları hatayla başarısız olur.
- volatile-lfu / allkeys-lfu: En az sıklıkta kullanılan çıkarma varyantları (daha yeni Redis sürümleri için).
Çıkarma ilkesini veri kritikliğine ve erişim desenlerine göre seçin. Önbellekler için allkeys-lru veya allkeys-lfu en iyi isabet oranlarını (hit rates) verir. Dikkatle ayarlanmış sona erme sürelerine sahip karma depolar için volatile-ttl veya volatile-lru, TTL’lerinize saygı gösterebilir.
Yaygın kullanım senaryoları:
- Oturum önbellekleme (Session caching): Kullanıcı oturum durumunu
IDistributedCacheveya oturum ara yazılımı (middleware) aracılığıyla saklayın. Anahtarları küçük tutun, oturum zaman aşımıyla uyumlu TTL kullanın ve gerekirse uçta oturum benzeşimi (session affinity) etkinleştirin. - Çıktı önbellekleme (Output caching): Oluşturulmuş sayfa parçalarını veya tam yanıtları rotaya (route) ve kullanıcı segmentine göre anahtarlayarak önbelleğe alın. İçerik değişikliklerinde anahtar sürümleme veya açık
DELkomutu kullanarak geçersiz kılın. - Pub/Sub: Bildirimler veya önbellek geçersizleştirme yayılımı (fan-out) için neredeyse gerçek zamanlı mesajlaşma. Değişiklikleri birden çok aboneye yayınlamak için kanalları (channels) kullanın.
- Liderlik tabloları (Leaderboards): Sıralama için puanlı sıralı kümeler (sorted sets); en iyi N kaydı güncellemek ve okumak için
ZADD/ZREVRANGE; zaman pencereli sıralamalar için ikincil sıralı kümeler kullanın.
Azure Redis’e Bağlanma: bağlantı dizeleri, StackExchange.Redis ve dayanıklılık
Bağlantı uç noktaları ve anahtarları, Azure portalında Erişim anahtarları (Access keys) altında sağlanır. Birincil bağlantı dizesi (connection string) ana bilgisayar, bağlantı noktası, TLS ve parolayı içerir (örneğin, contoso.redis.cache.windows.net:6380,password=…;ssl=True;abortConnect=False). Üretim ortamında her zaman 6380 numaralı bağlantı noktasında TLS kullanın.
StackExchange.Redis en iyi uygulamaları:
- İşlem başına tek ve uzun ömürlü bir
ConnectionMultiplexerkullanın. Bu nesne iş parçacığı güvenlidir (thread-safe) ve istekleri verimli bir şekilde çoğullar (multiplexes). Bir kez oluşturun, statik bir alanda veya DI konteynerinde saklayın ve yeniden kullanın. - Yapılandırma seçenekleri: bulut yük devretme toleransı için
AbortOnConnectFail=falseolarak ayarlayın; geçici sorunlar içinConnectRetryveConnectTimeoutayarlayın; iş yüküne göre ayarlanmışSyncTimeout; NAT pinhole’larını korumak içinKeepAlive. Metin biçiminde örnek seçenekler: ssl=True, abortConnect=False, connectRetry=5, connectTimeout=5000. - Yük altında iş parçacığı havuzunun tükenmesini (thread pool starvation) önlemek için zaman uyumsuz (async) yöntemler kullanın.
IDatabaseyöntemleri (StringGetAsync,HashSetAsync,SortedSetAddAsync) engelleme yapmaz (non-blocking). - Dayanıklılık olaylarını yönetin: topoloji değişikliklerini ve yük devretmeleri günlüğe kaydetmek ve gözlemlemek için
ConnectionFailed,ConnectionRestoredveConfigurationChangedolaylarına abone olun.StackExchange.Redis, yük devretme sırasında birincil (primary) sunucuyu otomatik olarak yeniden çözer. - Uzun süren Lua betiklerinden ve ağır işlemlerden kaçının; küçük, atomik komutları tercih edin. Çoğullayıcı (multiplexer) aracılığıyla doğal olarak ardışık düzen (pipeline) oluşturun; zaman aşımlarına yol açacak kadar aşırı gruplama (batch) yapmayın.
- Zaman aşımları ve yeniden denemeler: bir kez etkili olmayan (non-idempotent) komutları körü körüne yeniden denemeyin. Kritik yazma işlemleri için bir kez etkili (idempotent) desenler veya doğrudan yazma (write-through) kuyrukları kullanın.
- Serileştirme: ağ trafiğini ve belleği en aza indirmek için kompakt yükler (payloads) (ör.
MessagePack) saklayın. Devasa değerlerden kaçının; alan düzeyinde erişime sahip hash’leri tercih edin. - Anahtar adlandırma: çakışmaları önlemek ve toplu işlemleri ve temizlemeleri basitleştirmek için uygulama/ortam (prod:session:{userId}) ile önek ekleyin.
- Güvenlik: erişim anahtarlarını düzenli olarak değiştirin (rotate), VNet (Premium) aracılığıyla kısıtlayın ve özel erişim için
Private Linkkullanmayı düşünün. Üretim ortamında “Yalnızca SSL üzerinden erişime izin ver” seçeneğinifalseolarak ayarlamayın.
Azure CDN: profiller, uç noktalar, origin’ler, optimizasyon ve içerik güncelliği
Azure CDN, gecikmeyi azaltmak ve origin yükünü düşürmek için statik içeriği uç POP’larda (Varlık Noktaları) önbelleğe alır. Bir CDN profili, uç noktaları ve fiyatlandırma katmanını/sağlayıcıyı gruplandırır; bir uç nokta ise uç ana bilgisayar adını tanımlar ve bir veya daha fazla origin’e bağlanır.
Profiller ve uç noktalar:
- Bir profil altında, uygulama veya ortam başına bir veya daha fazla uç nokta oluşturun. Her uç noktanın, TLS ile özel alan adlarına eşlediğiniz kendi uç ana bilgisayar adı (ör. app.azureedge.net) vardır.
- Faturalandırmayı ayırmak veya gerektiğinde farklı sağlayıcıları/özellikleri uygulamak için ayrı profiller kullanın.
Origin türleri:
- Azure Blob Storage: Statik web siteleri ve büyük medya dosyaları için idealdir. Static website özelliğini etkinleştirin veya bir container’a eşleyin; doğru MIME türlerinin ve önbellek başlıklarının ayarlandığından emin olun.
- App Service: Belirli yanıtların önbelleğe alınabildiği dinamik içerik veya REST API’ler için kullanın. Origin ana bilgisayar başlığını (origin host header) uygulamanızın ana bilgisayar adına göre yapılandırın ve HTTPS kullandığınızdan emin olun.
- Özel origin: Genel IP veya ters proxy aracılığıyla şirket içi sunucular da dahil olmak üzere, genel olarak erişilebilir herhangi bir HTTP(S) uç noktası.
Optimizasyon türleri (uç nokta oluşturulurken uygulanır):
- Genel web teslimatı: Yaygın POP kapsamıyla çok sayıda küçük/orta ölçekli varlık (HTML, CSS, JS, resimler) için dengelenmiştir.
- Büyük dosya indirme: Aralık isteği (range request) ayarı, bağlantı yönetimi ve verim odaklı ayarlarla büyük dosyalar için optimize edilmiştir.
- Video akışı: Aşamalı indirme (progressive download) veya HLS/DASH segment teslimatı için optimize edilmiştir; segment önbelleklemesini verimli tutar ve bayt aralığı isteklerini (byte-range requests) destekler.
Önbellekleme kuralları ve temizleme (purging):
- Genel ve özel önbellekleme kuralları, yola, dosya uzantısına, istek yöntemine ve sorgu dizesi (query string) davranışına göre TTL’leri kontrol etmenizi sağlar. Standard katmanlarda, kuralları uç noktanın önbellekleme ayarlarında yapılandırın; Premium katmanlar gelişmiş kural motorları ekler.
- Portal, CLI veya REST API aracılığıyla joker karakterler (ör. /images/*) kullanarak geçersiz içeriği yola göre temizleyin (purge). Temizleme işlemleri tüm POP’lara yayılır; etki alanını en aza indirmek için hedefli temizlemeler kullanın. Premium katmanlar, önbellekleri ısıtmak (warming) için ön yüklemeyi (preload) destekler.
İçerik güncelliği kontrolleri:
- TTL: CDN, varsayılan olarak origin’den gelen Cache-Control ve Expires başlıklarına uyar. Kurallarla bu değerleri geçersiz kılabilir veya minimum/maksimum TTL’ler belirleyebilirsiniz. Değişmez (immutable) varlıklar için isabet oranlarını (hit rate) en üst düzeye çıkarmak amacıyla
Cache-Control: public,max-age=31536000,immutablebaşlığını kullanın. - Cache-Control direktifleri:
no-storeveprivateCDN tarafından önbelleğe alınmaz;must-revalidateves-maxagepaylaşılan önbellek üzerinde hassas kontrol sağlar. Tarayıcılar içinmax-agedeğerini ihtiyatlı tutarken CDN’e özgü TTL’ler içins-maxagetercih edin. - Sorgu dizesi (query string) önbellekleme davranışı: Sorgu dizelerini yoksaymayı (yol başına tek bir önbelleğe alınmış nesne), her benzersiz URL’yi önbelleğe almayı (her sorgu dizesi kombinasyonu ayrı ayrı önbelleğe alınır) veya sorgu dizesi olduğunda önbelleği atlamayı seçin. Sürümlenmiş varlıklar (ör. app.css?v=hash) için her benzersiz URL’yi önbelleğe alın. Analitik parametreleri (utm_) için isabet oranlarını artırmak amacıyla sorgu dizelerini yoksayın.
- Vary ve sıkıştırma: Sıkıştırma yaparken
Vary: Accept-Encodingbaşlığının ayarlandığından emin olun; CDN, her Vary anahtarı için ayrı varyantları önbelleğe alacaktır. Bant genişliğini azaltmak için metin varlıkları için CDN sıkıştırmasını etkinleştirin.
Azure Front Door: küresel yönlendirme, sağlık, güvenlik ve benzeşim
Azure Front Door, anycast tabanlı, Katman 7 küresel yük dengeleme, dinamik site hızlandırma ve entegre WAF sağlar. Standard/Premium sürümlerinde statik içeriği isteğe bağlı olarak önbelleğe alırken dinamik trafiği yönlendirip koruyarak CDN’i tamamlar.
Yönlendirme kuralları:
- Gelen ana bilgisayar adlarını ve yol desenlerini eşleştirip bir origin grubuna (arka uç havuzu) yönlendirin. Her kural için yol yeniden yazmaları, başlık dönüşümleri, yönlendirmeler ve protokol ayarları uygulayın.
- Uygulama ucunda (edge) daha sıkı kontrol istediğinizde, statik veya yarı statik varlıkların uçta önbelleğe alınması için rota (Standard/Premium) düzeyinde önbelleğe almayı yapılandırın.
- Origin’ler arasında öncelik tabanlı yük devretme ve ağırlıklı yük dengeleme kullanın; isteğe bağlı olarak bölgeye özgü yönlendirme için coğrafi filtreleme ekleyin.
Sağlık yoklamaları ve arka uç sağlığı:
- Yoklama yolunu, protokolü, aralığı ve beklenen HTTP durum kodlarını tanımlayın. Yoklamalar, origin sağlığını belirlemek için birden çok uç konumdan çalışır.
- Front Door, trafiği düşük gecikmeyle sağlıklı origin’lere yönlendirmek için sağlık durumunu kullanır. Sık durum değiştirmeyi (flapping) önlemek için zaman aşımlarını ve örnek boyutunu ayarlayın; yoklama uç noktasının hafif ve önbelleğe alınmamış olduğundan emin olun.
WAF entegrasyonu:
- Yaygın web güvenlik açıklarına karşı yönetilen kural kümelerini uygulamak ve IP kısıtlamaları, coğrafi engelleme veya istek boyutu limitleri için özel kurallar eklemek üzere Front Door’unuza bir WAF ilkesi ekleyin.
- Kötü niyetli trafiği uçta karşılamak ve origin kapasitesini korumak için bot koruması ve hız sınırlama kullanın.
Oturum benzeşimi:
- Uygulamanız ardışık isteklerin aynı arka uca gitmesini gerektirdiğinde (ör. dağıtık olmayan oturum durumu) oturum benzeşimini etkinleştirin. Front Door, bir benzeşim çerezi ekler ve aynı oturumdaki sonraki istekleri bir yönlendirme kuralı dahilinde seçilen arka uca yönlendirir.
- Mümkün olduğunda benzeşimden kaçınmak için durumsuz (stateless) tasarımları veya Redis destekli oturum durumunu tercih edin; kullanılıyorsa, benzeşim kapsamını dikkatlice belirleyin ve uygun çerez TTL’leri ayarlayın.
CDN ile etkileşim:
- CDN, statik varlıkları (resimler, betikler, medya) uzun TTL’ler ile sunmalıdır; Front Door ise dinamik istekleri WAF, TLS sonlandırma ve yol tabanlı yönlendirme ile yönlendirir. Bu ayrım, önbellek isabet oranlarını en üst düzeye çıkarır ve dinamik gecikmeyi en aza indirir.
- Önbelleğe alınamayan API’ler veya sayfalar için TTL’yi düşük tutun veya önbelleğe almayı atlayın; yarı statik HTML için, değişiklikte temizleme (purge-on-change) iş akışlarıyla kısa TTL’ler düşünün.
Pratik Problem Senaryosu
Mozilla, lansmanlar sırasında yüksek trafik artışları olan, eklenti keşfi için küresel bir mikro site başlatıyor. Dünya çapında hızlı statik varlık teslimatına, dayanıklı dinamik API’lere ve güvenli, düşük gecikmeli kullanıcı etkileşimlerine ihtiyaçları var.
- Küresel giriş ve güvenlik için Front Door
- Özel alan adı (custom domain) ve yönetilen TLS ile bir Front Door Standard profili oluşturun. Yönlendirme kurallarını tanımlayın: /api/* yolunu App Service API origin grubuna ve /* yolunu CDN uç noktası ana bilgisayar adına yönlendirin.
- Neden: Anycast yönlendirmesi, kullanıcıları en yakın uca (edge) getirir; Front Door’daki WAF, origin’lere ulaşmadan önce kötü niyetli desenleri engeller; yol tabanlı yönlendirme, dinamik ve statik trafiği temiz bir şekilde ayırır.
- WAF ilkesi ve hız sınırlama
- Yönetilen kural kümeleri etkinleştirilmiş bir WAF ilkesi ve /api/search yoluna gelen aşırı POST isteklerini kısmak için özel bir kural ekleyin.
- Neden: API’leri OWASP sınıfı saldırılardan ve kötü niyetli istemcilerden korur, ani artışlar sırasında origin kapasitesini muhafaza eder.
- Sağlık yoklamaları ve origin grupları
- API origin grubunu farklı bölgelerdeki iki App Service örneği ile yapılandırın. /healthz üzerinde 200 beklenen durum kodu ve 10 saniyelik aralıkla sağlık yoklamaları kullanın. Bir bölgeyi öncelik 1, diğerini öncelik 2 olarak yük devretme (failover) ile ayarlayın.
- Neden: Birincil bölgenin performansı düşerse otomatik bölgesel yük devretmeyi sağlar; yoklamalar, önbelleğe alınmış yanıtlardan bağımsız olarak sağlığı tespit eder.
- Redis destekli oturum ve çıktı önbellekleme
- Azure Cache for Redis Standard’ı dağıtın ve API’yi IDistributedCache ile entegre ederek minimum oturum durumunu ve yaygın API yanıtları (ör. popüler eklenti listeleri) için 60-300 saniyelik TTL’lere sahip kısa ömürlü çıktı parçalarını saklayın.
- Neden: Durumu (state) web katmanının dışında tutarken API gecikmesini ve veritabanı yükünü azaltır; kısa TTL’ler, manuel geçersiz kılma olmadan güncelliği korur.
- Liderlik tabloları için Redis veri yapıları
- İndirme tabanlı sıralamaları sürdürmek için kategori başına bir Redis sıralı kümesi (sorted set) kullanın (ör. addons:top:{category}). Puanları bir kuyruk tüketicisi (queue consumer) aracılığıyla eşzamansız olarak güncelleyin ve en üst N kaydı okuyan okuma API’leri sunun.
- Neden: Sıralı kümeler, O(log n) güncellemeler ve hızlı aralık okumaları sağlar; bu da onları yüksek okuma eşzamanlılığına sahip gerçek zamanlı sıralamalar için mükemmel kılar.
- StackExchange.Redis ile bağlantı dayanıklılığı
- ssl=True, abortConnect=False, connectRetry=5 ve makul zaman aşımları ile bir singleton ConnectionMultiplexer başlatın. Gözlemlenebilirlik için ConnectionFailed/Restored olaylarını yönetin ve eşzamansız API’ler kullanırken ani yoğunluklar için SyncTimeout’u yeterince yüksek ayarlayın.
- Neden: Sorunsuz yük devretme yönetimi sağlar ve geçici ağ olayları veya Redis yük devretmeleri sırasında süreç genelindeki kesintileri önler.
- Agresif önbellekleme ile statik varlıklar için CDN
- Origin olarak depolama hesabı statik web sitesini kullanarak Genel web teslimatı için optimize edilmiş bir Azure CDN profili ve uç noktası oluşturun. Önbellekleme kurallarını origin başlıklarına uyacak şekilde yapılandırın, ancak /static/* için 7 günlük bir TTL’ye geçersiz kılın ve sıkıştırmayı etkinleştirin. Sorgu dizesi önbelleğe almayı Her benzersiz URL’yi önbelleğe al olarak ayarlayın ve varlıkları parmak iziyle işaretleyin (app.css?v=hash).
- Neden: Uçta önbellekleme (edge caching), varlıkları dünya çapında hızla teslim eder; parmak iziyle işaretleme, dağıtımlarda anında güncellemelerle birlikte uzun TTL’lere izin verir; sıkıştırma, aktarım boyutlarını azaltır.
- CI/CD’de temizleme (purge) süreci
- Lansman sırasında HTML ve JSON manifestoları için CDN yollarını temizleyen (ör. /index.html, /manifest/*.json) ve desteklenen katmanlarda ısınmış önbellekler için kritik sayfaları önceden yükleyen bir dağıtım adımı ekleyin.
- Neden: Değişmez varlıkları önbellekte tutarken kullanıcıların yeni HTML’yi hızla almasını sağlar; önceden yükleme, dağıtım sonrası soğuk başlangıç gecikmesini azaltır.
- Yalnızca gerektiğinde Front Door oturum benzeşimi
- API’leri durumsuz (stateless) tutun ve oturum durumu için Redis’e güvenin; /api/* rotaları için Front Door oturum benzeşimini devre dışı bırakın. Benzeşim
← Azure Olay Tabanlı ve Mesaj Çözümleri · Tüm alanlar · Azure İzleme →
Bu soruları çözün → · ExamRoll.io’da süreli pratik →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Sınavınızı geçin →