WEB / WEB-20.02
Microservices, gateway ve intermediaries
Public read gateway’den notes ve index service’e gider. Cache, replica seçimi ve policy kararının nerede verildiğini izle.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Service dönüşü
- Gateway’de başla
Public read gateway’e daha önce ulaşmıştır. Notes-b mesajı hazırdır, fakat notes henüz almamıştır.
- Browser
- Browser bekliyor
- Gateway / balancer
- notes-b mesajı hazır
- Notes replica
- Notes request yok
- Index service
- Index request yok
- Edge cache / policy
- Edge bu dalda yok
- Notes request’i aldı
Public read notes-b’ye ulaşır. Index service bu request hakkında henüz bilgi sahibi değildir.
- Browser
- Browser bekliyor
- Gateway / balancer
- notes-b mesajı hazır
- Notes replica
- Public read alındı
- Index service
- Index request yok
- Edge cache / policy
- Edge bu dalda yok
- Index query hazır
Notes, tea category query’sini hazırlar. Query hazırlamak, index’e teslim etmek değildir.
- Browser
- Browser bekliyor
- Gateway / balancer
- notes-b mesajı hazır
- Notes replica
- Index query hazır
- Index service
- Index request yok
- Edge cache / policy
- Edge bu dalda yok
- Index query’yi aldı
Index tea query’sini öğrenir. Browser hâlâ sonuç bekler.
- Browser
- Browser bekliyor
- Gateway / balancer
- notes-b mesajı hazır
- Notes replica
- Index query hazır
- Index service
- tea query alındı
- Edge cache / policy
- Edge bu dalda yok
- Category response hazır
Index public veriden Tea category sonucunu hazırlar. Notes henüz bu sonucu almamıştır.
- Browser
- Browser bekliyor
- Gateway / balancer
- notes-b mesajı hazır
- Notes replica
- Index query hazır
- Index service
- Tea response hazır
- Edge cache / policy
- Edge bu dalda yok
- Category notes’a ulaştı
Category response notes’a ulaşır. Gateway birleşik sonucu henüz bilmiyor.
- Browser
- Browser bekliyor
- Gateway / balancer
- notes-b mesajı hazır
- Notes replica
- Tea category alındı
- Index service
- Tea response hazır
- Edge cache / policy
- Edge bu dalda yok
- Birleşik sonuç hazır
Notes title ve category’yi kendi contract’ına göre JSON response’a bağlar. Gateway’e teslim hâlâ ayrı olaydır.
- Browser
- Browser bekliyor
- Gateway / balancer
- notes-b mesajı hazır
- Notes replica
- Birleşik JSON hazır
- Index service
- Tea response hazır
- Edge cache / policy
- Edge bu dalda yok
- Sonuç gateway’e ulaştı
Birleşik response gateway’e ulaşır. Bu sahne burada biter; browser’a teslim edilmiş sayılmaz.
- Browser
- Browser bekliyor
- Gateway / balancer
- Composed result alındı
- Notes replica
- Birleşik JSON hazır
- Index service
- Tea response hazır
- Edge cache / policy
- Edge bu dalda yok
Cache hit
- Public read hazır
Browser public read hazırlar. Edge cache ve policy henüz request’i görmemiştir.
- Browser
- Public read hazır
- Gateway / balancer
- Gateway request yok
- Notes replica
- Notes request yok
- Index service
- Index request yok
- Edge cache / policy
- Edge request yok
- Request edge’e ulaştı
Request edge’de alınır. Gateway, notes ve index’e forwarding henüz yapılmamıştır.
- Browser
- Public read hazır
- Gateway / balancer
- Gateway request yok
- Notes replica
- Notes request yok
- Index service
- Index request yok
- Edge cache / policy
- Public request alındı
- Edge cache hit
Logical age=2, ttl=5 sınırındadır; public cover fresh kabul edilir. Response edge’de hazırlanır, originCalls=0 kalır.
- Browser
- Public read hazır
- Gateway / balancer
- Gateway request yok
- Notes replica
- Notes request yok
- Index service
- Index request yok
- Edge cache / policy
- Fresh cover hazır
- Response browser’a ulaştı
Hazır response browser’a ulaşır. Diğer actor’lar bu request’i almamıştır; onların state’i değişmez.
- Browser
- Tea cover alındı
- Gateway / balancer
- Gateway request yok
- Notes replica
- Notes request yok
- Index service
- Index request yok
- Edge cache / policy
- Fresh cover hazır
- Cache sonucu sınıflandırıldı
Browser sonucu kendi adımında sınıflandırır. Cache hit, origin availability veya private authorization kanıtı değildir.
- Browser
- Public cover görünür
- Gateway / balancer
- Gateway request yok
- Notes replica
- Notes request yok
- Index service
- Index request yok
- Edge cache / policy
- Fresh cover hazır
Replica yok
- Gateway request’i biliyor
Public read gateway’de alınmıştır. Replica seçimi ve forwarding henüz yapılmamıştır.
- Browser
- Browser bekliyor
- Gateway / balancer
- Public read alındı
- Notes replica
- Notes request yok
- Index service
- Index request yok
- Edge cache / policy
- Edge bu dalda yok
- Seçilebilir replica yok
Ready instance listesi boş çıkar. Olmayan bir service teslimi gösterilmez.
- Browser
- Browser bekliyor
- Gateway / balancer
- Eligible set boş
- Notes replica
- Notes request yok
- Index service
- Index request yok
- Edge cache / policy
- Edge bu dalda yok
- 503 response hazır
Gateway unavailable policy’si 503 hazırlar. Notes ve index hiçbir request almamıştır.
- Browser
- Browser bekliyor
- Gateway / balancer
- 503 response hazır
- Notes replica
- Notes request yok
- Index service
- Index request yok
- Edge cache / policy
- Edge bu dalda yok
- Response browser’a ulaştı
Hazır response browser’a ulaşır. Diğer actor’lar bu request’i almamıştır; onların state’i değişmez.
- Browser
- 503 response alındı
- Gateway / balancer
- 503 response hazır
- Notes replica
- Notes request yok
- Index service
- Index request yok
- Edge cache / policy
- Edge bu dalda yok
- Caller unavailable sonucunu gördü
Browser response’u unavailable olarak sınıflandırır. Bu sonuç origin’in toparlandığı anlamına gelmez.
- Browser
- Unavailable görünür
- Gateway / balancer
- 503 response hazır
- Notes replica
- Notes request yok
- Index service
- Index request yok
- Edge cache / policy
- Edge bu dalda yok
Policy kapalı
- Public read hazır
Browser public read hazırlar. Edge cache ve policy henüz request’i görmemiştir.
- Browser
- Public read hazır
- Gateway / balancer
- Gateway request yok
- Notes replica
- Notes request yok
- Index service
- Index request yok
- Edge cache / policy
- Edge request yok
- Request edge’e ulaştı
Request edge’de alınır. Gateway, notes ve index’e forwarding henüz yapılmamıştır.
- Browser
- Public read hazır
- Gateway / balancer
- Gateway request yok
- Notes replica
- Notes request yok
- Index service
- Index request yok
- Edge cache / policy
- Public request alındı
- Maintenance policy block
Örnekteki maintenance koşulu block üretir. Request origin’e gitmeden 403 hazırlanır.
- Browser
- Public read hazır
- Gateway / balancer
- Gateway request yok
- Notes replica
- Notes request yok
- Index service
- Index request yok
- Edge cache / policy
- 403 block hazır
- Response browser’a ulaştı
Hazır response browser’a ulaşır. Diğer actor’lar bu request’i almamıştır; onların state’i değişmez.
- Browser
- 403 response alındı
- Gateway / balancer
- Gateway request yok
- Notes replica
- Notes request yok
- Index service
- Index request yok
- Edge cache / policy
- 403 block hazır
- Policy reddi sınıflandırıldı
Browser 403 yanıtını maintenance policy reddi olarak sınıflandırır. Request origin’e gitmemiştir; bu karardan private authorization kontrolünün doğru çalıştığı sonucu çıkmaz.
- Browser
- Policy error görünür
- Gateway / balancer
- Gateway request yok
- Notes replica
- Notes request yok
- Index service
- Index request yok
- Edge cache / policy
- 403 block hazır
ROLLER · STATE · VERİ AKIŞI
Service sınırı bir URL’den büyüktür
Microservices, her fonksiyona ayrı HTTP endpoint açmak değildir. Bir service belirli bir iş alanının contract, release ve veri sorumluluğunu taşır. Notes service note representation’ını, index service arama özetini yönetebilir. Bunlar farklı mantıksal sorumluluklardır; aynı makinede mi, farklı process veya bölgelerde mi çalıştıkları bundan anlaşılmaz. Bağımsız deployment bir mimari karardır; route sayısı bunu kanıtlamaz.
Service-to-service communication’da client rolünü başka bir service üstlenebilir. Notes, index verisini isterken o bağlantının client’ıdır; aldığı sonucu kendi response’una eklerken server rolünü korur. Synchronous çağrıda sonucu bekleyen bir bağımlılık oluşur. Messaging kullanıldığında ise teslim, tamamlanma ve retry ayrı sınırlar taşır. Bir service’te commit edilen state diğerinde de aynı anda commit edilmiş sayılmaz.
Normal sahne, gateway’in public read request’i alıp notes-b’ye mesaj hazırladığı noktada başlar. notes-a seçilebilir değildir; notes-b seçilir. Notes index’e gider, index Tea kategorisini üretir, yanıtlar gateway’e döner. Son adımda browser hâlâ bekler. Gateway’in response alması browser’ın da aldığı anlamına gelmez; sahnenin gösterdiği teslim sınırı burada biter.
Gateway, load balancer, CDN ve WAF farklı kararlar verir
API gateway bir public contract’ın arkasındaki service’e routing yapabilir; authentication, quota veya transformation da uygulayabilir. Load balancer seçilen hizmetin instance’ları arasında iş dağıtır. Layer 4 ve HTTP method/path bilgisiyle çalışan Layer 7 aynı görünürlüğe sahip değildir. Reverse proxy dışarıda server gibi görünürken içeride başka bağlantının client’ı olabilir. Her bağlantıda isteği kimin aldığı ve sonucu hangi resource owner’ın ürettiği ayrı izlenir.
CDN, cache kullanım koşulları uygunsa origin’e gitmeden representation döndürebilir. Public asset hit dalında originCalls=0 kalır. Bundan origin’in o anda çalıştığını veya başka business verisinin güncel olduğunu çıkaramayız. Freshness ve invalidation WEB-09.02 ve WEB-19.01’deki ayrımlara bağlıdır. Sahne edge cache ve gateway’i ayrı gösterir; bir ürün bu rolleri birleştirebilir.
WAF, request üzerinde yapılandırılmış policy uygular. Allow, block ve count farklıdır; count gözlemi isteği durdurmuş sayılmaz. Örnekte public read, maintenance policy koşulu nedeniyle 403 alır. Bu bir ürüne ait gerçek rule formatı değildir. WAF allow sonucu da note authorization kararının yerini almaz. Cache hit, origin failure veya policy block’u yalnız son status’a bakarak birbirinden ayıramayabiliriz.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Hazır instance yok
- Önce hangi service istendi?
Public note request’i bir service contract’ına yönlenebilir. Route’un tanınması, o service için şu anda seçilebilir bir instance bulunduğunu söylemez.
- Gateway kararı
- Public note route’u
- Service yolu
- Instance henüz seçilmedi
- Güven varsayımı
- Eligibility pending
- Seçilebilir küme boş
NoOrigin dalında eligible=[] verilmiş. Gateway bu snapshot’ta seçilebilir hiçbir instance görmüyor; listede olmayan bir instance adı üretemez.
- Gateway kararı
- eligible=[]
- Service yolu
- selected=null
- Güven varsayımı
- Seçilebilir hedef yok
- Forwarding yapılmadı
Forwarded=false. Resource’un service içinde başarısız işlendiği söylenmez; bu request service’e yönlendirilecek bir instance bulamamıştır.
- Gateway kararı
- eligible=[]
- Service yolu
- forwarded=false
- Güven varsayımı
- Hata routing sınırında
- 503 burada hazırlanır
NoOrigin.status=503, gateway’in bu dal için ürettiği HTTP sonucudur. Downstream notes veya index’in response verdiğine dair bir alan değildir.
- Gateway kararı
- status=503
- Service yolu
- selected=null / forwarded=false
- Güven varsayımı
- Yalnız gateway sonucu
- Health permission değildir
Başka dalda ready=true olan notes-b seçilebilir. Bu health girdisi kullanıcıya belirli bir note üzerinde permission vermez; availability ile authorization farklı şartlardır.
- Gateway kararı
- noOrigin: eligible=[]
- Service yolu
- Bu dalda forwarding yok
- Güven varsayımı
- Ready != object permission
- Hata owner’ını doğru bildir
Bu dal için bilinen sınır gateway’in instance seçimidir. Private permission, notes işleme sonucu veya browser receipt gözlenmeden bunlar hakkında başarı ya da hata uydurulmaz.
- Gateway kararı
- Gateway hedef seçemedi
- Service yolu
- forwarded=false
- Güven varsayımı
- Diğer sonuçlar gözlenmedi
Bakım kararı
- Normal public request’i ayır
PolicyClosed dalının target’ı /public/notes/tea. Request’in public olması, maintenance policy’nin onu mutlaka geçireceği anlamına gelmez.
- Gateway kararı
- target=/public/notes/tea
- Service yolu
- Forwarding henüz incelenmedi
- Güven varsayımı
- Policy kararı henüz yok
- Configured predicate kapalı
Bu örnekte maintenanceClosed=true açıkça verilmiş. Bu, uygulamanın seçtiği policy girdisidir; request’in saldırı olduğu sonucu değildir.
- Gateway kararı
- maintenanceClosed=true
- Service yolu
- Service işlenmedi
- Güven varsayımı
- Policy tek başına saldırı kanıtı değil
- Policy block kararı verdi
Action=block ve status=403. Karar bu katmanda üretilir; notes object owner’ın authorization kararı olarak yeniden adlandırılmaz.
- Gateway kararı
- action=block / status=403
- Service yolu
- Service işlenmedi
- Güven varsayımı
- Bakım policy’sinin sonucu
- Service’e forward edilmedi
Forwarded=false, notes service’e bu request için iş devredilmediğini gösterir. Policy block ile downstream error aynı olay değildir.
- Gateway kararı
- maintenance block
- Service yolu
- forwarded=false
- Güven varsayımı
- Bu dalda downstream sonuç yok
- Count ile block’u karıştırma
Configured count yalnız gözlem üretirken block request’i durdurabilir. Burada block verilmiştir; ürün etiketi veya bir sayaçtan başka action çıkarılmaz.
- Gateway kararı
- action=block
- Service yolu
- forwarded=false
- Güven varsayımı
- Bu sonucu configured action belirler
- Resource yetkisini ayrıca değerlendir
Policy’nin request’i geçirmesi halinde de service kendi object/action kararına ihtiyaç duyar. Bu public bakım örneği private authorization veya gerçek vendor WAF doğrulaması değildir.
- Gateway kararı
- Bakım policy’si gözlendi
- Service yolu
- Yalnız public route
- Güven varsayımı
- privateAuthorizationVerified=false
VARSAYIM · SINIR · KONTROL
Bir hop’un başarısı bütün akışın başarısı değildir
Gateway’in route bulması, seçilen replica’nın kullanılabilir response vereceğini veya index’in beklenen sonucu üreteceğini kanıtlamaz. Bu varsayım bir dependency hatasında eski ya da eksik veriyi tamamlanmış sonuç gibi sunabilir. Kararı hangi service verdi, caller hangi response’u gerçekten aldı? Normal sahnenin gateway’de bitmesi bu soruyu görünür kılar; browser’a teslim edilmemiş sonucu tamamlandı sayamayız.
Health bilgisi, belirli bir zamanda gözlenen seçilebilirliktir; işlem yetkisi veya sürekli availability değildir. Ready instance da error dönebilir. Seçilebilir instance listesi boşken gateway service’e hiç request göndermeden 503 hazırlar. Seçilmeyen instance için sahte forwarding kaydı üretmemek ve attempted ile received sonuçlarını ayırmak gerekir.
Intermediary kararı domain yetkisi vermez
Edge allow ve gateway route kararı domain authorization değildir. Private bir service’te caller identity, audience, operation ve object ownership güvenilir bağlamda değerlendirilir. Header veya internal görünen service adı tek başına identity kanıtı olmaz. TLS termination noktaları değişiyorsa her bağlantının peer trust ve confidentiality sınırı ayrıca incelenir.
CDN hit, tanımlı cache reuse koşulları altında sonuç üretir. WAF count’u block saymak veya block’un bütün access control sorunlarını çözdüğünü varsaymak kapsamı yanlış gösterir. Sentetik kayıtta source, policyResult, selectedReplica ve originCalls alanlarını birlikte oku. Bu alanlar bir vendor log formatı değil, kararın nerede verildiğini anlatan öğretim kaydıdır.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Gateway’de bitti
- Replica seçimini kayıttan oku
Replica seçimini yerel routing adapter’ı, originCalls ve birleşik category sonucunu aynı örneğin service kaydı üretir; JSON roundtrip yalnız bu alanları yeniden okur. Normal dalda notes-a ready=false ve notes-b ready=true. Seçilen instance notes-b’dir; bu snapshot başka zamanın health bilgisini söylemez.
- Edge / gateway gözlemi
- selected=notes-b
- Service sonucu
- Composed result henüz incelenmedi
- Teslim kanıtı
- Browser’ın aldığı sonuç bilinmiyor
- Index sonucu notes için geldi
IndexResponse.category=Tea, notes service’in aldığı category representation’ıdır. Index sonucunun gelmesi gateway’e veya browser’a bütün response’un ulaştığını söylemez.
- Edge / gateway gözlemi
- selected=notes-b
- Service sonucu
- index category=Tea
- Teslim kanıtı
- Diğer owner’ların aldığı sonuç ayrı
- Notes sonucu iki alanı birleştirdi
Normal response, title=Tea note ile category=Tea alanlarını birlikte taşır. Composition için gerekli index sonucu notes tarafında alınmış olmalıdır.
- Edge / gateway gözlemi
- notes-b source
- Service sonucu
- title=Tea note / category=Tea
- Teslim kanıtı
- Birleştirilmiş sonuç mevcut
- Kaydın bitiş noktası gateway
StopsAt alanı gateway received result der. Bu dalın gözlenen tamamlanması gateway’in service sonucunu almasıdır; browser delivery açıkça gösterilmez.
- Edge / gateway gözlemi
- Gateway sonucu aldı
- Service sonucu
- Birleştirilmiş title / category
- Teslim kanıtı
- Browser’a teslim gösterilmiyor
- Gateway receipt’i browser’a taşıma
Browser’ın yanıtı aldığına dair ayrı bir gözlem olmadan browser status veya UI sonucu belirlenmez. Gateway’in bildiği sonucu başka owner’ın bilgisi gibi yazamazsın.
- Edge / gateway gözlemi
- Gateway sonucu gözlendi
- Service sonucu
- Service composition gözlendi
- Teslim kanıtı
- Browser status / UI sonucu bilinmiyor
- Eksik hop için aynı request’i izle
Teslimi tamamlamak için aynı request’in browser receipt ve consumer sonucunu incelersin. Başka request’in 200 kaydı bu yolun eksik hop’unu tamamlamaz.
- Edge / gateway gözlemi
- Aynı request ile eşleştirme gerekir
- Service sonucu
- Gateway tamamlanması gözlendi
- Teslim kanıtı
- Browser gözlemi hâlâ gerekir
Origin’e gitmedi
- Önce cache scope’unu belirle
Replica seçimini yerel routing adapter’ı, originCalls ve birleşik category sonucunu aynı örneğin service kaydı üretir; JSON roundtrip yalnız bu alanları yeniden okur. CacheHit dalı public-cover-v1 key’i için Tea cover saklar. Bu kayıt public cover representation’ına aittir; kişisel not veya bütün endpoint’ler hakkında sonuç vermez.
- Edge / gateway gözlemi
- key=public-cover-v1
- Service sonucu
- Origin henüz incelenmedi
- Teslim kanıtı
- Kapsam: public cover
- Seçilen freshness koşulu geçti
Stored=10, now=12 ve ttl=5. Bu örnekte entry yaşı 2’dir; seçilen kullanım penceresinin içindedir.
- Edge / gateway gözlemi
- age=2 / ttl=5
- Service sonucu
- Origin henüz incelenmedi
- Teslim kanıtı
- Seçilen cache reuse koşulu geçti
- Body’nin owner’ı edge-cache
Source=edge-cache ve body=Tea cover. Yanıtın geldiği owner bu kayıtta edge’dir; body metninin aynı olması origin çağrısı yapıldığını göstermez.
- Edge / gateway gözlemi
- source=edge-cache / Tea cover
- Service sonucu
- Origin çağrısı ayrıca incelenir
- Teslim kanıtı
- Body equality != source equality
- Origin call sayısı sıfır
OriginCalls=0, bu dalda origin’e gidilmediğinin ayrı gözlemidir. Origin’in şu anda sağlıklı olduğu veya data’nın en yeni revision olduğu bu sayıdan çıkmaz.
- Edge / gateway gözlemi
- Public cover tekrar kullanıldı
- Service sonucu
- originCalls=0
- Teslim kanıtı
- Origin health / son revision bilinmiyor
- Cache hit başka owner’ın availability’sini ölçmez
Cache hit sırasında origin devreye girmediğinden onun canlı durumu ayrıca ölçülmelidir. Buradaki success yalnız seçilen stored representation’ın kullanılmasıyla ilgilidir.
- Edge / gateway gözlemi
- source=edge-cache
- Service sonucu
- originCalls=0
- Teslim kanıtı
- Cache availability != origin availability
- Kapsamı response kaynağıyla raporla
Rapor bu public key’in edge’den döndüğünü, seçilen freshness koşulunu ve sıfır origin call’ı içerir. Private permission veya origin’in güncel business sonucunu eklemez.
- Edge / gateway gözlemi
- public-cover-v1 / edge-cache
- Service sonucu
- originCalls=0
- Teslim kanıtı
- Yalnız gözlenen reuse doğrulandı
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Kutunun adından önce verdiği kararı yaz
Replica seçimini yerel routing adapter’ı, originCalls ve birleşik category sonucunu aynı örneğin service kaydı üretir; JSON roundtrip yalnız bu alanları yeniden okur. Edge hangi representation’ı yeniden kullanabilir, gateway hangi service contract’ını seçer, load balancer hangi replica’yı uygun bulur, notes hangi veriyi yönetir? Aynı appliance birkaç rol taşısa da kararların sorumluluğu ayrı kalır. Public read için method, target ve service amacı görünür olsun. Request tracing identifier ilişkilendirme içindir; secret veya yetki anahtarı değildir.
Örneğin routing adapter’ı ilk seçilebilir instance’ı alır; bu herhangi bir vendor’ın default algoritması değildir. notes-a=false ve notes-b=true girdisinde b seçilir. Liste boşsa origin’e gidilmez. Index response’u notes’a ulaşmadan birleşik sonuç hazırlanmaz. Gerçek sistemde version değişimleri, timeout budget ve correlation ayrıca tasarlanır.
Gateway routing configuration’ı notes operation’ını belirlenmiş backend contract’ına bağlasın; uygun replica seçilmesi resource permission üretmez. Public read daha sonra protected operation’a dönüşürse service kendi endpoint’inde güncel actor, action ve object kararını vermelidir; gateway veya WAF’ın kabulü bu kararın yerine geçmez. Böyle bir implementation testinde routing kabulü ile service permission reddini ayrı sonuçlar olarak karşılaştır. Bu dersin public-note fixture’ı authentication çalıştırmaz; yalnız origin’e gidilmeyen dalda forwarding olmadığını doğrular.
Cache, policy ve routing sonuçlarını ayrı doğrula
Cache-hit dalında key ve freshness koşulunu; maintenance dalında block kararını; origin-unavailable dalında forwarding yapılmadığını incele. Bunlar aynı hatanın üç görünümü değildir. Sentetik kayıt seçilen replica, origin call sayısı ve category sonucunu ayrı gösterir. Yerel modelin sonucu bir CDN veya WAF ürününün çalıştırıldığı anlamına gelmez.
Gerçek bir sistemde CDN policy, health bilgisinin yaşı, WAF action, gateway routing ve service-side access control için ayrı kanıt gerekir. XML selector, no-eligible kararıyla çelişen forwarding kaydını arar. Event eksikken sıfır match görülmesi kontrolün doğru çalıştığını kanıtlamaz. Sahne de alıcının durumunu ancak mesaj ulaştığında değiştirir.
ŞİMDİ VAKAYA UYGULA
Gateway sonucu, edge cache hit ve origin seçimi hangi owner’ın bilgisidir?
Atlas gateway’i public tea notu için notes service ile index service sonuçlarını birleştirir. Başka bir dalda edge, saklanmış Tea cover yanıtını origin’e gitmeden üretir. Aynı mimaride farklı request’lerin farklı owner’larda bitmesi mümkündür.
Vakadaki response’a hangi component’ler katkıda bulunuyor? UI, service, platform ve dış provider sonuçlarının hangi hop’ta tamamlandığını ayrı göster.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Service ve edge kararları
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"roles": {
"gateway": "service contract routing",
"balancer": "first eligible instance in supplied list",
"edge": "public cache/policy roles combined for diagram",
"notes": "note representation",
"index": "category representation"
},
"normal": {
"request": {
"method": "GET",
"target": "/public/notes/tea"
},
"eligible": [
{
"id": "notes-a",
"ready": false
},
{
"id": "notes-b",
"ready": true
}
],
"selected": "notes-b",
"indexRequest": {
"id": "tea"
},
"indexResponse": {
"category": "Tea"
},
"response": {
"id": "tea",
"title": "Tea note",
"category": "Tea"
},
"stopsAt": "gateway received result; browser delivery not shown"
},
"cacheHit": {
"key": "public-cover-v1",
"stored": 10,
"now": 12,
"ttl": 5,
"body": "Tea cover",
"source": "edge-cache",
"originCalls": 0
},
"noOrigin": {
"eligible": [],
"selected": null,
"forwarded": false,
"status": 503
},
"policyClosed": {
"ordinaryTarget": "/public/notes/tea",
"predicate": "supplied maintenanceClosed=true",
"action": "block",
"status": 403,
"forwarded": false
},
"limits": {
"networkExecuted": false,
"vendorGatewayExecuted": false,
"realWafExecuted": false,
"realCdnExecuted": false,
"privateAuthorizationVerified": false
},
"selector": {
"language": "XPath",
"xml": "<audit><route eligible=\"0\" forwarded=\"false\"/></audit>",
"xpath": "count(/audit/route[@eligible='0' and @forwarded='true'])",
"expected": 0,
"positiveFixtureXml": "<audit><route eligible=\"0\" forwarded=\"true\"/></audit>",
"positiveExpected": 1,
"scope": "Authored inert decision ledger only; these are teaching fields, not product log or API field names.",
"missingFieldBehavior": "A missing observation is insufficient evidence; zero matches alone proves no runtime control."
}
}- normal
- Notes ile index sonucu birleştirilip gateway’e ulaşır. Browser’ın aldığı sonuç bu kayıtta gösterilmez.
- cacheHit/noOrigin
- Edge cache reuse ile hazır instance seçimi farklı kararlardır. Cache hit sırasında origin’e hiç gidilmemiş olabilir.
- policyClosed/roles
- Maintenance policy ile service routing ayrı rollerdir. Bu public örnekte private object permission doğrulanmaz.
- selector/limits
- Öğretim kaydında seçilebilir instance yokken forwarding yapılması aranır. Gerçek CDN, gateway veya WAF sonucu değildir.
Bu örnek public route, cache ve maintenance policy kararlarını ayırır. Remote hop’lar bilginin aktarımını gösterir; gateway, WAF veya CDN trafiğinin capture’ı değildir. Bir public response, private resource authorization’ın doğru çalıştığını kanıtlamaz.
İki yanlış kanı
Gateway, load balancer, CDN ve WAF aynı kararı verir.
Service routing, instance selection, representation reuse ve request policy ayrı ownership taşır.
Gateway’e response gelmesi veya CDN hit bütün origin akışını tamamlar.
Gateway arrival browser arrival değildir; cache hit origin call veya origin health kanıtı da değildir.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
Eligible instance listesi boş. Balancer bu request’i nereye forward eder?
- Listede olmayan bir instance’ı sağlıklı varsayıp ona gönderir.
- Hiçbir yere. forwarded=false ve status=503.
Gerekçeli cevabı oku
Hiçbir yere. forwarded=false ve status=503. — Bu örnekte uygun instance bulunmadığında forwarding durur. Boş liste, yeni bir node’a güvenmek veya fan-out yapmak için izin değildir.
Gateway response aldı. Browser’ın Tea note başlığını öğrendiği kanıtlanmış mıdır?
Dersten seçilen artifact alanları; öğretim örneği
- normal.selected
- notes-b
- normal.response
- {"id":"tea","title":"Tea note","category":"Tea"}
- normal.stopsAt
- gateway received result; browser delivery not shown
- Hayır. İz, gateway’in response almasıyla bitiyor.
- Evet. Upstream response oluşunca bütün client’lar sonucu bilir.
Gerekçeli cevabı oku
Hayır. İz, gateway’in response almasıyla bitiyor. — Gateway representation’ı almıştır. Bu izde browser’a delivery, body okuma veya view update gözlemi yoktur.
Edge cache hit için originCalls=0; kapalı policy için 403 ve forwarding yok. Bunlar neden private resource authorization kanıtı değildir?
Gerekçeli cevabı oku
Cache hit, örnekteki public cover body’sini origin’e başvurmadan döndürür. MaintenanceClosed ise önceden tanımlanan bakım policy’siyle forwarding’i yerelde durdurur. İki sonuç da private resource için subject/object permission kontrolünü doğrulamaz. Gerçek WAF, CDN, vendor gateway veya network işlemleri bu örnekte çalıştırılmamıştır.
□ Edge cache ve bakım kararını private resource authorization saymadım.
□ Çizilen topology’yi gerçek vendor deployment’ı için kanıt saymadım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- Microsoft Learn — Microservices architecture styleWhat are microservices? · Components · Challenges · Best practices
- Microsoft Learn — Gateway Routing patternSolution · Multiple instances of the same service · Issues and considerations
- Microsoft Learn — Load balancing optionsOpening paragraphs: distribution across computing resources · Azure load balancing services
- RFC 9110 — HTTP Semantics3.6. Origin Server · 3.7. Intermediaries · 3.8. Caches · 15.6.3. 502 Bad Gateway · 15.6.4. 503 Service Unavailable · 15.6.5. 504 Gateway Timeout
- Amazon CloudFront — How CloudFront delivers contentHow CloudFront delivers content to your users · How CloudFront works with regional edge caches
- AWS WAF — What is AWS WAF?What is AWS WAF?
- OWASP — REST Security Cheat SheetHTTPS · Access Control · Input validation · Error handling