API GATEWAY & MERKEZİ TRAFİK YÖNETİMİ ·GİRİŞ

Merkezi Giriş,
Kontrollü Trafik
API Gateway Platformu

Onlarca mikroserviste tekrar eden token doğrulama, yetkilendirme, kota, loglama ve dönüşüm işlerini tek bir politika noktasında toplayan; bunu yaparken o noktayı sistemin en kırılgan yeri hâline getirmeyen mimari.

Spring Cloud Gateway OAuth2 / JWT / mTLS Redis + Lua Resilience4j OpenTelemetry Prometheus / Grafana Kubernetes Gateway API
46 slayt · 4 seviye 20+ etkileşimli anlatım 14 ürün karşılaştırması Custom gateway rehberi
Nasıl okunmalı

Dört aşamada, kolaydan zora

Bu sunum bir seviye seçtirmez; sizi seviyeler boyunca yürütür. Her aşama bir öncekinin üstüne biner: önce ortak dili kurarız, sonra tasarım kararlarını veririz, ardından üretim gerçekleriyle yüzleşiriz ve en sonunda kendi gateway'imizi yazmayı tartışırız. Solda gördüğünüz renkli şerit ve üstteki etiket, her an hangi aşamada olduğunuzu söyler.

1 · TEMELKavramlar ve ortak dil. Gateway nedir, komşularından farkı ne, bir istek içinden nasıl geçer.
2 · UYGULAMATasarım kararları: rota, keşif, kimlik, kota, dönüşüm, izlenebilirlik, sürüm.
3 · İLERİÜretim gerçekleri: dayanıklılık, aşırı yük, erişilebilirlik, performans, gözlem, güvenlik.
4 · UZMANÜrün seçimi, kendi gateway'ini yazmak ve piyasada olmayanı eklemek.

Yeni başlıyorsanız

Aşama 1 tek başına konunun omurgasını verir. Animasyonlu anlatımları izleyin, kod bloklarını atlayın — aşama 2'nin sonunda zaten hazır olacaksınız.

Orta seviyedeyseniz

Asıl kazanç aşama 2 ve 3'te: karar tabloları, yapılandırma örnekleri ve "hangi politika hangi rotaya" eşlemeleri. Aşama 1'i hızlı geçin.

İleri seviyedeyseniz

Aşama 3 ve 4 doğrudan size: uyarlanabilir eşzamanlılık, hücresel dağıtım, eklenti mimarileri, custom gateway iç tasarımı ve ürünlerde bulunmayan farklılaştırıcılar.

Gezinme ile ilerleyin · O tüm slaytları açar · R bulunduğunuz slaydın animasyonunu tekrar oynatır · F tam ekran.
Vaka Çalışması · Problem

Aynı işi kırk kez yapmanın maliyeti

Vaka metnindeki tablo tanıdık: mikroservislere doğrudan erişilebiliyor ve her servis token doğrulama, yetkilendirme, rate limit, loglama, correlation ID, istek/yanıt dönüşümü, servis adresi çözümleme ve versiyon kontrolünü ayrı ayrı yapıyor. Sorun bu işlerin yapılması değil — her yerde tekrar edilmesi.

servis tekrarlanan çapraz kesen görev
Ölçek
0
mikroservis
Kesişen ihtiyaç
0
çapraz kesen görev
Sonuç
0
ayrı implementasyon noktası
Tek güvenlik yaması
0
ayrı deploy, ayrı test, ayrı takvim
01

Tutarsızlık yüzeyi

JWT doğrulamayı kırk yerde yazarsanız kırk farklı doğru olur: biri aud bakmaz, biri alg allowlist'i koymaz, biri anahtar rotasyonunu kaçırır.

02

Değişim maliyeti

"Bugünden itibaren tüm B2B trafiğinde mTLS zorunlu" cümlesi kırk takvim, kırk sprint demektir. Politika hızınız en yavaş takımın hızına eşitlenir.

03

Görünürlük yok

Correlation ID her serviste farklı isimle üretiliyorsa uçtan uca akış birleştirilemez. Olay müdahalesinde kaybedilen dakikalar buradan çıkar.

04

İstemci kırılganlığı

İstemci doğrudan on servise konuşuyorsa servis bölünmesi istemci sürümü gerektirir. Mobilde bu, aylarca eski sürüm desteklemek demektir.

Çözüm cümlesi: Bu görevlerin ortak özelliği iş mantığı olmamaları. Hiçbiri "siparişin toplamı nasıl hesaplanır" sorusuna cevap vermez; hepsi "bu istek geçmeli mi, nasıl geçmeli, nasıl kaydedilmeli" sorusuna cevap verir. İş mantığı olmayan, her istekte tekrarlanan ve tekdüze olması gereken işler merkezî bir politika noktasına taşınabilir. O noktanın adı API Gateway'dir.
01
Problemi gördükşimdi ortak dili kuruyoruz
Aşama 1 · Temel

Kavramlar ve ortak dil

Bu aşamayı bitiren biri, bir mimari toplantısında geçen her cümleyi anlar. Ürün seçmez, yapılandırma yazmaz — ne olduğunu ve neyin neye benzemediğini bilir.

API Gateway tam olarak nedir, ne yapar, ne yapmaz
Reverse proxy, load balancer ve service mesh'ten farkı
Bir isteğin gateway içindeki 16 duraklı yolculuğu
Kuzey-güney / doğu-batı trafiği, BFF ve GraphQL'in yeri
Ortak dil · on iki kavram Kavrama tıklayın · otomatik oynuyor

Sunumun geri kalanında sürekli geçecek terimlerin tamamı burada. Her kavram, şemada tam olarak nereye ait olduğuyla birlikte gösterilir — çünkü bu terimlerin çoğu yanlış yerde kullanıldığı için tartışmalar tıkanır.

Kontrol düzlemi config üretir ve dağıtır Mobil Web Partner VERİ DÜZLEMİ · GATEWAY Rota · predicate + filtre + hedef Filtre zinciri · pre / post Politika · tekdüze kural tüketici kimliği çözülür sipariş ödeme katalog doğu-batı
Tanım Temel Diyagramdaki bölümlere tıklayın

Protokol farkında, politika uygulayan, tek giriş noktası

API Gateway, istemciler ile arka uç servisleri arasında konumlanan, her isteği anlayan (yalnızca taşımayan) ve üzerinde politika uygulayan bir ters vekildir. Sorumlulukları dört gruba ayrılır; diyagramda her grup ayrı bir katman olarak gösterilmiştir.

mobil web partner TÜKETİCİLER API GATEWAY Güvenlik TLS · kimlik · yetki Trafik yönetimi kota · rota · ağırlık Dayanıklılık timeout · retry · breaker Gözlemlenebilirlik log · metrik · trace sipariş ödeme katalog SERVİSLER

Yapar

  • Rota eşleme, servis keşfi, yük dağıtımı
  • TLS sonlandırma, mTLS doğrulama
  • Token doğrulama, kaba taneli yetki
  • Rate limit, kota, yük atma, öncelik
  • Header/path dönüşümü, protokol köprüleme
  • Correlation ID, trace, erişim logu
  • Timeout, retry, circuit breaker, fallback
  • Şema doğrulama, CORS, güvenlik header'ları
  • Canary, ağırlıklı yönlendirme, sürüm çözümleme

Yapmaz — yapmamalı

  • İş kuralı hesaplamak (indirim, skor, fiyat)
  • Nesne düzeyi yetki: "bu kayıt bu kullanıcının mı?"
  • Veritabanına doğrudan erişmek
  • Servisler arası çok adımlı orkestrasyon / saga
  • Kalıcı iş durumu tutmak
  • Ekiplerin ortak "yardımcı kod" deposuna dönüşmek

Bu listedeki her madde gateway'i yeniden bir monolite dönüştürür.

Veri düzlemi (data plane)

Her isteği karşılar, politikayı uygular, upstream'e taşır. İstek yolundadır, trafikle ölçeklenir. Düşerse trafik durur — tam karartma. Örnek: Envoy, Kong node, SCG uygulaması.

Kontrol düzlemi (control plane)

Yapılandırmayı üretir, doğrular ve veri düzlemine dağıtır. İstek yolunun dışındadır. Düşerse trafik akmaya devam etmeli — fail static. Örnek: Istiod, Kong CP, Gateway API controller.

Analoji · havalimanı terminali. Pasaport kontrolü kimlik doğrulamaya, vize yetkilendirmeye, bagaj tartısı gövde limitine, sıraya alma rate limit'e, kapı yönlendirme route eşlemesine ve uçuş kaydı log/trace'e karşılık gelir. Analojinin kritik noktası şudur: terminal yolcunun nereye niçin gittiğini bilmez. Gateway de aynı biçimde iş mantığına karışmaz.
Altın kural: Veri düzlemi kontrol düzlemine istek anında bağımlı olmamalıdır. Config'i önbelleğe alır; kontrol düzlemi erişilemezse son bilinen yapılandırmayla çalışır. Bu kuralı ihlal eden her mimaride kontrol düzlemi kesintisi doğrudan üretim kesintisine dönüşür.
Ayrım Temel Bar veya kart tıklanınca öne çıkar

Dördü de araya girer — farkları niyetlerinde

Aradaki fark yeteneklerde değil, niyette ve istek hakkında sahip olunan bilgi derinliğindedir. 2026 itibarıyla sınırlar bulanıklaşmış durumda — Envoy dördünü de yapabilir — ancak mimari diyagramda bu ayrımı korumak, doğru düşünmenin göstergesidir.

İstek hakkında ne kadar şey biliyor?
paket / bağlantı HTTP semantiği API semantiği servis kimliği
BoyutLoad BalancerReverse ProxyAPI GatewayService Mesh
Birincil niyetKapasite ve erişilebilirlikGüvenlik ve performansPolitika ve API yönetimiServisler arası güvenlik
KatmanL4 (bazen L7)L7L7 + API semantiğiL4+L7, her pod
Ne bilirBağlantı, port, sağlıkYol, header, TLSAPI, tüketici, kota, sürüm, şemaServis kimliği, çağrı grafiği
Trafik yönüKuzey-güneyKuzey-güneyKuzey-güneyDoğu-batı
Kimlik kavramıYokZayıfTüketici / kullanıcı / kurumServis (SPIFFE, mTLS)
Tipik ürünNLB · HAProxy L4 · IPVSNGINX · HAProxy · CaddyKong · APISIX · SCG · ApigeeIstio · Linkerd · Cilium
Yapılandırma sahibiAğ ekibiPlatform ekibiAPI ekibi + ürün ekipleriPlatform ekibi

Load Balancer

Işıkları açık tutar. Hacme odaklıdır: paketleri A'dan B'ye verimli taşır.

Reverse Proxy

Kötüleri dışarıda, veriyi hızlı tutar. TLS, önbellek, temel filtreleme.

API Gateway

Trafiğin iş kurallarını yönetir. İçeriğe bakar: gövde, header, token, kota, sürüm.

Service Mesh

Servisler arasını yönetir. mTLS, retry, gözlemlenebilirlik — uygulama kodu değişmeden.

2026 notu · sınırlar eriyor. Kubernetes Gateway API ingress ile mesh'i tek modelde birleştiriyor (GAMMA girişimi doğu-batıyı aynı HTTPRoute ile tanımlıyor). Cilium eBPF ile L3/L4'ü çekirdeğe indiriyor; Istio ambient modu sidecar'ı kaldırıp çift atlama cezasını yok ediyor. Sonuç: soru "hangi kutu" değil, "hangi kontrol düzlemi ve hangi persona modeli" hâline geliyor.
Anatomi · canlı Temel

Gateway'in tamamı tek bir kavramdır: filtre zinciri

İstek zincirin içinden ileri doğru (pre) geçer, upstream'e gider, yanıt aynı zincirden geri doğru (post) döner. Aşağıdaki sahnede gerçek istekler zincirden geçiyor; bazıları kimlik veya kota bandında kesiliyor ve arka uca hiç ulaşmıyor.

zincire giren istek arka uca ulaşan istek zincirde kesilen istek
KURAL 1

Ucuz olan önce

Gövde boyutu, header sayısı ve rota eşleşmesi gibi maliyetsiz kontroller; JWT imzası veya Redis çağrısı gibi pahalı işlemlerden önce gelmeli. Aksi hâlde geçersiz istekler size CPU'ya mal olur — doğrudan DoS yüzeyi oluşturur.

KURAL 2

Kimlik, kotadan önce

Rate limit anahtarı kullanıcı/kurum ise kimlik çözülmeden kota uygulanamaz. Ama anonim trafiğe karşı IP bazlı kaba bir limit kimlikten önce durmalı; aksi hâlde kimlik doğrulama ucu maliyetsiz bir DoS hedefine dönüşür.

KURAL 3

Temizlik, her şeyden önce

İstemciden gelen X-User-Id, X-Internal-*, X-Forwarded-For zincirin en başında silinmeli. Bu tek satır, kimlik sahteciliğinin en yaygın yolunu kapatır.

KURAL 4

Simetri kuralı

En yüksek öncelikli filtre pre'de ilk, post'ta son çalışır. Bu yüzden korelasyon ve metrik filtreleri en dışta olmalı ki her şeyi — hataları dâhil — ölçebilsinler.

Dört kuralın sonucu · doğru sıralanmış zincir Adıma tıklayın veya oklarla ilerleyin
01 / 14 pre aşaması

Kurallar tek tek doğru görünür; asıl değer birlikte uygulandıklarında ortaya çıkar. Aşağıdaki zincir bu dört kuralın sonucudur: ucuz kontroller solda, kimlik ortada, pahalı işler kimlikten sonra, ölçüm en dışta. Paket soldan sağa ilerlerken her durakta neden orada olduğu gösterilir.

Zincir · gezilebilir Temel

Her durakta ne oluyor, neden, neyi kaçırırsanız ne olur?

Bu 16 durak, sunumun geri kalanının haritasıdır — sonraki her bölüm bunlardan birini derinleştirir. Aşağıdaki hat, bir metro hattı gibi okunur: soldan sağa duraklar, üstte pre aşaması, sağ uçta arka uca çıkış, altta post dönüşü. Bir durağa tıklayın veya hattı baştan sona oynatın.

PRE · istek yolu ROUTE · arka uca çıkış POST · yanıt dönüşü 01 / 16
Konumlandırma · katmanlı harita Temel Modları değiştirin

Gateway nerede durur, komşuları nerede?

Terimler diyagramın yönünden gelir: istemciler yukarıda (kuzey), veri aşağıda (güney). Gateway kuzey-güney trafiğin sahibidir; servislerin birbirine yaptığı yatay çağrılar doğu-batı trafiğidir ve mesh'in alanıdır. BFF ile GraphQL router gateway'in arkasında, ayrı bir katman olarak yaşar — yerine değil.

KUZEY → GÜNEY BATI ←→ DOĞU KUZEY · DIŞ DÜNYA MobilWebPartnerIoT EDGE GATEWAY kimlik · kota · rota · dayanıklılık · izleme — iş mantığı YOK tek politika noktası SUNUM KATMANI · İSTEMCİYE ÖZEL mobil-bffgörünüm üretimi · veri birleştirmeweb-bffgörünüm üretimi · veri birleştirmefederation routertek grafik · çok subgraph ÜRÜN KATMANI · YENİDEN KULLANILABİLİR sipariş-apiözelliğe özgü, çok tüketiciliödeme-apiözelliğe özgü, çok tüketicilikatalog-apiözelliğe özgü, çok tüketicili GÜNEY · ALAN SERVİSLERİ VE VERİ stokfiyatkullanıcıbildirimkargo servis kimliği · mTLS · retry · gözlem
kuzey-güney · gateway'in alanı iç yönlendirme doğu-batı · mesh'in alanı

Gateway

Bütün istemciler aynı şeyi istiyorsa doğru seçim. Mobil küçük payload, web tam detay isteyince gateway'de uzlaşma başlar ve endpoint şişer.

BFF

İstemci deneyimi başına ayrı, o ekibin sahip olduğu ince bir servis. Gateway'in arkasında durur. Uber'in "Presentation Layer"ı tam olarak budur.

GraphQL Federation

Veri modeli yoğun biçimde bağlıysa ve ön uca özerklik vermek istiyorsanız. Router yine gateway'in arkasındadır; kimlik, kota ve TLS hâlâ gateway'in işidir.

Doğru cümle: Bunlar birbirinin alternatifi değil, katmanlarıdır — Edge Gateway → BFF / Federation Router → Ürün servisleri → Alan servisleri. Uber tam olarak bu dört katmanı üçüncü nesil mimarisinde kurumsallaştırdı ve kenar katmanında iş mantığını yasakladı.
02
Ortak dili kurdukşimdi tasarım kararlarını veriyoruz
Aşama 2 · Uygulama

Tasarım kararları ve yapılandırma

Artık "nedir" değil "nasıl kurulur" sorusundayız. Bu aşamayı bitiren biri gerçek bir gateway'i yapılandırabilir: rotayı yazar, kimliği bağlar, kotayı kurar, izlenebilirliği açar.

Route modeli, servis keşfi ve iç/dış rota ayrımı
JWT anatomisi, Phantom Token deseni, yetki sınırı
Rate limit algoritmaları — canlı simülatörle
Header dönüşümü, correlation ID, W3C trace context
Sürüm yönetimi ve emeklilik protokolü
Yönlendirme Uygulama

Her gateway aynı üçlüye indirgenir

Ne zaman eşleşir (predicate) · ne yapılır (filter) · nereye gider (uri). İsimler ürüne göre değişir, kavram değişmez.

KavramSpring Cloud GWEnvoyK8s Gateway API
KoşulPredicateRoute matchrules.matches
DavranışGatewayFilterHTTP filterfilters
Hedefuri: lb://ClusterbackendRefs
AğırlıkWeight=g,nweighted_clustersweight
PredicateÖrnekKullanım
Path/api/v1/siparis/**Ana yönlendirme ekseni
MethodGET,POSTOkuma/yazma ayrı politika
HeaderX-Api-Version, v2Header tabanlı sürüm
Host**.partner.kurum.comÇok kiracılı ayrım
Cookiedeney, v2Yapışkan canary
Weightkatalog, 95Ağırlıklı yönlendirme
Between2026-08-01T…Kampanya / planlı sunset
application.yml Spring Cloud Gateway 4.2+
spring.cloud.gateway.server.webflux:
  # Tüm rotalara uygulanan varsayılanlar
  default-filters:
    - DedupeResponseHeader=Access-Control-Allow-Origin, RETAIN_FIRST
    - RemoveResponseHeader=Server
    - RemoveRequestHeader=X-Internal-Auth   # taklidi kes
    - SecureHeaders
  routes:
    # ── Dış rota: sıkı kota, devre kesici, küçük gövde ──
    - id: siparis-public-v1
      uri: lb://siparis-servisi          # servis keşfi
      predicates:
        - Path=/api/v1/siparis/**
        - Method=GET,POST,PUT
      filters:
        - StripPrefix=2                    # /api/v1/x → /x
        - name: RequestSize
          args: { maxSize: 1MB }
        - name: RequestRateLimiter
          args:
            key-resolver: "#{@kurumKeyResolver}"
            redis-rate-limiter.replenishRate: 200
            redis-rate-limiter.burstCapacity: 400
        - name: CircuitBreaker
          args: { name: siparisCB,
                  fallbackUri: forward:/fallback/siparis }
        - name: Retry
          args: { retries: 2, methods: GET,
                  series: SERVER_ERROR }   # yalnız idempotent

    # ── Canary: trafiğin %5'i v2'ye ──
    - id: katalog-v1
      uri: lb://katalog-servisi
      predicates: [ Path=/api/v1/katalog/**, Weight=katalog, 95 ]
    - id: katalog-v2-canary
      uri: lb://katalog-servisi-v2
      predicates: [ Path=/api/v1/katalog/**, Weight=katalog, 5 ]
En yaygın route hatası · gölgeleme. Rotalar tanımlanma sırasına göre değerlendirilir ve ilk eşleşen kazanır. /api/** rotasını /api/v1/odeme/** rotasından önce yazarsanız ödeme rotasındaki sıkı politikalar hiç çalışmaz — ve bunu üretimde bir güvenlik testinde öğrenirsiniz. Kural: spesifikten genele sırala, order alanını açıkça ver, rota eşleşmesini sözleşme testiyle doğrula.
Keşif Uygulama Algoritmaları canlı izleyin

Bu isim hangi IP'lere karşılık geliyor?

Rota lb://siparis-servisi diyor. O listeyi kim güncelliyor, bir örnek çöktüğünde gateway bunu ne kadar sürede öğreniyor? Gözlemlenen "kararsızlığın" büyük kısmı bu üç sorunun cevabında saklıdır.

YaklaşımKayıt kaynağıGüncelleme gecikmesiGüçlü yanıZayıf yanı
Statik URIConfig dosyasıDeploy süresiBasit, öngörülebilirÖlçeklenmez
DNSA / SRV kaydıTTL kadarDilden bağımsızTTL cache tuzağı, ağırlık taşımaz
EurekaServis kendini kaydeder~30 snSpring ile sorunsuzSpring dışında zayıf
ConsulAgent + sağlık kontrolüSaniyelerÇoklu DC, VM+K8s karışıkİşletme yükü
Kubernetes DNSAPI server / EndpointSliceSaniyelerAynı RBAC, ek bileşen yokKüme dışına çıkmaz
etcd + watchKontrol düzlemiMilisaniyelerAnlık yayılım, DB yoketcd operasyonu
xDS (Envoy)gRPC akışıMilisaniyelerEndüstri standardıKontrol düzlemi gerekir

Yük dağıtım algoritmaları — canlı karşılaştırma

Dört algoritma, aynı heterojen iş yükü 3 numaralı örnek yavaş
tamamlanan istek işlemde kuyrukta bekleyen

Round robin

İstekleri sırayla dağıtır. İstek maliyetleri birbirine yakınsa yeterlidir; aksi hâlde yavaş örneği de hızlı örnek kadar besler ve kuyruk orada birikir.

Least request (P2C)

En az aktif isteği olan örneği seçer. Envoy'un "iki rastgele aday arasından azını seç" varyantı, tam sıralama maliyeti olmadan aynı sonucu üretir — üretim varsayılanı budur.

Tutarlı hash

Aynı anahtar her zaman aynı örneğe yönlendirilir. Önbellek isabetini artırır ve yapışkan canary sağlar; örnek eklendiğinde yeniden dağıtım en aza iner.

Zone-aware

Aynı erişilebilirlik bölgesindeki örnekleri tercih eder; bölgeler arası veri transferi ücretini ve gecikmeyi düşürür, bölge zayıfladığında otomatik olarak taşar.

Outlier detection — pasif sağlık kontrolü. Aktif yoklama (/health) yavaştır ve gerçek trafiği temsil etmez. Pasif tespit gerçek istek sonuçlarına bakar: bir örnek arka arkaya 5xx üretirse havuzdan geçici çıkarılır, süre dolunca deneme amaçlı geri alınır. Circuit breaker'ın örnek düzeyindeki kardeşidir — ve genelde ondan daha çok işe yarar.
Yayılım gecikmesi bir güvenlik parametresidir. Kong yapılandırmayı veritabanından periyodik çeker (tipik 5 sn); APISIX etcd üzerinde watch ile milisaniyeler içinde alır. "Sızdırılmış API anahtarını iptal ettim" dediğiniz an ile gerçekten iptal olduğu an arasındaki fark budur. Acil durum senaryonuzu bu sayıya göre yazın.
Ayrıştırma Uygulama

Neden tek gateway her şeyi karşılamamalı?

Vaka kapsamının en çok atlanan maddesi. Dış trafiğin tehdit modeli, SLA'sı, değişim hızı ve ölçek profili iç trafikten tamamen farklıdır.

BoyutDış (public)Partner (B2B)İç (internal)
TüketiciMobil, web, anonimKurumsal müşteri, entegratörDiğer ekipler, batch, admin
KimlikOAuth2/OIDC kullanıcı token'ımTLS + client credentials + IP allowlistServis kimliği (SPIFFE), iç JWT
Tehdit modeliYüksek: bot, DDoS, kimlik doldurmaOrta: sözleşme ihlali, kota aşımıDüşük ama yıkıcı: yanlış yapılandırma
KotaSıkı, kullanıcı/IP bazlıSözleşmeye bağlı + faturalandırmaGevşek, koruma amaçlı
Gövde limiti1–5 MB10–50 MBYüksek / akış
Değişim hızıYavaş, sürüm sözleşmeliSunset takvimliHızlı, kırıcı değişime toleranslı
Ağ konumuDMZ / kenar, WAF arkasındaDMZ, ayrı dinleyici + sertifikaKüme içi, internete kapalı
Ayırmamanın bedeli: iç admin endpoint'i yanlış bir rota kuralıyla internete açılabilir, bir partner'ın ani yükü mobil uygulamayı etkileyebilir, iç ekiplerin hızlı deploy ihtiyacı dış trafiği riske atar ve blast radius gereksizce büyür. Ayırma, ek maliyetten çok bir sigorta primidir.
Aynı yazılım, ayrı dağıtım. Ayrıştırma mutlaka farklı ürün demek değil. Çoğu durumda doğru cevap: aynı gateway teknolojisi, ayrı deployment'lar — ayrı pod seti, ayrı dinleyici, ayrı config namespace'i, ayrı otomatik ölçekleme. Öğrenme maliyeti tek, hata alanı ayrı.

Gerçek örnek · Uber'in dört katmanlı modeli

KATMAN 1

Edge

Yalnızca kimlik, kota, izleme, protokol dönüşümü. İş mantığı yasak. Golang, self-servis yapılandırma arayüzü.

KATMAN 2

Presentation

İstemciye özel görünüm üretimi ve veri birleştirme — yani BFF. Ürün ekiplerinin sahip olduğu servisler.

KATMAN 3

Product

Yeniden kullanılabilir, özelliğe özgü API'ler. Birden çok deneyim tarafından tüketilir.

KATMAN 4

Domain

Tek bir işi yapan yaprak mikroservisler. Grafiğin ucu.

Uber · 2. nesil gateway
0
istek/sn zirve — tek Node.js uygulaması
Kod tabanı
0
110 endpoint grubu, 400+ downstream servis
Katkı
0
mühendisliğin bu tek repoya kod yazan oranı
3. nesle geçiş
0
en kritik karar: kenarda iş mantığını yasaklamak
Authentication Uygulama

Kimlik doğrulama: "sen kimsin?"

Gateway'in kimlik işi tek cümleyle: doğrulanmamış hiçbir istek iç ağa girmesin, ve doğrulanmış her isteğin kimliği downstream'e güvenilir biçimde taşınsın.

Kriptografi

  • İmzayı doğrula ve algoritmayı sabitten al
  • alg: none ve HMAC/RSA karıştırma saldırısını engelle
  • kid ile JWKS'ten anahtar seç; bilinmeyen kid'de JWKS'i bir kez yenile

Talepler

  • iss beklenen sunucu mu?
  • aud bu API'yi mi işaret ediyor? Atlanırsa başka servisin token'ı kabul edilir
  • exp/nbf — saat kayması toleransı en fazla 30–60 sn

JWKS yaşam döngüsü

  • Önbellekle (dk mertebesi) — her istekte çekme
  • Rotasyonda eski ve yeni anahtar bir süre birlikte yaşamalı
  • IdP erişilemezse önbellekle devam et — fail static

İptal gerçeği

  • JWT tanım gereği iptal edilemez; çözüm kısa ömür (5–15 dk)
  • Acil iptal: gateway'de jti kara listesi (Redis, kısa TTL)
  • Kara liste bir istisna mekanizmasıdır, mimari temel değil
YöntemNeredeGateway'in işiDikkat
JWT (Bearer)Kullanıcı oturumlarıİmza + claim doğrulama, JWKS önbelleğiİptal edilemez — kısa ömür + refresh
Opaque tokenYüksek güvenlikli oturumIntrospection + sonucu önbelleklemeHer istekte IdP'ye gitmek gecikme ekler
mTLSPartner, iç servislerSertifika zinciri + CN/SAN eşlemeKullanıcıyı değil servisi tanır
API keyBasit B2B, dahili araçHash'lenmiş anahtar araması, kota bağlamaTek başına kimlik doğrulama değildir
HMAC imzaBankacılık, ödeme, webhookGövde + zaman damgası imzasıReplay için nonce + zaman penceresi gerekir
Desen · canlı akış Uygulama

Dışarıda opaque, içeride JWT

Kurumsal ortamların fiilî standardı: hem güvenlik hem performans problemini aynı anda çözer. Akış aşağıda adım adım oynuyor.

İstemci
tarayıcı / mobil
Gateway
introspection + önbellek
Mikroservis
yerel JWT doğrulama
Yetkilendirme sunucusu
token introspection ucu

Neden opaque dışarıda?

JWT'nin gövdesi Base64'tür, şifreli değildir. Tarayıcıda duran bir JWT e-posta, rol ve kurum bilgisini açığa çıkarır. Opaque token hiçbir şey söylemez ve anında iptal edilebilir.

Neden JWT içeride?

Her mikroservisin her istekte IdP'ye gitmesi hem gecikme hem tek hata noktası demektir. JWT'yi yerel doğrulamak mikrosaniyeler alır.

Maliyet

Gateway'de introspection sonucunu önbelleklemek zorunludur (token'ın kalan ömrüyle sınırlı TTL). Aksi hâlde her istek IdP'ye bir çağrı ekler.

Token exchange (RFC 8693). Servis A, servis B'yi çağırırken kullanıcının token'ını olduğu gibi iletmek en kolay yoldur ama en geniş yetkiyi taşır. Token exchange ile A, kullanıcı token'ını yalnızca B için geçerli ve daraltılmış bir token'la takas eder. Aktör zinciri (act claim'i) korunur; denetimde "kimin adına, kim çağırdı" cevaplanabilir olur.
Authorization Uygulama

Kaba taneli gateway'de, ince taneli serviste

Vaka kapsamındaki "authentication ve authorization kontrollerinin gateway üzerindeki konumu" maddesinin cevabı ve kısa kuralı: bu ikisi yer değiştiremez.

KontrolÖrnek soruNeredeGerekçe
Kimlik doğrulamaToken geçerli mi?Gateway (zorunlu)Tekdüze olmalı, veri gerektirmez
Kapsam / scopeToken siparis:yaz içeriyor mu?GatewayToken'ın içinde
Rol / fonksiyon yetkisiAdmin ucuna girebilir mi?Gateway (kaba) + servis (kesin)Rota bazlı filtre ucuz ve etkili
Kurum izolasyonuBu token X kurumuna mı ait?Gateway (yönlendirme) + servis (doğrulama)Gateway kiracıyı bilir, kaydın kiracısını bilmez
Nesne düzeyi yetki (BOLA)42 numaralı sipariş bu kullanıcının mı?Yalnızca servisGateway iş verisine erişemez, erişmemeli
Alan düzeyi yetkiTCKN alanını görebilir mi?Servis (veya gateway'de maskeleme)Veri modeline bağımlı
İş akışı yetkisiLimit üstü transfer ikinci onay ister mi?Yalnızca servisSaf iş mantığı
OWASP API1 ve API3 gateway'de çözülemez. Broken Object Level Authorization ve Broken Object Property Level Authorization listenin en tepesindeki ve en yaygın açıklardır — hiçbir gateway ürünü bunları sizin yerinize çözemez, çünkü "42 numaralı kaydın sahibi kim" sorusunun cevabı yalnızca servisin veritabanındadır. Gateway'in katkısı dolaylıdır: anomali tespiti (bir token'ın kısa sürede çok sayıda farklı kimliğe erişmesi) ile şüpheyi yakalayabilir.

OPA / Rego

Genel amaçlı politika motoru; Envoy'un ext_authz API'siyle yerel entegrasyonu var. Harici veriyi kendi biçiminde işler. Öğrenme eğrisi dik, ifade gücü yüksek.

Cedar

Daha dar kapsamlı ve okunabilir; politika analizi (çakışma/erişilebilirlik kanıtı) yapılabilir. İzin modeli net olan uygulamalarda Rego'dan pratiktir.

AuthZen

Yetki isteği/cevabının nasıl taşınacağını standartlaştıran açık spesifikasyon. Uygulama PEP, motor PDP olur; motoru değiştirmek entegrasyonu kırmaz.

Gecikme bütçesi. Dışsal yetki her isteğe bir ağ atlaması ekler. Üretimde doğru desen: politika motorunu sidecar olarak aynı pod'da çalıştırmak (localhost, ~0.2–1 ms) veya kararı kısa TTL ile önbelleklemek. Uzak bir merkezî PDP'ye her istekte gitmek, gateway'in bütün gecikme kazancını yer.
Kota · canlı simülatör Uygulama Algoritma satırına tıklayın

Aynı limit, dört çok farklı davranış

"Dakikada 60 istek" cümlesi, seçilen algoritmaya göre tamamen farklı sistemler üretir. Aşağıda dört algoritma aynı istek akışını alır ve her biri kendi iç durumunu canlı gösterir. Ani yük düğmesi davranış farkını görünür kılar; bir algoritma satırına tıklandığında o algoritmanın nasıl çalıştığı adım adım açılır.

Limit: 5 istek / 2 saniye akış: ~2,6 istek/sn
kabul edildi reddedildi (429) iç durum göstergesi pencere sınırı zaman soldan sağa · son 6 saniye
AlgoritmaBellekDoğrulukAni yükZayıf noktasıNe zaman
Sabit pencere1 sayaçDüşükKontrolsüzPencere sınırında 2× limit geçebilirİç servisler, kaba koruma
Kayan pencere (log)N zaman damgasıTamYokBellek ve temizlik maliyeti yüksekDüşük hacim, kritik doğruluk
Kayan pencere (sayaç)2 sayaçYüksekYokAğırlıklı tahmin, küçük sapmaGenel amaçlı varsayılan
Jeton kovası2 alanYüksekKontrollü (kapasite kadar)Boş kovadan sonra ani yük geçmezGenel API'ler için en iyi varsayılan
Sızdıran kovaKuyrukYüksekEmilir, çıkış düzleşirKuyrukta bekleme = gecikmeArka uç sabit hız istiyorsa
GCRA1 zaman damgasıYüksekKontrollüKavraması daha zorDağıtık ortamda en zarif
Sabit pencerenin sınır problemi. Limit "dakikada 60" ve pencere 12:00:00–12:00:59 ise, kullanıcı 12:00:59'da 60, 12:01:00'da 60 istek gönderebilir: bir saniye içinde 120 istek. Arka ucunuz bunu görür, sizin metriğiniz görmez. Bu gerekçe tek başına, sabit pencerenin dış API'lerde kullanılmaması için yeterlidir.
Dağıtık kota Uygulama

Tek örnekte kolay — on örnekte "dakikada 60" nasıl olur?

Ve tek bir limit hiçbir zaman yeterli değildir: gerçek sistemlerde limitler katmanlıdır ve her katman farklı bir tehdide karşı durur.

01

Yerel bölüştürme

Her örnek limitin 1/N'ini uygular. Ağ maliyeti sıfır; ama yük dengesiz dağılınca yanlış reddetme üretir ve otomatik ölçekleme limiti sessizce değiştirir.

02

Merkezî sayaç

Tek doğruluk kaynağı. Atomiklik için tek Lua betiği — oku/hesapla/yaz yarışını engellemenin tek güvenli yolu. Maliyet: ~0.3–1 ms Redis gidiş-dönüşü.

03

Hibrit

Yerel sayaç hızlı karar verir, arka planda merkezle uzlaşır. Ultra yüksek hacimde tek yol; karşılığında kısa süreli aşımları kabul edersiniz.

BoyutAnahtarNeye karşı korurTuzağı
IPip:203.0.113.9Anonim kötüye kullanımNAT — binlerce kullanıcı tek IP
Kullanıcıu:8f21…Hesap kötüye kullanımı, kazımaKimlik doğrulanmadan bilinemez
Kurumk:ACMEGürültülü komşu, sözleşme aşımıKurum içi tek kullanıcı tüm kotayı yiyebilir
API anahtarıa:pk_live_…Sızmış anahtar, entegrasyon hatasıPaylaşılırsa kimlik anlamını kaybeder
Rotar:odeme-olusturPahalı endpoint sömürüsüAğırlık yoksa ucuz/pahalı eşit sayılır
Global*Toplam kapasite korumasıTek başına adaletsiz — en üst emniyet supabı
Redis + Lua atomik jeton kovası
-- KEYS[1] = kova anahtarı (rl:kurum:ACME:route:siparis)
-- ARGV    = kapasite, hız(jeton/sn), şimdi(ms), istenen
local durum   = redis.call('HMGET', KEYS[1], 'jeton', 'ts')
local kapasite = tonumber(ARGV[1])
local hiz      = tonumber(ARGV[2])
local simdi    = tonumber(ARGV[3])
local istenen  = tonumber(ARGV[4])

local jeton = tonumber(durum[1]) or kapasite
local ts    = tonumber(durum[2]) or simdi

-- geçen süre kadar doldur, tavan: kapasite
local gecen = math.max(0, simdi - ts) / 1000
jeton = math.min(kapasite, jeton + gecen * hiz)

local izin, bekle = 0, 0
if jeton >= istenen then
  jeton = jeton - istenen
  izin  = 1
else
  bekle = math.ceil((istenen - jeton) / hiz)  -- Retry-After
end

redis.call('HSET', KEYS[1], 'jeton', jeton, 'ts', simdi)
redis.call('PEXPIRE', KEYS[1], math.ceil(kapasite/hiz*2000))
return { izin, math.floor(jeton), bekle }
Redis düşerse ne olur? Bu sorunun cevabı tasarım aşamasında verilmelidir. Rate limiter'ın fail-openfail-closed mı olacağı rota bazlı bir iş kararıdır. Katalog okumada fail-open doğrudur — kota kaybı, kesintiden iyidir. Ödeme veya SMS rotasında fail-closed doğrudur. Varsayılanı düşünmeden bırakmak, kesinti gününde ikinci bir kesinti üretir.
Rate limit ≠ kota. Rate limit koruma amaçlıdır: saniye ölçeği, aşılınca 429, teknik sınır. Kota ticaridir: ay ölçeği, sözleşmenin parçası, faturalandırmayla ilişkili, kalıcı depolama ve mutabakat gerektirir — Redis sayacı yetmez. Olgun sistemler ayrıca maliyet birimi kullanır: basit okuma 1, karmaşık arama 10, rapor 100.
Dönüşüm Uygulama

Header dönüşümü hemen her zaman doğru, gövde dönüşümü çoğu durumda bir tasarım uyarısıdır

Gateway'in en çekici ve en tehlikeli yeteneği. Ayrımı bilmek, gateway'i dağıtık monolitten ayıran çizgidir.

İstek tarafı · güvenli dönüşümler

  • StripPrefix / RewritePath — dış yol ile iç yolu ayırmak
  • Kimlik bağlamı: X-User-Id, X-Kurum-Kodu, X-Scopes
  • Korelasyon ve trace header'ları
  • İstemci ipuçları: X-Client-Version, X-Platform
  • Güvenilmez header'ların silinmesi

Yanıt tarafı · sızıntıyı kesmek

  • Server, X-Powered-By kaldırma
  • Güvenlik header'ları (HSTS, CSP, nosniff)
  • Yinelenen CORS header'larını tekilleştirme
  • İç hata gövdelerini normalize etme — yığın izi asla dışarı çıkmamalı
  • Deprecation / Sunset uyarıları
HeaderRiskGateway davranışı
X-Forwarded-ForSahte IP ile IP kısıtı ve rate limit atlatmaGüvenilir proxy sayısına göre kes ve yeniden yaz
X-Forwarded-Proto / -HostYanlış şema/host → yönlendirme ve önbellek zehirlenmesiKenar gateway'de zorla sabitle
X-User-Id, X-Roles, X-KurumDoğrudan kimlik taklidiGelen değeri koşulsuz sil, token'dan yeniden üret
Authorizationİç servise sızan dış tokenGerekiyorsa exchange et, gerekmiyorsa iletme
Connection, TE, Upgradeİstek kaçakçılığı (smuggling)İletme; belirsiz Content-Length/Transfer-Encoding ikilisini reddet
Gövde dönüşümünün gizli maliyeti. Gövdeyi değiştirmek için gateway onu tamponlamak zorundadır. Bu tek karar: akış (streaming) biter, bellek istek boyutuyla çarpılır, GC baskısı ve gecikme artar ve en önemlisi gateway iç veri modelini bilmeye başlar. Servis alan adı değiştirdiğinde gateway'i de deploy etmeniz gerekir — dağıtık monolitin ilk adımı budur.
Protokol köprüleme farklı bir kategoridir. REST ↔ gRPC transcoding, SOAP → REST, sabit uzunluklu kayıt → JSON: protokol çevirisi gateway'in meşru işidir, anlam çevirisi değildir. İstemciye özel şekil gerekiyorsa çözüm gateway filtresi değil BFF'tir.
İzlenebilirlik · anatomi Uygulama

Bir kullanıcı "sipariş veremiyorum" dediğinde…

…o tek isteğin geçtiği yedi servisi tek bir kimlikle birleştirebiliyor musunuz? Gateway bu zincirin başladığı yerdir. Aşağıda traceparent header'ı parça parça açılıyor.

GÖREV 1

Yoksa üret

Geçerli bir traceparent/correlation yoksa oluştur.

GÖREV 2

Varsa doğrula

Formatı geçersizse yeni üret — sahte/bozuk değeri ağaca sokma.

GÖREV 3

Koru ve ilet

Upstream'e mutlaka geçir. Header allowlist'i bunu sessizce düşürebilir.

GÖREV 4

Geri ver

Yanıt header'ında istemciye dön — destek kaydında tek referans olur.

En sık görülen kırılma. İzler belirli bir servis sınırında kopuyorsa, ilk bakılacak yer bir proxy'nin, load balancer'ın veya CDN'in traceparent'ı silmesidir. Allowlist mantığıyla çalışan header politikaları bunu sessizce yapar. Test: gateway'in hemen arkasındaki servise gelen ham header'ları bir kez loglayın.
Örnekleme stratejisi. Head-based: gateway başta karar verir (%1) — ucuz ama ilginç olan hatayı kaçırabilir. Tail-based: karar iz tamamlandıktan sonra verilir; hatalı veya yavaş izlerin %100'ü saklanır. Pratik kural: başarılı istekte %1, 5xx ve p99 üstü gecikmede %100.
KavramNe işaret ederKim üretirÖmrü
Correlation IDBir iş akışının tamamı (kullanıcı eylemi)İstemci veya gatewayAsenkron adımlar dâhil, saatler
Trace IDBir isteğin dağıtık çağrı ağacıİlk enstrümante bileşen (gateway)İstek süresi
Span IDAğaçtaki tek bir iş birimiHer servis kendi span'ını üretirMetot/çağrı süresi
Request IDTek bir HTTP isteği (retry'lar farklı)GatewayTek atlama
Sürüm Uygulama

Şema seçmek kolay — asıl maliyet emekliye ayırmayı planlamamak

Sunset tarihi olmayan bir sürüm sonsuza kadar yaşar. Versiyonlama kararının gerçek bedeli buradadır.

YöntemÖrnekArtıEksiGateway'de
URI yolu/api/v2/siparisGörünür, önbelleklenebilir, her araçla uyumluURL'ler kalıcıdır; eski yolu silmek acı verirPath predicate
HeaderX-Api-Version: 2URL temiz, kaynak kimliği bozulmazGizli — tarayıcıdan denenemezHeader predicate
Media type…vnd.kurum.v2+jsonMimari olarak en temiziGeliştiricilere en yabancı olanıHeader + Vary
Query param?version=2Denemesi kolayÖnbellek anahtarını kirletirQuery predicate
Emeklilik protokolü rota bazlı, servis kodu değişmeden
# Sunset edilmiş sürüm — hâlâ ayakta, ama uyarıyor
- id: siparis-v0-deprecated
  uri: lb://siparis-legacy
  predicates: [ Path=/api/v0/siparis/** ]
  filters:
    # RFC 9745 — bu kaynak kullanımdan kaldırıldı
    - AddResponseHeader=Deprecation, @1767225600
    # RFC 8594 — şu tarihte yanıt vermeyi bırakacak
    - AddResponseHeader=Sunset, Sat, 31 Jan 2027 23:59:59 GMT
    # Yerine ne kullanılacak
    - AddResponseHeader=Link,
        <https://api.kurum.com/docs/v1>; rel="successor-version"

Gerçekçi süreler

  • İç tüketiciler: 1–3 ay
  • Dış geliştiriciler: 6–12 ay
  • Sözleşmeli partnerler: 12–24 ay
  • Mobil: zorla güncelleme mekanizmanız yoksa süre "sonsuz"dur

Duyuru + iki hatırlatma + karartma tatbikatı (planlı kısa kesintiler) dizisi, gerçek kapanış gününde sürpriz yaşamamanın tek yoludur.

Gateway'in eşsiz katkısı: kim hâlâ kullanıyor? Sürüm bazlı kullanım telemetrisi yalnızca gateway'de vardır. route_id × tenant × client_version kırılımını görüyorsanız "v1'i kapatabilir miyiz?" sorusuna tahminle değil veriyle cevap verir, kalan üç müşteriyi ismen ararsınız.
Pratik öneri: Dış API'lerde URI yolu seçin — keşfedilebilirlik ve destek maliyeti her şeyden ağır basar. Yalnızca kırıcı değişikliklerde numarayı artırın. İç API'lerde çoğu zaman versiyonlamaya hiç gerek yoktur: tolerant reader ilkesi ve geriye uyumlu değişim disiplini yeterlidir.
03
Sistemi kurdukşimdi üretimde ayakta tutuyoruz
Aşama 3 · İleri

Üretim gerçekleri

Buraya kadar her şey her şey yolundayken nasıl çalıştığıydı. Bu aşama, işler ters gittiğinde ne olduğuyla ilgili: arka uç yavaşladığında, kapasite aşıldığında, bir bölge düştüğünde. Kesinti günlerinde sistemin kaderini burada verilen kararlar belirler.

Timeout hiyerarşisi, retry bütçesi, devre kesici — rota bazlı
Yük atma, uyarlanabilir eşzamanlılık ve iş önceliği
Gateway'i tek hata noktası olmaktan çıkarmak
Gecikmeyi dürüstçe ölçmek — coordinated omission tuzağı
RED metrikleri, SLO tabanlı alarm, OWASP eşlemesi
Dayanıklılık İleri

Zaman aşımı, dayanıklılığın temelidir — diğer her şey onun üstüne kurulur

Üç farklı zaman aşımı vardır ve karıştırılmaları en yaygın hatadır.

1

Connect timeout

TCP + TLS kurulumu. Aynı bölgede 100–500 ms fazlasıyla yeterli. Uzun tutmak, çökmüş bir örneğe saniyelerce bağlanmaya çalışmak demektir.

2

Response timeout

Yanıt beklemesi. Servisin p99 gecikmesinin 2–3 katı. Bu ölçüyü tahminle değil, gerçek metrikle koyun.

3

Total timeout

Retry'lar dâhil toplam. İstemcinin bekleyeceği mutlak üst sınır. Retry sayısı × response timeout bu değeri aşamaz.

İç içe timeout kuralı. Gateway 2 sn, servis 5 sn, veritabanı 10 sn bekliyorsa: gateway vazgeçtikten sonra servis ve veritabanı hâlâ çalışıyordur. İstemci hata görür, sistem kaynak tüketmeye devam eder, retry gelince yük ikiye katlanır.
Doğru sıralama dıştan içe daralan bütçedir: gateway(2s) > servis(1.5s) > DB(1s). Buna deadline propagation denir; gRPC'de deadline, HTTP'de bir header ile taşınır.

Retry storm — en tehlikeli iyileştirme

Arka uç yavaşlar → gateway retry yapar → yük 3× olur → arka uç daha da yavaşlar → daha çok retry. Bu, üretim kesintilerinin en yaygın büyütücü mekanizmasıdır. Kesintiyi retry başlatmaz ama küçük bir olayı tam karartmaya o çevirir.

ilk deneme 1. retry 2. retry
Güvenli retry reçetesi: yalnızca idempotent istekler (GET, HEAD, PUT, DELETE — POST ancak Idempotency-Key varsa) · yalnızca güvenli hatalar (bağlantı hatası, 502/503/504, asla 4xx) · üstel geri çekilme + jitter (yoksa retry'lar senkronize dalga yapar) · retry bütçesi: toplam isteğin en fazla %10'u retry olabilir, aşılırsa retry kapanır · en fazla 1–2 deneme · aynı örneğe değil farklı örneğe.
Devre kesici · dört strateji yarışıyor İleri Stratejiyi değiştirin, sonuçları karşılaştırın

Başarısız olacağını bildiğin çağrıyı hiç yapma

Dört farklı devre kesici stratejisi aynı arıza akışını alıyor ve bağımsız karar veriyor. Kaydırıcılarla arka ucun hata ve yavaşlık oranını değiştirin; alttaki karşılaştırma tablosunda hangi stratejinin ne kadar boşa çağrıyı engellediğini ve kaç yanlış kesme yaptığını yan yana görün.

Strateji
KAPALI
İstekler arka uca gidiyor, sonuçlar sayılıyor
AÇIK
Tümü anında reddediliyor, fallback dönüyor
YARI AÇIK
Sınırlı deneme isteği geçiriliyor
Hazır senaryo
0/20
pencere
0%
ölçülen oran
0
engellenen boşa çağrı
0
boşa giden çağrı
0
yanlış kesme
0
açılma
StratejiDurumEngellenenBoşa giden Yanlış kesmeKoruma oranı
Simülasyon ısınıyor…
resilience4j üretim başlangıcı
resilience4j.circuitbreaker.instances.siparisCB:
  slidingWindowType: COUNT_BASED
  slidingWindowSize: 20
  minimumNumberOfCalls: 10      # gürültüye tepki verme
  failureRateThreshold: 50      # %50 hata → OPEN
  slowCallRateThreshold: 60     # %60 yavaşsa da OPEN
  slowCallDurationThreshold: 1s
  waitDurationInOpenState: 10s
  permittedNumberOfCallsInHalfOpenState: 5
  ignoreExceptions:                # 4xx devreyi AÇMAMALI
    - com.kurum.IsKuraliHatasi

resilience4j.timelimiter.instances.siparisCB:
  timeoutDuration: 2s              # breaker'ın GÖZÜ
  cancelRunningFuture: true
TimeLimiter olmadan breaker kördür. Devre kesici yalnızca tamamlanan çağrıların sonucunu sayar. Yavaş bir arka uç hata döndürmez — sadece bekletir. TimeLimiter yoksa çağrılar birikir, bağlantı havuzu dolar, gateway'in kendisi çöker ve breaker hiç açılmaz.
4xx istemci hataları başarısızlık olarak sayılmamalıdır. İstemci hatası (400, 401, 404, 422) arka ucun sağlığıyla ilgili değildir. Bunları hata sayarsanız tek bir bozuk entegrasyon tüm kullanıcılar için devreyi açar.
Dört stratejinin künyesi — soldaki seçimle eşleşir
RotaNitelikTimeoutRetryCircuit breakerFallback
/odeme/tahsilatKritik, yazma, idempotent değil5 sYokHassas: %30 eşikYok — net hata döndür
/siparisKritik, yazma3 s1 (yalnız GET)%50 / 10 snKuyruğa al + 202
/katalogOkuma, önbelleklenebilir1 s2%50 / 5 snBayat önbellek servis et
/aramaOkuma, pahalı800 ms1%40 / 15 snBasit liste + uyarı
/oneriİsteğe bağlı süsleme300 msYok%30 / 30 snBoş liste — sayfa yine yüklenir
/raporUzun süren, toplu60 sYokKapalıAsenkron iş kimliği
Bu tablo bir dokümandan fazlasıdır. Doğru uygulandığında doğrudan yapılandırmaya dönüşür ve gözden geçirme sürecinin parçası olur: yeni bir rota eklendiğinde bu altı sütunu doldurmayan pull request birleştirilmez. "Dayanıklılık politikası" böylece bir niyet olmaktan çıkıp bir kontrol noktasına dönüşür.
Resilience4j · yönetim İleri Parametreleri değiştirip etkisini izleyin

Dayanıklılık parametreleri statik yapılandırma olarak kalmamalıdır

Devre kesici eşiklerinin doğru değeri, ilk yazıldığı gün bilinemez; trafiğin şekli, arka ucun kapasitesi ve iş önceliği değiştikçe değişir. Bu bölüm iki soruyu cevaplar: parametreler nasıl seçilir ve yeniden deploy etmeden nasıl değiştirilir?

Parametre etki simülatörü dengeli
Karar penceresi. Küçük = hızlı tepki, gürültüye açık. Büyük = kararlı, geç tepki.
Devrenin açıldığı hata oranı. Kritik yazma rotalarında düşük, toleranslı okumalarda yüksek.
Açık kalma süresi. Kısa = erken deneme, çökmüş servise yük. Uzun = gereksiz kesinti.
Gerçek dünya koşulu. Bu değeri değiştirip parametrelerin dayanıklılığını sınayın.
açılma süresi
engellenen boşa çağrı
yanlış açılma riski
toparlanma gecikmesi
Resilience4j
io.github.resilience4j · 2.x
Parametreler kopyalanarak belirlenmemelidir. İnternette dolaşan varsayılanlar (20 / %50 / 10 sn) bir başlangıç noktasıdır, hedef değil. Doğru değerler yalnızca rotanın gerçek p99 gecikmesi, hata dağılımı ve iş kritikliği bilindikten sonra türetilebilir.

Altı modül, tek bir sarmalama sırası

Resilience4j desenleri iç içe geçmiş dekoratörler olarak uygular: en dıştaki modül, içindeki her şeyi tek bir çağrı gibi görür. Sıra keyfi değildir — kim kimi sarıyorsa onun kararını da sayar. Modülleri kapatıp açın, isteğin hangi katmanda durduğunu izleyin.

Dekoratör zinciri
0
arka uca ulaştı
0
katmanda durdu
0
retry ile kurtarıldı
en çok durduran
sarmalama · doğru sıra Resilience4j 2.x
// En içten dışa doğru: Bulkhead → TimeLimiter →
// RateLimiter → CircuitBreaker → Retry
var tedarikci = Decorators.ofSupplier(() -> istemci.cagir())
    .withBulkhead(bulkhead)          // 1 · eşzamanlılık
    .withTimeLimiter(zaman, sched)   // 2 · süre bütçesi
    .withRateLimiter(hizSiniri)      // 3 · hız
    .withCircuitBreaker(devre)       // 4 · sağlık
    .withRetry(retry)                // 5 · en dışta
    .withFallback(List.of(Exception.class), e -> bayatVeri())
    .decorate();
Spring Cloud Gateway bu sırayı sizin yerinize kurar. CircuitBreaker filtresi Resilience4JCircuitBreakerFactory üzerinden devre kesici + TimeLimiter ikilisini birlikte sarmalar; retry'ı ayrı Retry filtresiyle daha düşük sıra numarası vererek dışa yerleştirmek gerekir. Filtre sırasını yanlış vermek, yukarıdaki hatanın aynısını üretir.

Dinamik yönetim: yeniden deploy etmeden değiştirmek

çalışma zamanında devre kesici yönetimi
# 1) Anlık durum: hangi devre açık, pencere ne durumda?
curl -s localhost:9000/actuator/circuitbreakers | jq '.circuitBreakers'
{
  "siparisCB":  { "state": "OPEN",   "failureRate": "72.0%" },
  "katalogCB":  { "state": "CLOSED" , "failureRate": "3.5%"  }
}

# 2) Olay akışı: geçişleri canlı izle (SSE)
curl -N localhost:9000/actuator/circuitbreakerevents/siparisCB/stream
STATE_TRANSITION  CLOSED -> OPEN   failureRate=72%

# 3) Operatör müdahalesi: devreyi elle zorla (olay anında)
curl -XPOST localhost:9000/actuator/circuitbreakers/siparisCB \
     -d '{"updateState":"FORCE_OPEN"}'   # arka ucu koru
curl -XPOST localhost:9000/actuator/circuitbreakers/siparisCB \
     -d '{"updateState":"DISABLE"}'      # yanlış açılmayı geç

# 4) Eşiği canlı değiştir: config sunucusundan yenile
curl -XPOST localhost:9000/actuator/refresh
["resilience4j.circuitbreaker.instances.siparisCB.failureRateThreshold"]

Kod içinden dinamik yeniden yapılandırma

Actuator uçları operatör içindir. Politikayı program aracılığıyla değiştirmek gerektiğinde (örneğin kampanya saatinde eşiği gevşetmek) registry doğrudan kullanılabilir:

// Çalışan bir devre kesicinin eşiğini değiştirmek
// yeni bir CircuitBreaker örneği üretmeyi gerektirir;
// mevcut örneğin config'i değişmez (tasarım gereği).
var yeni = CircuitBreakerConfig.from(mevcut.getCircuitBreakerConfig())
        .failureRateThreshold(30)
        .waitDurationInOpenState(Duration.ofSeconds(30))
        .build();

registry.remove("siparisCB");            // eski örneği düşür
registry.circuitBreaker("siparisCB", yeni); // yenisini kaydet

// UYARI: mevcut pencere sıfırlanır. Yoğun trafikte
// bu işlem kısa süreli "kör nokta" yaratır — değişikliği
// düşük trafikte veya kademeli yapın.
Olay dinleyicisi = ücretsiz gözlemlenebilirlik. registry.getEventPublisher() üzerinden her geçiş yakalanabilir; buradan metrik, alarm ve otomatik ticket üretilir. Devre açıldığında hangi rotanın hangi arka uç yüzünden kesildiği bilgisi, olay müdahalesinde ilk aranan veridir.

Altı durum: üçü kütüphanenin, üçü operatörün

Devre kesici anlatımlarının çoğu üç durumda durur. Resilience4j'de üç tane daha vardır ve olay anında asıl işe yarayanlar bunlardır: metrik toplayan ama hiç kesmeyen, hiç ölçmeyen ve elle kilitlenmiş durumlar. Aşağıdaki grafikte bir duruma tıklayın — nasıl girilir, nasıl çıkılır ve ne zaman kullanılır.

OTOMATİK · KÜTÜPHANE YÖNETİR · GEÇİŞLER KENDİLİĞİNDEN OLUR hata oranı ≥ eşik · yavaş çağrı oranı ≥ eşik waitDurationInOpenState doldu → deneme zamanı deneme çağrıları başarılı → devre kapanır deneme başarısız CLOSED geçiyor · ölçüyor OPEN anında reddediyor HALF_OPEN n adet deneme çağrısı OPERATÖR · ELLE ZORLANIR · HER DURUMDAN GİRİLİR, OTOMATİK ÇIKIŞ YOKTUR DISABLED hep geçir · hiç ölçme FORCED_OPEN hep reddet · hiç ölçme METRICS_ONLY ölç ama asla kesme
Bir duruma tıklayın · oklar canlı geçişi gösterir

Yönetim önerileri

01

Örnek adını rotadan türetin

Tek bir default devre kesici tüm arka uçları birleştirir ve bir servisin sorunu diğerlerini keser. Kural: her upstream için ayrı örnek, adı rota kimliğiyle aynı olsun — böylece metrik, alarm ve config aynı anahtarla eşleşir.

02

Üç profil tanımlayın

Rota başına elle ayar sürdürülemez. kritik / standart / opsiyonel adında üç baseConfig tanımlayıp rotaları bunlara bağlayın; yalnızca istisnalar için özelleştirme yapın.

03

TIME_BASED pencereyi tercih edin

Düşük trafikli rotalarda COUNT_BASED pencere saatlerce dolmayabilir; devre kesici fiilen devre dışı kalır. Trafiği düzensiz rotalarda zaman tabanlı pencere daha öngörülebilir davranır.

04

Yavaş çağrıyı ayrı ölçün

slowCallRateThreshold çoğu kurulumda unutulur. Oysa üretimde arka uç genelde hata vermez, yavaşlar. Yavaş çağrı eşiği olmadan devre kesici bu duruma kördür.

05

Bulkhead ile birlikte kullanın

Devre kesici açıldıktan sonra korur; bulkhead açılmadan önce korur. Eşzamanlılık sınırı olmadan tek bir yavaş arka uç, gateway'in bütün iş parçacıklarını tüketebilir ve devre kesici devreye girecek kadar bile zaman bulamaz.

06

Tatbikat yapın

Yapılandırılmış ama hiç açılmamış bir devre kesici, test edilmemiş bir yedek gibidir. Ayda bir, kontrollü biçimde bir arka ucu bozup devrenin açıldığını, fallback'in çalıştığını ve alarmın düştüğünü doğrulayın.

07

Duruma değil, geçişe alarm kurun

"Devre açık" durumu bir alarm değil bir sonuçtur. Alarm CLOSED → OPEN geçişine ve açık kalma süresine kurulmalıdır; saniyeler içinde kapanan bir devre gürültü, on dakikadır açık olan devre olaydır.

08

Kararı belgeleyin

Her eşik bir iş kararıdır: "ödeme rotasında %30 seçildi çünkü yanlış tahsilat, kısa kesintiden pahalıdır." Bu gerekçe yazılmazsa altı ay sonra kimse değeri değiştirmeye cesaret edemez — ve parametre fiilen dondurulur.

Aşırı yük · canlı İleri Yükü artırın, ne atıldığını izleyin

Herkesi yavaşça öldürmek yerine bazılarını hızlıca reddetmek

Kapasitenin üstünde yük geldiğinde iki seçenek vardır: herkese kötü hizmet (her istek yavaşlar, hepsi zaman aşımına uğrar, sistem çöker) veya bir kısmını hemen reddetmek (kalan normal hızda hizmet alır). İkincisi her zaman doğru cevaptır.

Neden kuyruk kurtarmaz

Gelen hız çıkan hızı aşıyorsa kuyruk sonsuza kadar büyür. Kuyrukta 8 saniye bekleyip işlenen bir istek, istemci 3 saniyede vazgeçtiği için boşa harcanmış iştir. Sistem %100 meşgul, faydalı iş sıfır. Bu duruma congestion collapse denir.

Çözüm: kuyruğa girerken de bütçe koymak — kuyrukta çok bekleyen isteği işlemeye başlamadan atmak.

Uyarlanabilir eşzamanlılık

"Aynı anda en fazla 200 istek" gibi elle konmuş limitler donanım değişince, kod hızlanınca veya arka uç yavaşlayınca yanlışa döner. Uyarlanabilir yaklaşım Little Yasası'yla gözlenen gecikmeden anlık kapasiteyi türetir: gecikme artmaya başlayınca eşzamanlılık limitini otomatik düşürür — TCP tıkanıklık kontrolüne benzer bir gradyan algoritması.

Öncelikli yük atma · canlı yük %80
kabul edildi atıldı (503) kapasite çizgisi

Gerçek örnek · Netflix'in servis düzeyi öncelikli yük atması

ÖNCELİK 1

Critical

Kullanıcının doğrudan beklediği istek — oynatma başlatma. En son atılır.

ÖNCELİK 2

Degraded

Bozulmuş ama kabul edilebilir deneyim üretecek istekler.

ÖNCELİK 3

Best-effort

Ön yükleme (prefetch), öneri zenginleştirme. Baskı altında ilk gidenler.

ÖNCELİK 4

Bulk

Telemetri, toplu iş, arka plan senkronizasyonu.

Kesinti sırasında
0
kullanıcı kaynaklı isteklerde erişilebilirlik
Aynı anda
0
prefetch isteklerinde erişilebilirlik
Test edildi
0
otomatik ölçekleme hacminin katı
Sınıflandırma
HTTP
yalnızca header'a bakılarak — gövde ayrıştırılmadan
Nasıl uygulanır. Yük atma CPU hedef kullanımına bağlı tetiklenir; IO-bağımlı servisler için CPU yerine gecikme eşiği kullanılır. Aynı örnek her iki trafiği de servis eder; bölme fiziksel değil, dinamik bir bölümdür — kritik trafik gerektiğinde ön yükleme kapasitesini "çalar".
Kendi öncelik şemanız. Öncelik puanı gateway'de kolayca türetilir: rota kritikliği × tüketici tipi × istek tipi × tekrar mı. Bu, piyasadaki ürünlerin neredeyse hiçbirinde hazır bulunmayan ama custom gateway'e eklenmeye en değer yeteneklerden biridir.
Yük ve akış İleri

Sınır koymamak DoS'a davetiye, yanlış yerde sınır özellik kaybı

Gateway'in en sık ihmal edilen boyutu. Aşağıdaki sahne, aynı 500 MB'lık dosyanın iki farklı desenle nasıl taşındığını yan yana gösterir: gateway üzerinden ve ön imzalı URL ile doğrudan depoya. Gateway'in bellek ve bağlantı tüketimindeki fark, tasarım kararının tamamını açıklar.

Dosya yükleme desenleri · canlı eşzamanlı yükleme 4
gateway belleği / bağlantısı doğrudan depoya akış
LimitNedenÖneri
İstek gövdesiBellek tüketimi, ayrıştırıcı DoSJSON 256 KB–1 MB, yükleme ayrı rota
Yanıt gövdesiKontrolsüz veri sızıntısı, bant genişliğiSayfalama zorunlu — sınırsız liste ucu yasak
Header toplamıBellek ve HPACK saldırıları8–16 KB
URL uzunluğuLog ve ara katman uyumsuzlukları2–8 KB
Multipart parça sayısıAyrıştırıcı tüketimiAçık üst sınır
Sıkıştırma oranıZip bombAçılmış boyut tavanı + oran kontrolü
JSON derinliğiYığın taşması / özyineleme32–64 seviye

Yanlış desen

500 MB'lık dosya gateway üzerinden. Gateway bağlantıyı dakikalarca tutar, belleği doldurur, bir yeniden başlatma tüm yüklemeleri iptal eder ve bu tek endpoint diğer bütün trafiğin gecikmesini bozar. Yönetilen ürünlerin sabit limitleri de vardır: AWS API Gateway'de yük sınırı 10 MB ve değiştirilemez.

Doğru desen · ön imzalı URL

  • İstemci gateway'e "yükleme yapacağım" der
  • Gateway yetkiyi kontrol eder, depodan kısa ömürlü imzalı URL alır ve döner
  • İstemci dosyayı doğrudan depoya yükler — gateway yolun dışındadır
  • Depo olay yayınlar, işleme arka planda başlar

Gateway sabit bellekle çalışır, boyut sınırı depoya taşınır, ağır işlem senkron istek yolundan tamamen çıkar.

Idle timeout tuzağı

Ara katmanların varsayılanları uzun ömürlü bağlantıları sessizce keser: NGINX proxy_read_timeout 60 sn, AWS ALB boşta kalma 60 sn. Uygulama düzeyinde heartbeat göndermeden bunları aşamazsınız.

Tamponlama akışı öldürür

SSE kullanıyorsanız yanıt tamponlaması kapalı olmalı, aksi hâlde olaylar ancak tampon dolunca ulaşır ve "gerçek zamanlı" özellik gerçek zamanlı olmaz. Gövde dönüşümü filtreleri de bu rotalarda kullanılamaz.

Yeniden başlatma fırtınası

10.000 açık WebSocket'i olan gateway yeniden başlatıldığında hepsi aynı anda bağlanmaya çalışır. Zorunlu önlem: kademeli devre dışı bırakma, istemcide jitter'lı yeniden bağlanma, bağlantıların dengeli dağıtımı.

Yönetilen ürün sınırı: Azure API Management gibi bazı ürünler WebSocket, SSE ve çift yönlü gRPC akışlarını tam olarak desteklemez; unary gRPC ancak JSON transcoding ile açılabilir. Gerçek zamanlı özellikleri olan bir ürün geliştiriyorsanız bu kısıt, ürün seçiminde ilk elemeyi yapan kriterdir.
Sürüm geçişi · canlı İleri

Riski kademeli alarak yayına çıkmak

Gateway trafiği yönlendiren yer olduğu için, dağıtım stratejisinin doğal uygulama noktasıdır. Kaydırıcı ile ağırlık değiştirildiğinde trafiğin nasıl bölündüğü ve etkinin nasıl değiştiği izlenebilir.

Ağırlıklı yönlendirme
v1 — kararlıv2 — canary
v2'ye / gün
etkilenen kullanıcı
v2 %2 hatalıysa toplam etki
tespit süresi
StratejiNasılEksiNe zaman
Blue-greenİki tam ortam; trafik tek seferde geçerÇift kapasite; hata anında herkes etkilenirHızlı geri alınabilir sürümler
CanaryKüçük yüzde yeniye; metrikle artırılırSürümler bir süre birlikte yaşar → geriye uyumlu şemaVarsayılan tercih
Shadow / mirrorİstek kopyalanır, yanıtı atılırYan etki riski: çift yazma, çift e-postaOkuma ağırlıklı, yan etkisiz rotalar
Yapışkan canaryKullanıcı hash'ine göre sabit atamaDağılım tam yüzde vermezArayüzü etkileyen değişiklikler
Hedefli canaryHeader/cookie ile yalnızca iç kullanıcılarGerçek trafik çeşitliliğini temsil etmezHer canary'nin ilk adımı

Beş strateji, aynı trafik: animasyonlu karşılaştırma

Yukarıdaki tablo stratejileri sözle anlatır; aşağıda her birini çalışırken görebilirsiniz. İstekler soldan gelir, gateway karar verir, sürümlere dağılır. "v2'yi boz" düğmesine basıp yeni sürümü kasıtlı olarak arızalandırın — stratejiler arasındaki etki alanı farkı ancak o zaman görünür hâle gelir.

Strateji
v1 payı
v2 payı
etki alanı
0
hatalı yanıt alan istek
geri alma
Shadow trafiğin unutulan tehlikesi. Aynalama "risksiz" diye pazarlanır ama gölge istek de gerçek bir istektir: veritabanına yazar, e-posta gönderir, üçüncü taraf API'sini çağırır ve onun kotasını tüketir. Yan etkiler izole edilmemişse bu özellik üretim verinizi bozar.
Yavaş yayılım bir güvenlik kontrolüdür. Cloudflare'in 18 Kasım 2025 kesintisinde sorun kod değil veriydi: bir veritabanı yetki değişikliği bot yönetimi özellik dosyasının boyutunu ikiye katladı; dosya tüm ağa yayıldı ve proxy süreçleri hata vermeye başladı. Ders: yapılandırma ve veri yayılımı da kod kadar kademeli olmalı — canary yalnızca binary'ler için değildir.
Blast radius İleri

"Gateway kurduk" = "yeni bir tek hata noktası ürettik"

Gateway her API çağrısının yolundadır. Düştüğünde kademeli bozulma olmaz — tam karartma olur. Bu bölüm o riski nasıl parçalayacağınızı anlatır.

katmanlı savunma
#KatmanNeye karşıDevreye girme
1DNS / GSLB — sağlık kontrollü, düşük TTLBölge kaybıTTL + istemci önbelleği
2Anycast — aynı IP, çok konumPoP kaybı, ağ yolu sorunuSaniyeler
3L4 load balancer — çoklu AZSunucu / AZ kaybıSaniyeler
4Çoklu gateway örneği — stateless, N+2Örnek kaybı, deployAnında
5Hücresel dağıtım — bağımsız yığınlarYazılım hatası, zehirli istek, gürültülü komşuHücre başına izole
Hücresel mimari neden farklı? 4. katmana kadar her şey altyapı hatalarına karşı korur. Ama gateway'i asıl düşüren şey genelde altyapı değil, yazılım veya yapılandırmadır — ve o hata tüm örneklerde aynı anda vardır. Hücresel dağıtımda her hücrenin kendi config'i ve yayılım takvimi olur; bozuk bir sürüm tüm müşterileri değil tek hücreyi etkiler.
BağımlılıkKaybedilirseDoğru davranışUygulama
Kontrol düzlemi / config storeYeni rota eklenemezFail static — son bilinen configDiskte kalıcı önbellek
Servis keşfiYeni örnekler görünmezSon bilinen endpoint listesiBoş listede eskiyi koru
JWKS / IdPYeni anahtar öğrenilemezÖnbellekle doğrulamaya devamUzun TTL + arka planda yenileme
Redis (rate limit)Kota sayılamazRota bazlı: fail-open / fail-closedYerel yedek limiter
Politika motoru (OPA)Yetki kararı alınamazFail-closed (reddet)Sidecar — ağ bağımlılığını kaldır
Log/metrik toplayıcıGörünürlük kaybıAsla isteği engellemeAsenkron, sınırlı tampon, taşarsa düşür
18 KAS 2025

Cloudflare · özellik dosyası

Bir veritabanı yetki değişikliği sorgunun yinelenen satır döndürmesine ve bot yönetimi özellik dosyasının ikiye katlanmasına yol açtı. Dosya tüm ağa yayıldı; boyut sınırını aşınca proxy süreçleri 5xx üretmeye başladı.

12 HAZ 2025

Cloudflare · paylaşılan bağımlılık

Workers KV kesintisi ona bağlı çok sayıda ürünü birlikte düşürdü; KV isteklerinin %91'i başarısız oldu, kesinti 2 sa 28 dk sürdü.

EYL 2025

Cloudflare · istemci kaynaklı çöküş

Dashboard'daki bir React useEffect hatası tek render'da hook'u tekrar tekrar çalıştırdı; Tenant Service API'si gereksiz çağrılarla boğuldu ve ona bağlı API'ler de düştü.

Altın kural: İstek yolundaki senkron bağımlılık sayısı, gateway'in erişilebilirlik tavanıdır. Her biri %99.9 olan üç bağımlılık, çarpım kuralıyla teorik tavanı %99.7'ye indirir. Gateway'inizin istek başına kaç ağ çağrısı yaptığını sayın; her birine "bu düşerse ne olur" sorusunun yazılı bir cevabı olsun.
Dağıtım topolojileri · üç senaryo İleri Senaryoyu değiştirin, dört sütunu karşılaştırın

Yatay ölçeklenmenin tek şartı: durumsuzluk

Bunu bozan her özellik (yerel oturum, yerel sayaç, yerel önbellek tutarlılığı) ölçeklenmeyi bir dağıtık sistem problemine dönüştürür. Durumsuzluk sağlandıktan sonraki soru kaç kopya değil, nasıl bölündüğüdür. Aşağıdaki sahnede dört topoloji aynı üç olaya maruz kalıyor — bozuk sürüm yayımı, bir erişilebilirlik bölgesinin kaybı ve zehirli bir kiracı. Her senaryoda kazanan topoloji değişir; sütunların altındaki "etkilenen trafik" ve "ayakta kapasite" değerlerini karşılaştırın.

Senaryo
sağlıklı · eski sürüm yeni sürüm · sağlıklı arızalı aşırı yüklü düşmüş a b cdüğümün erişilebilirlik bölgesi

Durum nereye gider

  • Rate limit sayaçları → Redis
  • Oturum → JWT (durumsuz)
  • Rota yapılandırması → kontrol düzlemi / CRD
  • JWKS, introspection → yerel önbellek (kaybı zararsız)
  • Idempotency kayıtları → paylaşılan depo

Neye göre ölçekleniyorsunuz?

Gateway'ler tipik olarak CPU-bağımlıdır: TLS el sıkışması, JSON/JWT ayrıştırma, şifreleme. Ancak uzun ömürlü bağlantı varsa sinyal aktif bağlantı sayısı olmalıdır — CPU boştayken bellek ve dosya tanıtıcıları tükenir.

Kritik optimizasyon: upstream'e keep-alive bağlantı havuzu. Her istekte yeni TCP+TLS kurmak, gateway ek yükünü tek başına 10 kat artırabilir.

TopolojiArtıEksiÖlçek
Tek paylaşılan filoBasit, tek politika noktasıEn büyük blast radius< 20 servis
Maruziyete göre ayrıkTehdit ve SLA izolasyonu3× operasyonKurumsal varsayılan
Alana göre ayrıkEkip özerkliği, bağımsız ölçeklemePolitika tutarlılığı zorlaşırBüyük organizasyon
Hücresel (cell-based)En küçük blast radiusEn yüksek karmaşıklıkÇok kiracılı SaaS
Kubernetes kritik alanlar
spec:
  replicas: 6                    # N+2: AZ kaybı + deploy dalgası
  template.spec:
    topologySpreadConstraints:      # AZ'lere eşit dağıt
      - maxSkew: 1
        topologyKey: topology.kubernetes.io/zone
    terminationGracePeriodSeconds: 75
    containers:
      - lifecycle.preStop.exec.command:
          # 1) sağlığı kapat 2) LB fark etsin 3) açık istekleri bitir
          # Bu olmadan HER deploy 502 üretir — en sık "deploy hatası"
          ["/bin/sh","-c",
           "curl -XPOST localhost:9000/drain && sleep 45"]
        readinessProbe.periodSeconds: 2
        livenessProbe.failureThreshold: 6  # agresif = restart fırtınası
        resources:
          requests: { cpu: "1", memory: 1Gi }
          limits:   { memory: 2Gi }   # CPU limit KOYMAYIN
---
kind: PodDisruptionBudget       # bakım hepsini birden almasın
spec: { minAvailable: "70%" }
Çoklu bölge: en zor kısım durum tutarlılığı. Active-active'te rate limit sayaçları, idempotency kayıtları ve önbellek bölgeler arasında tutarlı olmalıdır. Senkron replikasyon bölgeler arası gecikmeyi her isteğe ekler — kabul edilemez. Pratik çözüm: kotayı bölge başına bölüştürmek ve nihai tutarlılığı kabul etmek. "Dakikada 1000" yerine "her bölgede 500 + %10 tolerans".
Kubernetes Gateway API'nin persona modeli. Sorumluluklar üç kaynağa bölünür: GatewayClass (altyapı ekibi), Gateway (küme operatörü — dinleyiciler, sertifikalar), HTTPRoute (uygulama ekibi). Bu ayrım, "gateway config'ini kim değiştirebilir" sorusunu bir organizasyon tartışması olmaktan çıkarıp RBAC'a dönüştürür — ve annotation cehennemine dayalı Ingress'in en büyük problemini çözer.
Performans · interaktif İleri

Gateway ek yükü = toplam gecikme − arka uç gecikmesi

Tanım basit; zor olan bu farkı dürüstçe ölçmek. Aşağıdaki etiketler açılıp kapatıldığında bütçenin nasıl değiştiği görülebilir.

Hangi özellik ne kadara mal oluyor tek istek · aynı bölge
ek yük p50
tahmini p99
senkron ağ çağrısı
Ürün / sınıfTeknolojiBildirilen ek yük
NGINX / APISIXC + LuaJITMilisaniye altı
EnvoyC++Milisaniye altı
KrakenDGo, durumsuzÇok düşük
KongNGINX + Lua1–3 ms (eklenti yüküne göre)
TykGo1–3 ms
Spring Cloud GatewayJVM + NettyBirkaç ms (JIT sonrası)
Bu tablo, ürün seçiminde tek başına kullanılmamalıdır. Rakamların çoğu satıcı tarafından yayımlanmıştır; her biri farklı donanım, yük profili, eklenti seti ve ölçüm metoduyla üretilmiştir. "18 bin RPS" ile "70 bin RPS" arasındaki fark çoğu zaman üründen değil testten gelir. Ayrıca çoğu kurumun gerçek tepe yükü bu rakamların çok altındadır.

Doğru kurgu · üç ölçüm, iki fark

  • Temel çizgi: yük üreticiden doğrudan arka uca (gateway yok)
  • Boş gateway: yalnızca yönlendirme yapan gateway
  • Tam gateway: üretimdeki bütün filtreler açık

(2)−(1) = proxy maliyeti · (3)−(2) = politika maliyeti. Bu ikisini ayırmazsanız "gateway yavaş" diye yanlış sonuca varırsınız; oysa yavaş olan genelde tek bir filtredir.

Kritik hata · coordinated omission

Kapalı model yük üreticileri (her sanal kullanıcı yanıtı bekleyip sonra yeni istek gönderir) sistem yavaşladığında istek göndermeyi de yavaşlatır. Böylece en kötü gecikmeler hiç ölçülmez ve p99 yapay olarak düşük çıkar. Yeşil görünen yük testlerinden sonra gelen üretim kesintilerinin klasik sebebi budur.

Çözüm: açık model — sabit varış hızı, yanıt gelsin gelmesin. k6'da constant-arrival-rate, Gatling'de constantUsersPerSec.

JVM tabanlı gateway'lerde ölçüm tuzağı. İlk dakikaların ölçümü anlamsızdır: JIT derleyici henüz sıcak kod yollarını optimize etmemiştir. En az 3–5 dakika ısınma uygulayın ve ısınma verisini sonuçtan çıkarın. Aynı sebeple yeni örnekleri trafiğe kademeli alın (slow start).
Monitoring · canlı panel İleri Olay senaryosunu başlatın

Gateway, sistemin tek en değerli gözlem noktasıdır

Bütün trafiği görür, her isteğin sonucunu bilir ve kullanıcı deneyimine en yakın ölçümü üretir. Bu avantajı doğru kullanmak, onlarca servise ayrı ayrı enstrümantasyon eklemekten hızlı sonuç verir.

Gateway kontrol paneli · canlı tüm sinyaller normal

RED · servis odaklı

Rate (istek/sn) · Errors (hata oranı) · Duration (gecikme dağılımı). Gateway metriklerinin doğal biçimi; her rota için ayrı toplanmalı.

USE · kaynak odaklı

Utilization · Saturation · Errors. Gateway'in kendi sağlığı: CPU, bağlantı havuzu doluluğu, event loop gecikmesi, dosya tanıtıcıları.

Four Golden Signals

Latency, Traffic, Errors, Saturation. RED ile örtüşür; farkı doygunluğu öne çıkarmasıdır — kesintiden önceki tek erken uyarı çoğu zaman odur.

MetrikNedenAlarm sinyali
Rota bazlı istek / hata / gecikmeSorunun hangi API'de olduğunu tek bakışta gösterirRota SLO'su ihlali
Upstream gecikmesi vs toplamGateway mi arka uç mu yavaş — en sık sorulan soruFark aniden büyürse gateway'de sorun var
429 oranıSaldırı mı, hatalı entegrasyon mı, limit mi darAni sıçrama veya sürekli yükseliş
401 / 403 oranıToken ve yetki yanlış yapılandırmalarıYeni sürüm sonrası artış = kırık entegrasyon
Devre kesici durumuHangi arka uç kesildiOPEN'a geçişte anında bildirim
Retry oranıRetry fırtınasının erken göstergesiToplam isteğin %10'unu aşması
Bağlantı havuzu doygunluğuGörünmeyen darboğazların en yaygını%80 üzerinde sürekli seyir
TLS el sıkışma hatasıSertifika süresi, mTLS sorunlarıSıfırdan farklı her değer incelenmeli
Sertifika kalan ömrü47 günlük sertifika çağında hayati< 20 gün uyarı, < 7 gün sayfa
Sürüm bazlı kullanımSunset kararlarını veriyle almakEski sürümde beklenmeyen artış
Kardinalite tuzağı. path'i metrik etiketi yapmak en yaygın ve en pahalı hatadır: /siparis/12345 gibi kimlik içeren yollar her istekte yeni bir zaman serisi üretir ve metrik sisteminizi (ve faturanızı) patlatır. Etiket route_id olmalıdır — yani /siparis/{id} kalıbı. Spring Cloud Gateway'de spring.cloud.gateway.requests tam olarak bunu yapar; path etiketi varsayılan olarak kapalıdır.
Sebebe değil, belirtiye alarm kurun. "CPU %90" bir alarm değildir. "Ödeme rotasında hata bütçesi saatte %20 tükeniyor" bir alarmdır.
Çok pencereli yakma hızı: hızlı yanma (5 dk × 1 sa) → sayfa; yavaş yanma (6 sa × 3 gün) → iş günü ticket. Böylece hem ani kesinti hem yavaş ilerleyen bozulma yakalanır, gereksiz gece bildirimi oluşmaz.
Güvenlik kontrol listesi İleri Tablo satırlarına tıklayın

Gateway yalnızca "izin ver / verme" demez — şekli bozuk isteği hiç içeri almaz

OWASP API Security Top 10 (2023) üzerinden değerlendirme: gateway bu risklerin ne kadarını çözer, ne kadarı uygulama ekibinin sorumluluğunda kalır? Satırlara tıklandığında her risk için gateway'in somut katkısı ve sınırı görüntülenir.

#RiskGateway katkısıNasıl
API1Broken Object Level AuthorizationDüşükYalnızca anomali tespiti; asıl kontrol serviste
API2Broken AuthenticationYüksekTekdüze token doğrulama, brute-force limiti, JWKS yönetimi
API3Broken Object Property Level Auth.KısmiYanıt alan filtreleme/maskeleme, şema ile fazla alan engelleme
API4Unrestricted Resource ConsumptionYüksekRate limit, kota, gövde limitleri, timeout, yük atma
API5Broken Function Level AuthorizationYüksek (kaba)Rota bazlı rol/scope kontrolü, admin yollarını kapatma
API6Unrestricted Access to Sensitive Business FlowsKısmiBot tespiti, davranış hızı limitleri, cihaz parmak izi
API7Server Side Request ForgeryYüksekEgress allowlist, iç ağ hedeflerini reddetme
API8Security MisconfigurationYüksekMerkezî TLS, CORS, güvenlik header'ları, hata normalizasyonu
API9Improper Inventory ManagementYüksekTek envanter, sürüm/sunset takibi, gölge API tespiti
API10Unsafe Consumption of APIsKısmiGiden (egress) gateway ile üçüncü taraf yanıtlarını sınırlama

CORS · yanlış

  • Allow-Origin: * + Allow-Credentials: true
  • Gelen Origin'i doğrulamadan yansıtmak
  • Preflight'ı kimlik doğrulamanın arkasına koymak
  • CORS'u güvenlik kontrolü sanmak — o bir tarayıcı politikasıdır

CORS · doğru

  • Origin allowlist'i merkezî olarak gateway'de
  • OPTIONS'ı kimlikten önce yanıtla
  • Yalnızca gereken metot ve header'lar
  • Vary: Origin ekle — yoksa önbellek yanlış yanıt servis eder

TLS · 2026 tabanı

  • TLS 1.3 varsayılan; 1.0/1.1 kapalı
  • Yalnızca AEAD şifre takımları
  • ECDSA P-256, OCSP stapling açık
  • Partner trafiğinde mTLS: ayrı dinleyici, ayrı CA

Sertifika otomasyonu

Azami geçerlilik 15 Mart 2026'da 200 güne düşüyor, 2029'a kadar 47 güne inecek. ACME otomasyonu artık bir "iyi olur" değil çalışma şartı.

Gateway'iniz sertifikayı yeniden başlatmadan yükleyebiliyor mu? Hayırsa her 47 günde bir planlı kesinti yaşarsınız.

Şema doğrulama — sözleşmeyi çalışma zamanında dayatmak. OpenAPI/JSON Schema tanımınızı gateway'e yükleyin; uymayan istek servise hiç ulaşmasın (400/422). Bilinmeyen alanları reddedin (additionalProperties: false), Content-Type'ı sabitleyin, JSON derinliği sınırı koyun. Aynı şemayı yanıt tarafında da uygulamak — yanıt şemadan saparsa alarm üretmek — üretimdeki sessiz kırılmaları yakalamanın en ucuz yoludur.
04
Üretimde ayakta tuttukşimdi kendi yolumuzu çiziyoruz
Aşama 4 · Uzman

Ürün seçimi ve kendi gateway'imiz

Son aşama iki soruyu cevaplar: hangi ürünü seçmeliyiz ve hazır ürünlerin yapamadığını nasıl yaparız? Burası, vaka çalışmasının en çok fark yaratan kısmı — çünkü rakiplerinizden ayrıldığınız yer, gateway'inizin sizin alanınızı bilmesi olacak.

14 ürün, dört tür: kütüphane · proxy · yönetilen · API yönetimi
Spring Cloud Gateway'e derin dalış — güçlü ve zayıf yanları
Eklenti mimarileri (Lua · Go · WASM · Java · TS) ve gerçek maliyetler
Custom gateway'in yedi katmanlı iç tasarımı ve efor tahmini
Ürünlerde bulunmayan 14 farklılaştırıcı
Manzara · konumlandırma haritası Uzman Türe veya noktaya tıklayın

Önce türü seçin, sonra ürünü

Gateway ürünlerini tek listede karşılaştırmak yanıltıcıdır, çünkü aynı işi yapmıyorlar. Aşağıdaki harita on iki ürünü iki belirleyici eksende konumlandırır: yatayda üstlenilen operasyon yükü, dikeyde özelleştirme derinliği. Balon büyüklüğü ekosistem olgunluğunu gösterir.

Karşılaştırma matrisi
ÜrünTemelEklenti diliConfig kaynağıGüçlü yanıZayıf yanıİdeal senaryo
Spring Cloud GatewayJVM · Netty / ServletJava / KotlinYAML, Java DSL, dinamikSpring ile tam bütünleşme; sınırsız özelleştirme; ekibin bildiği dilJVM bellek/ısınma; hazır eklenti pazarı yokJVM kurumları, iş kuralına yakın özel gateway
Ocelot / YARP.NETC#JSON / kod.NET ekipleri için doğal; YARP hızlı ve MS destekliEkosistem küçük.NET ağırlıklı kurumlar
EnvoyC++C++ / WASM / ext_procxDS (gRPC, dinamik)Endüstri standardı veri düzlemi; olağanüstü trafik yönetimiTek başına gateway değil — kontrol düzlemi şartK8s-native platformlar, çok dilli ortam
Apache APISIXNGINX + LuaJITLua, Java, Go, Python, WASMetcd (watch, ms)100+ hazır eklenti; DB yok; sıcak yeniden yüklemeetcd operasyonu; Lua bilen ekip bulmak zorYüksek performans + zengin özellik
KongNGINX + LuaJITLua, Go PDKPostgreSQL / DB-lessEn olgun ekosistem; geniş eklenti pazarıConfig yayılımı saniyeler sürebilir; kurumsal maliyetKurumsal API programı
TraefikGoGo middlewareOtomatik keşif (K8s, Docker)Sıfır yapılandırmaya en yakın; otomatik TLSGenişletilebilirlik sınırlıKüçük–orta K8s kümeleri
KrakenDGo, durumsuzGo eklentileriStatik JSON (DB yok)Yanıt birleştirme odaklı; çok düşük gecikmeDinamik yapılandırma zayıfMobil/BFF için çok kaynaklı birleştirme
TykGoGo, gRPC, JSRedis + Mongo/PostgresAçık kaynak çekirdek güçlü; hava boşluklu kurulumYönetim özellikleri ücretli panelde; Go eklenti sürüm uyumuŞirket içi, regülasyonlu ortamlar
NGINXCLua (OpenResty), njsDosya + reloadEfsanevi kararlılık; her yerde bilinirAPI yönetimi katmanı yokBasit ters vekil + TLS
AWS API GatewayYönetilenLambda authorizer, VTLKonsol / IaCSıfır operasyon; IAM ve Lambda ile derin bütünleşme10 MB yük sınırı; ölçekte pahalı; satıcı bağımlılığıAWS serverless, düşük–orta hacim
Azure API ManagementYönetilenXML policyPortal / IaCKurumsal özellikler hazır; Azure AD bütünleşmesiXML policy hantal; WebSocket/SSE/gRPC akış desteği sınırlıMicrosoft ekosistemi
ApigeeYönetilenJS, Java calloutApigee konsoluEn olgun API yönetimi; güçlü analitik ve monetizasyonKurulum karmaşık; öğrenme eğrisi dik; pahalıBüyük API programları, dış ekosistem
WSO2 API ManagerJavaJava, mediationKendi kontrol düzlemiAçık kaynak tam API yönetimi; olgun AI gatewayAğır; kaynak tüketimi yüksekŞirket içi kurumsal API yönetimi
GraviteeJavaJava eklentiKendi kontrol düzlemiOlay güdümlü/asenkron API'lerde (Kafka, MQTT) farklılaşırTopluluk küçükREST + event-driven birlikte
Nasıl okunmalı. Bu tablo bir sıralama değil, bir eleme aracıdır. Kararın %70'ini üç şey belirler: (1) ekibinizin hâkim olduğu dil ve işletim modeli, (2) çalıştığınız platform (K8s / VM / serverless), (3) API'nin dış geliştiricilere sunulan bir ürün olup olmadığı. Performans farkları çoğu kurumun gerçek yükünde belirleyici olmaz.
Kıyaslama · interaktif Uzman Soldan ürün seçin

Aynı altı eksende, on iki ürün

Ürün karşılaştırmalarının çoğu tek boyutta (genelde performans) yapılır ve yanıltıcıdır. Aşağıdaki eksenler, bir gateway kararında gerçekten belirleyici olan boyutlardır. Soldan bir ürün seçildiğinde radar grafiği, güçlü/zayıf yanları ve "nerede kullanılmalı" değerlendirmesi birlikte güncellenir.

Tüm ürünler tek ekranda eksene göre sırala:
1 — zayıf 3 — orta 5 — güçlü satıra tıklandığında ürün yukarıdaki arenada açılır

Radar nasıl okunmalı?

Geniş alan "daha iyi ürün" demek değildir. Her ürün belirli eksenlerde bilinçli olarak ödün verir: KrakenD durumsuzluğu seçerek esneklikten, Traefik basitliği seçerek genişletilebilirlikten feragat eder. Aranması gereken şey en geniş alan değil, sizin öncelik eksenlerinizde en dolu profildir.

Puanların niteliği

Bu puanlar, yayımlanmış kıyaslamalar ve ürün yeteneklerinden derlenmiş göreli değerlendirmelerdir; laboratuvar ölçümü değildir. Amaçları sıralama üretmek değil, ödünleşimi görünür kılmaktır. Nihai karar kendi ortamınızdaki PoC ölçümüyle verilmelidir.

Eksik olan yedinci eksen

Radarda gösterilemeyen ama pratikte en ağır basan boyut: ekibinizin o ürünü işletebilme becerisi. Lua bilmeyen bir ekipte APISIX'in eklenti esnekliği kâğıt üstünde kalır. Bu eksen kuruma özgü olduğu için değerlendirmeyi okuyanın eklemesi gerekir.

Tercih edilen ürün Uzman

Spring Cloud Gateway: içeriden bakış

Bir gateway, ömrünün neredeyse tamamını arka ucu beklerken geçirir. Klasik "istek başına bir iş parçacığı" modelinde 5.000 eşzamanlı istek 5.000 iş parçacığı anlamına gelir. Spring Cloud Gateway, WebFlux ve Netty üzerinde az sayıda olay döngüsü iş parçacığıyla çalışır; bekleme sırasında iş parçacığı serbest kalır.

Spring Cloud Gateway
org.springframework.cloud · 5.0.0 (2025.1 "Oakwood")
Sekmelere tıklayın

İki varyant: WebFlux mü, MVC mi?

  • WebFlux: en yüksek eşzamanlılık, en düşük bellek/istek. Reaktif bilgi gerektirir; hata ayıklama zordur; bloklayan tek bir çağrı event loop'u kilitler.
  • MVC: tanıdık, hata ayıklaması kolay, mevcut bloklayan kütüphanelerle uyumlu. Sanal thread'lerle klasik thread modelinin maliyeti büyük ölçüde kalkar.

Ekibiniz reaktif değilse ve trafiğiniz aşırı uçta değilse MVC varyantı artık savunulabilir bir tercihtir.

Sürüm durumu · Spring Cloud 2025.1 "Oakwood"

25 Kasım 2025'te yayımlandı; Spring Framework 7 ve Spring Boot 4 tabanlı, projeler 5.0.0 sürümünde.

  • Artifact adları ayrıştı: spring-cloud-gateway-server-webflux / -webmvc
  • Tüm public API'de JSpecify ile null-güvenliği
  • Spring Framework retry altyapısına dayanan yeni Retry filtresi
  • Yapılandırma öneki spring.cloud.gateway.server.webflux.* altına taşındı — yükseltmede en çok takılınan nokta budur
Global filtreGörevi
RouteToRequestUrlFilterEşleşen rotanın URI'sinden hedef adresi üretir
ReactiveLoadBalancerClientFilterlb:// şemasını çözer; örnek yoksa varsayılan 503
NettyRoutingFilterİsteği Netty HttpClient ile arka uca taşır
NettyWriteResponseFilterYanıtı istemciye yazar
ForwardRoutingFilterforward://fallback uçları böyle çalışır
WebsocketRoutingFilterws/wss yükseltmelerini yönetir
GatewayMetricsFilterspring.cloud.gateway.requests zamanlayıcısı (routeId, outcome, status…)
LocalResponseCacheCaffeine tabanlı yerel GET önbelleği (varsayılan TTL 5 dk)

Ne zaman doğru seçim

  • Ekip zaten Java/Spring ile çalışıyor
  • Gateway'de gerçekten özel mantık gerekiyor
  • Eureka/Config Server/Micrometer yığını kullanılıyor
  • Mevcut Java kütüphaneleri (HSM, imza, kurum SDK'ları) yeniden kullanılacak
  • Şirket içi, hava boşluklu, regülasyonlu ortam

Ne zaman yanlış seçim

  • Tek düğümde yüz binlerce RPS bekleniyorsa
  • Hazır eklenti pazarı, portal, monetizasyon bekleniyorsa
  • Ekipte Java, JVM ayarı ve GC bilgisi yoksa
  • Saniyeler mertebesinde soğuk başlangıç kabul edilemezse
  • Bellek başına maliyet kritikse
Reaktif yığında en pahalı hata. WebFlux varyantında bir filtre içinde bloklayan çağrı yapmak (JDBC, RestTemplate, Thread.sleep) event loop thread'ini kilitler. Sekiz çekirdekli bir makinede yalnızca birkaç event loop thread'i vardır: birkaç bloklayan çağrı tüm gateway'i durdurabilir. Zorunluysa subscribeOn(Schedulers.boundedElastic()) ile ayrı scheduler'a taşıyın ve BlockHound'u test ortamında açık tutun.
Genişletme & TCO Uzman Eklenti modeline tıklayın

En belirleyici soru: ürünün yapmadığı bir şey nasıl eklenir?

Çünkü mutlaka eklenecektir. Eklenti mimarisi, ürünle birlikte satın alınan en kalıcı teknik borçtur: performans, izolasyon ve geliştirici deneyimi arasındaki ödünleşim beş yıl boyunca sizinle kalır.

Eklenti modeli karşılaştırması Modele tıklayın
ModelÜrünPerformansİzolasyonSıcak yüklemeGeliştirici deneyimi
Lua / LuaJITKong, APISIXNeredeyse yerel (JIT, aynı süreç)Yok — hata proxy'yi düşürebilirAPISIX evet · Kong reloadNiş dil, küçük işe alım havuzu
Go (yerel)Tyk, TraefikÇok yüksek (süreç içi)YokGenelde yeniden başlatmaYaygın dil; sürüm uyumu en sık şikâyet
gRPC / harici süreçTyk, Envoy ext_procDüşük (her çağrıda ağ)Tam (ayrı süreç)EvetHer dil kullanılabilir
WASM (proxy-wasm)Envoy, Istio, APISIXİyi ama yerelden düşük — veri VM'e kopyalanırGerçek sanal alan: çöken eklenti proxy'yi düşürmezEvet — çalışma anındaHata ayıklama belirgin zor; TinyGo standart Go değil
JavaSpring Cloud GW, WSO2İyi (JIT sonrası)YokGenelde yeniden başlatmaEn geniş kurumsal işe alım havuzu
JS / TypeScriptZuplo, Tyk (JS)Ortaİzolat düzeyiEvetEn büyük geliştirici havuzu
Karar kuralı. Eklenti ihtiyacınız nadir ve basitse hazır ekosistem (Kong/APISIX) en verimlisidir. Eklenti ihtiyacınız sürekli ve iş mantığına yakınsa, ekibinizin ana dilinde yazabildiği bir ürün uzun vadede kazanır — çünkü asıl maliyet çalıştırmak değil, bakımını yapabilecek insan bulmaktır.
ÜrünModelReferans fiyatÖlçekte
AWS API GatewaySaf çağrı başınaHTTP $1,00/M · REST $3,50/M100M REST ≈ $350 + ek servisler
Azure APIMKatman + birimBasic v2 ~$145/ay · Premium v2 ~$2.800/ay/birimÇok bölgeli Premium > $10.000/ay
ApigeeÇağrı + ortam$20/M · ortam tabanı $365–$3.431/ayKurumlar $8.000–$25.000/ay
Kong KonnectServis + çağrı aşımı~$105/ay/servis · +$200/ek milyon50M çağrı ≈ yalnız aşım ~$10.000/ay
MuleSoftvCore aboneliği~$1.250/ay/vCore4 vCore ≈ $210.000/yıl
Kendi barındırmaAltyapı + insanTipik $50.000+/yılAsıl kalem sunucu değil, mühendis zamanı
Gizli maliyet kalemleri. Karşılaştırmada çoğu zaman unutulanlar: veri çıkış (egress) ücretleri, geliştirici portalı ek ücreti, SSO/SAML eklentisi, çok bölgeli dağıtım çarpanı, gelişmiş analitik modülü, destek sözleşmesi katmanı ve ilk yıl danışmanlık gideri. Bir "aylık $105" hızla altı katına çıkabilir.
Kendi barındırma ne zaman kazanır? Kabaca: çağrı hacminiz aylık yüz milyonları geçtiğinde, veri yerleşimi/hava boşluğu zorunluluğunuz olduğunda, veya zaten bir platform ekibiniz varken. Aksi hâlde yönetilen bir ürün gerçek TCO'da çoğu kurum için daha ucuzdur — çünkü nöbet, yama ve CVE takibi maliyeti faturada görünmez ama gerçektir.
Karar · interaktif Uzman

Hangi gateway? — üç katmanlı karar akışı

Bu bir kesin hüküm değil, tartışmayı doğru yerden başlatan bir çerçevedir. Her katmanda bir seçim yapıldığında akış aşağı doğru açılır; önceki seçimler görünür kalır ve istendiğinde değiştirilebilir. Sağdaki puan çubukları, seçimlerin ürünleri nasıl ayrıştırdığını gerçek zamanlı gösterir.

Karar akışı 0 / 3 katman
KriterHazır ürünKendi yaz
Zaman baskısıHaftalar içinde üretimAylar
Standart ihtiyaçlar%90'ı hazırHepsini yazarsınız
Alana özgü mantıkEklenti sınırlarına takılırsınızSınırsız
Ekip kapasitesiKüçük ekip yeterKalıcı 1–2 FTE
Güvenlik yaması / CVESatıcı sorumluluğuSizin sorumluluğunuz
Uzun vade (yüksek hacim)Çağrı başına ücret birikirSabit altyapı maliyeti
İşe alım / bilgi aktarımıPiyasada bilen varYalnızca sizde bilen var
Çoğu zaman doğru cevap üçüncü seçenektir. Ne saf "satın al" ne saf "yaz": olgun bir çekirdek + kendi yazdığınız eklentiler. Protokol işini (HTTP/2-3, TLS, bağlantı havuzu, kenar durumlar) kanıtlanmış bir ürüne bırakın; farklılaştığınız yeri — iş kuralına yakın politikaları — kendiniz yazın.
İnşa Uzman

Kavramsal olarak basit: ters vekilin önüne takılmış bir middleware zinciri

Zorluk kavramda değil, ayrıntıda ve dayanıklılıktadır.

#KatmanZorluk kaynağı
1Taşıma — soket, TLS, HTTP/1.1·2·3 ayrıştırmaProtokol kenar durumları: chunked, trailer, 100-continue, HPACK, smuggling
2Rota motoru — eşleme, öncelik, parametreBinlerce rotada hızlı eşleme → radix/trie gerekir
3Filtre boru hattı — pre/post, sıralama, kısa devrePost filtrelerin hata durumunda da çalışması
4Upstream istemcisi — havuz, retry, breaker, akışGövdeyi belleğe almadan akıtmak (zero-copy)
5Yapılandırma — doğrulama, atomik sıcak yüklemeYarım uygulanmış config kesintiden kötüdür
6Telemetri — metrik, log, trace, sağlıkSıcak yolda alokasyon yapmadan ölçmek
7Yönetim yüzeyi — admin API, drain, debugYönetim portunun asla dışarı açılmaması
AşamaKapsamGerçekçi süreEkip
Çalışan prototipYönlendirme, JWT, basit kota, log1–2 hafta1 kişi
PoC / iç kullanım+ breaker, metrik, trace, sıcak config6–10 hafta1–2 kişi
Üretime hazır+ HA, akış, zarif kapanma, admin API, sertleştirme6–12 ay2–3 kişi
SürdürmeCVE, yeni protokoller, nöbetSüresiz1–2 FTE kalıcı
Go üretim disiplinli iskelet
// Filtre = klasik middleware. Zincir dıştan içe kurulur.
type Filtre func(http.Handler) http.Handler

func Zincir(h http.Handler, f ...Filtre) http.Handler {
    for i := len(f) - 1; i >= 0; i-- { h = f[i](h) }
    return h
}

func main() {
    hedef, _ := url.Parse("http://siparis-servisi:8080")
    proxy := httputil.NewSingleHostReverseProxy(hedef)

    // KRİTİK: bağlantı havuzu. Varsayılan Transport her istekte
    // yeni TCP+TLS kurabilir; keep-alive ek yükü kat kat düşürür.
    proxy.Transport = &http.Transport{
        MaxIdleConns:        1024,
        MaxIdleConnsPerHost: 256,   // varsayılan 2 — en sık atlanan
        IdleConnTimeout:     90 * time.Second,
        ForceAttemptHTTP2:   true,
    }

    // İç hatayı asla sızdırma; normalize edilmiş gövde döndür.
    proxy.ErrorHandler = func(w http.ResponseWriter,
                             r *http.Request, err error) {
        metrik.UpstreamHata.WithLabelValues(rotaId(r)).Inc()
        w.WriteHeader(http.StatusBadGateway)
        w.Write([]byte(`{"hata":"upstream_erisilemiyor"}`))
    }

    h := Zincir(proxy,
        Korelasyon,            // en dış: her şeyi görür ve ölçer
        Metrik,
        HeaderTemizle,         // ucuz, erken
        GovdeLimiti(1<<20),     // pahalı işlerden ÖNCE
        Kimlik,                // JWT doğrulama
        HizSiniri,             // kota (kimlikten sonra)
        DevreKesici,
        Zamanasimi(2*time.Second),
    )

    srv := &http.Server{
        Addr:              ":8443",
        Handler:           h,
        ReadHeaderTimeout: 3 * time.Second, // slowloris
        MaxHeaderBytes:    16 << 10,
    }
    log.Fatal(srv.ListenAndServeTLS("cert.pem", "key.pem"))
}

Java · Netty / WebFlux

Kurumsal kütüphaneler hazır (HSM, imza, LDAP); ekip zaten biliyor; SCG'yi temel alıp üstüne yazabilirsiniz. Eksi: bellek tabanı, JIT ısınması, reaktif hata ayıklama.

Go · net/http

Standart kütüphanede hazır ters vekil; tek ikili dosya; öngörülebilir bellek. Sıfırdan başlıyorsanız en iyi verim/çaba oranı.

Envoy + kendi kontrol düzleminiz

En akıllı hibrit yol. Veri düzlemini yazmazsınız — protokol işini kanıtlanmış C++ yapar; siz yalnızca xDS konuşan bir servis yazarsınız.

En sık kaçırılan seçenek. "Custom gateway" ihtiyacı neredeyse her zaman politika ihtiyacıdır, protokol ihtiyacı değil. Kimse HTTP/2 çerçeve ayrıştırıcısı yazmak istemez; herkes "kurum hiyerarşisine göre kota" ister. Bu ayrımı yaparsanız iş, sıfırdan gateway yazmaktan bir kontrol düzlemi veya eklenti seti yazmaya iner — süre aylardan haftalara düşer, risk kat kat azalır.
Dinamiklik · canlı Uzman Yayımla düğmesine basın

Kendi gateway'iniz dinamik olabilir mi? — Evet, ve olmak zorundadır

Custom gateway'i başarısız kılan tek özellik genellikle şudur: her rota değişikliği bir yeniden derleme ve deploy gerektirir. Bu durumda gateway, ürün ekiplerinin darboğazına dönüşür ve insanlar onu baypas etmenin yollarını arar. Dinamiklik bir "güzel olur" özelliği değil, custom gateway'in varlık şartıdır.

tüm düğümler güncel sürüm v41

Dinamikliğin dört seviyesi

  • Seviye 0 · Statik: rota kodda; değişiklik = derleme + deploy. Kabul edilemez.
  • Seviye 1 · Yeniden yükleme: dosya değişir, süreç SIGHUP alır. Bağlantılar kesilebilir; NGINX modeli.
  • Seviye 2 · Anket (polling): düğümler periyodik olarak depoyu sorar. Basit; gecikme anket aralığı kadar (Kong'un varsayılan ~5 sn modeli).
  • Seviye 3 · İzleme (watch/push): depo değişikliği anında iter. Milisaniye yayılım; etcd watch (APISIX) veya xDS akışı (Envoy) modeli. hedef
Custom gateway için pratik tavsiye: Seviye 3'ü sıfırdan yazmak yerine hazır bir izlenebilir depo kullanın. etcd, Consul veya Kubernetes CRD'leri zaten "değişti" bildirimi üretir; gateway'in yapması gereken tek şey bu akışa abone olup atomik olarak yeni yapılandırmaya geçmektir.

Atomik geçişin anatomisi — en kritik 20 satır

Go sıcak yapılandırma · yarışsız
// Yapılandırmayı DEĞİŞMEZ (immutable) bir anlık görüntü olarak tut.
// İstek yolunda asla kilit alma: atomic.Value okuma maliyeti ~0'dır.
type Snapshot struct {
    Surum  int
    Rotalar *radix.Tree   // önceden derlenmiş eşleştirici
    Politika map[string]Politika
}

var aktif atomic.Value // *Snapshot tutar

// İSTEK YOLU — kilitsiz, her istekte çağrılır
func rotaBul(yol string) *Rota {
    return aktif.Load().(*Snapshot).Rotalar.Lookup(yol)
}

// KONTROL YOLU — yalnızca config değişince çağrılır
func uygula(ham []byte) error {
    yeni, err := ayristir(ham)
    if err != nil { return err }          // 1) ŞEMA doğrula
    if err := yeni.Dogrula(); err != nil { return err } // 2) ANLAM doğrula
    if yeni.RotaSayisi() < mevcut().RotaSayisi()/2 {   // 3) AKIL SAĞLIĞI
        return errors.New("rota sayısı yarıya düştü — reddedildi")
    }
    snap := derle(yeni)                        // 4) önceden derle
    aktif.Store(snap)                          // 5) TEK ATOMİK ADIM
    gecmisEkle(snap)                           // 6) geri alınabilirlik
    return nil
}

Yarım uygulanmış config, kesintiden kötüdür

Rotaları tek tek güncelleyen bir uygulama, güncelleme sırasında hiçbir sürüme ait olmayan karma bir durumdan geçer: bazı istekler eski politikayla, bazıları yenisiyle değerlendirilir. Bu durum sessizdir, hata üretmez ve yeniden üretilemez. Tek çare, yapılandırmayı bölünemez bir anlık görüntü olarak değiştirmektir.

Üç kapı, sırayla

  • Şema: alanlar ve tipler doğru mu? (ucuz, ilk)
  • Anlam: rota gölgeleniyor mu, upstream tanımlı mı, kota anahtarı çözülebiliyor mu?
  • Akıl sağlığı: değişimin büyüklüğü makul mü? Cloudflare'in 2025 kesintisi tam olarak bu kapının eksikliğinden doğdu — dosya iki katına çıktı ve kimse sormadı.

Neyi dinamik yapmalı, neyi yapmamalı?

ÖğeDinamik?GerekçeYayılma hedefi
Rota tanımı, upstream, ağırlıkEvet — zorunluGünlük iş; canary ve acil yönlendirme buna bağlı< 5 sn
Kota limitleri ve anahtarlarıEvetKampanya, olay müdahalesi, sözleşme değişikliği< 5 sn
Devre kesici / timeout eşikleriEvetKapasite ve trafik şekli değiştikçe ayarlanır< 30 sn
Yetki kuralları (scope, rol)EvetGüvenlik olayında saniyeler önemlidir< 5 sn
API anahtarı / token iptaliEvet — kritikSızıntı anında yayılım süresi = risk süresidir< 1 sn
Özellik bayrakları, bakım moduEvetOlay müdahalesinin ilk aracı< 5 sn
Filtre zincirinin sırasıDikkatliGüvenlik kararıdır; yanlış sıra sessizce açık üretir → ayrı onayKontrollü
Yeni filtre koduHayır (WASM hariç)Kod yayımlamak deploy'dur; sanal alan yoksa çöken eklenti proxy'yi düşürürDeploy
TLS dinleyici, port, protokolHayırBağlantı kabul katmanı; değişimi zarif yeniden başlatma isterDeploy

Geri alma, yayımlamadan önemlidir

Her yapılandırma sürümü numaralanmalı, saklanmalı ve tek komutla geri alınabilir olmalıdır. Pratik hedef: bozuk config fark edildikten sonra 60 saniye içinde önceki sürüme dönebilmek. Bu yetenek yoksa dinamiklik bir güvenlik açığına dönüşür.

Config de canary'den geçmeli

Yeni yapılandırma önce tek bir düğüme uygulanır; o düğümün hata oranı ve gecikmesi bir süre izlenir; ancak sonra filoya yayılır. Kod için doğal karşılanan bu disiplin, yapılandırma için neredeyse hiç uygulanmaz — ve büyük kesintilerin kaynağı budur.

Kim, ne zaman, neden değiştirdi?

Dinamik yapılandırma denetlenebilir olmalıdır: her değişiklik yazarı, gerekçesi ve önceki değeriyle birlikte kaydedilmelidir. Aksi hâlde "üretimde bu limit neden 40?" sorusunun cevabı kaybolur ve kimse dokunmaya cesaret edemez.

Farklılaştırma · çalışmanın kalbi Uzman Kartlara tıklayın: nasıl uygulanır

Custom gateway'e ne eklenebilir?

Hazır ürünler genel problemleri çözmek zorundadır; bu yüzden sizin alanınıza özgü olanı çözemezler. Aşağıdaki on dört başlık, piyasa ürünlerinde ya hiç bulunmayan ya da yalnızca ilkel biçimde bulunan yeteneklerdir.

A

Alana özgü, bağlam farkında politika

Kurum hiyerarşisine göre yetki (ana şirket alt şirketin verisini görebilir), çalışma saati/resmî tatil kısıtı, kanal bazlı limit (şube ≠ mobil ≠ ATM), risk skoruna göre uyarlanan kontrol.

Neden üründe yok: bu kurallar iş modelinizin parçası; hiçbir satıcı "resmî tatilde EFT limitini düşür" kuralını genel eklenti olarak yazamaz.

B

Idempotency ve istek birleştirme

Idempotency-Key'i gateway seviyesinde yönetmek: aynı anahtarla gelen ikinci istek birincinin sonucunu döndürür; eş zamanlı gelen ikinci istek birincinin bitmesini bekler (in-flight coalescing), yeni çağrı üretmez.

Değeri: çift ödeme, çift sipariş, çift SMS problemini tek noktada çözer. Açık Bankacılık düzenlemeleri zaten bu header'ı şart koşar.

C

Varlık farkında önbellek geçersizleştirme

Gateway PUT /musteri/42 isteğini gördüğünde GET /musteri/42 ve /musteri/42/adresler önbelleklerini otomatik geçersiz kılar.

Neden üründe yok: hiçbir genel ürün bu ilişkiyi bilemez; sundukları tek şey TTL'dir — yani ya bayat veri ya düşük isabet.

D

Maliyet muhasebesi ve geri faturalandırma

Her isteğe maliyet birimi atamak; kiracı/ekip/ürün kırılımında "bu API bize ayda ne kadara mal oluyor, kim tüketiyor" raporu üretmek.

Değeri: ürünlerin analitik modülü istek sayısı verir, maliyet vermez. Gateway bu hesabı yapabilecek tek yerdir.

E

Regülasyon katmanı

KVKK/GDPR kapsamında TCKN, IBAN, telefon maskeleme; veri yerleşimi kuralına göre bölge yönlendirme; değiştirilemez (WORM) denetim kaydı; imzalı denetim izi.

Ürünlerde kısmen var ama regex tabanlı geneldir. Gerçek ihtiyaç alan bazlıdır: "yanıttaki musteri.tckn, rol OPERATOR ise maskelensin".

F

Legacy protokol köprüleri

SOAP ↔ REST, ISO 8583 (kart işlemleri), sabit uzunluklu kayıt, EBCDIC/AS-400 ana bilgisayar, XML dijital imza doğrulama, HSM ile imzalama.

Neden üründe yok: hazır ürünler modern protokolleri hedefler; kurumsal dünyada ayakta olan sistemlerin çoğu bunları konuşur ve her kurumun lehçesi farklıdır.

G

SLA ve maliyet farkında yönlendirme

VIP müşteriyi ayrılmış havuza; kiracıyı kendi hücresine/shard'ına; pahalı dış sağlayıcı yerine ucuzu seçip yalnızca hatada pahalıya düşme; veri yerleşimine göre bölge seçme.

Neden üründe yok: ürünler ağırlık ve sağlık bilir; müşteri değeri ve maliyet bilmez.

H

Yerleşik mock, kayıt/tekrar, hata enjeksiyonu

Servis henüz yazılmadıysa sözleşmeye uygun sahte yanıt; gerçek trafiği kaydedip test ortamında oynatma; belirli header'la yapay gecikme/hata (chaos); yanıtın OpenAPI'den sapmasını yakalama (contract drift).

Değeri: ön uç arka ucu beklemez; dayanıklılık kodunuz gerçekten test edilir; dokümantasyon-gerçeklik kayması üretimde yakalanır.

I

İş önceliğine göre yük atma

Kapasite daraldığında rapor ve öneri isteklerini atıp ödeme ve girişi korumak; ödeme yapan müşteriye deneme kullanıcısından öncelik vermek.

Neden üründe yok: hangi işin kritik olduğu tamamen size özgü. Netflix bunu kendi gateway'ine gömdü ve gerçek kesintide kullanıcı isteklerinde >%99,4 erişilebilirlik korurken ön yüklemeyi %20'ye düşürdü.

J

Kimlik zenginleştirme ve bağlam sözleşmesi

Token'dan çözülen kimliği kurum kodu, yetki seti, abonelik katmanı, dil, para birimiyle zenginleştirip downstream'e tek ve standart bağlam header'ı olarak vermek.

Dikkat: bu header imzalanmalı veya yalnızca mTLS'li iç ağdan kabul edilmelidir; aksi hâlde kimlik taklidi için mükemmel bir araç olur.

K

Kuruma özel katalog ve otomasyon

İç servis kataloğuyla entegre sahiplik; rota başına SLO ve nöbetçi ekip; deprecated endpoint'i çağıran ekibe otomatik bildirim; gerçek kullanımdan otomatik SDK üretimi.

Değeri: ürünlerin portalları dış geliştiriciler içindir; asıl acınız genelde ekipler arası koordinasyondur.

L

AI ve ajan trafiği katmanı

İstek yerine token bazlı kota; prompt injection ve veri sızıntısı filtreleri; anlamsal önbellek (benzer soruya modeli tekrar çağırmadan cevap); model yönlendirme ve yedekleme; MCP sunucularına erişimi yöneten ajan gateway'i; araç çağrılarının onay ve denetim kaydı.

2026 gerçeği: alanın en hızlı büyüyen kısmı ve klasik ürünlerin eklentilerle yetiştirmeye çalıştığı yer.

M

Davranışsal anomali ve BOLA sezgisi

Her tüketici için normal davranış profili çıkarmak ve sapmayı yakalamak. En kıymetlisi: tek bir token'ın kısa sürede çok sayıda farklı nesne kimliğine erişmesi — OWASP API1 sömürüsünün klasik imzası.

Neden üründe yok: genel WAF'lar imza tabanlıdır, iş akışı anomalisini bilmezler. Gateway tüm trafiği tek yerden gören tek bileşendir.

N

Alan bazlı yetki ve sürüm eşleme

Yanıttan role göre alan çıkarmak (aynı endpoint, farklı görünürlük); eski istemcilere yeni alanları gizlemek veya eski alan adlarını yeni modele eşlemek.

Uyarı: bu gövde dönüşümüdür ve tüm uyarıları geçerlidir. Kısa vadeli geçiş aracı olarak kullanın, kalıcı mimari olarak değil.

Denge cümlesi — bu listeyi okurken unutmayın. Yukarıdaki her madde gateway'i biraz daha güçlü, biraz daha da iş mantığına yakın hâle getirir; her ekleme "dağıtık monolit" tuzağına bir adım yaklaştırır. Sağlıklı ölçüt: bu yetenek, birden çok servisin paylaştığı ve tekdüze olması gereken bir politika mı, yoksa tek bir servisin iş kuralı mı? Birincisiyse gateway'e aittir; ikincisiyse asla.
Tuzaklar Uzman Kartlara tıklayın: belirti ve çözüm

Gateway projelerinin çoğu teknoloji seçiminden değil, bunlardan biri yüzünden başarısız olur

01

Akıllı gateway / yeni monolit

İş mantığı yavaş yavaş sızar. Her ürün değişikliği gateway deploy'u gerektirir, sahiplik belirsizleşir, test imkânsızlaşır. Uber'de bu, mühendisliğin %40'ının aynı repoya kod yazdığı 1 milyon satırlık bir uygulamaya dönüştü.

02

Tek paylaşılan dev filo

Tüm trafik, tüm ekipler, tek küme. Bir ekibin hatası herkesi düşürür; deploy takvimi kilitlenir; kimse değişiklik yapmaya cesaret edemez.

03

Nesne yetkisini gateway'e taşımak

Gateway'in iş verisine erişmesi gerekir → veritabanına bağlanır → artık bir servistir. OWASP API1 zaten gateway'de çözülemez.

04

Servisleri korumasız bırakmak

"Gateway zaten doğruluyor" varsayımı. Tek bir yanlış ağ kuralı veya SSRF açığı, tüm sisteme tam yetkili erişim demektir.

05

Config'i koda bağlamak

Rota eklemek uygulama deploy'u gerektiriyorsa gateway ürün ekiplerinin darboğazına dönüşür ve insanlar onu baypas etmenin yollarını arar.

06

Sınırsız retry, hiyerarşisiz timeout

Küçük bir yavaşlamayı tam kesintiye çeviren en hızlı yol. Retry bütçesi ve daralan timeout zinciri tanımlanmadan retry etkinleştirilmemelidir.

07

Kardinalite patlaması

Metrik etiketine ham yol, kullanıcı kimliği veya korelasyon kimliği koymak. Gözlemlenebilirlik maliyetiniz gateway'in kendisini geçer.

08

Kıyaslamaya göre ürün seçmek

0,3 ms fark, ekibin ürünü işletebilme becerisinin yanında önemsizdir. Seçimi işletilebilirlik, işe alım ve ekosistem belirlemelidir.

09

Sürüm başına rota çoğaltmak

Her küçük değişiklikte yeni sürüm. Üç yıl sonra kimsenin silemediği kırk rota, kırk farklı davranış ve devasa bir test yüzeyi kalır.

Uygulama Uzman Planı oynatın

PoC'nin amacı "gateway kurmak" değil, karar için kanıt üretmektir

Seçilen ürün bizim yükümüzde, bizim politikalarımızla, bizim ekibimizle işliyor mu?

11 haftalık plan · animasyonlu
HaftaKonuYapılacaklarÇıktı
1İskeletGateway + 5 servis, statik rotalar, sağlık uçlarıÇalışan uçtan uca akış
2Keşif & rotaServis keşfi, predicate seti, iç/dış ayrım, rewriteRoute ve Trafik Yönetim Tasarımı
3KimlikOIDC, JWT, JWKS önbelleği, scope, header temizlemeAuthentication / Authorization Akışları
4KotaRedis limiter, KeyResolver'lar, 429 sözleşmesi, fail politikalarıRate Limit Entegrasyon Tasarımı
5GözlemlenebilirlikCorrelation ID, W3C trace, RED metrikleri, dashboardMonitoring ve Alarm Yaklaşımı
6DayanıklılıkRota bazlı timeout/retry/CB matrisi, fallback, hata enjeksiyonuRoute Bazlı Dayanıklılık Politikaları
7GüvenlikCORS, güvenlik header'ları, TLS/mTLS, gövde limitleri, şema doğrulamaGüvenlik Kontrol Listesi
8Sürüm geçişiAğırlıklı yönlendirme, hedefli canary, sunset, geri alma tatbikatıCanary senaryo kayıtları
9PerformansÜç aşamalı yük testi, p50–p99 ek yük, kapasite eğrisiPerformans ve Gecikme Test Sonuçları
10ErişilebilirlikÖrnek/Redis/IdP/config store kesme, bölge kaybı tatbikatlarıYüksek Erişilebilirlik Tasarımı
11KararAlternatif ürünle karşılaştırma, TCO, ekip geri bildirimiSonuç ve Mimari Öneri

Beş örnek servis

  • katalog — okuma ağırlıklı, önbelleklenebilir
  • siparis — yazma, idempotent değil
  • odeme — kritik, sıkı politika
  • kullanici — kimlik zenginleştirme kaynağı
  • legacy-soap — protokol köprüsü

Her biri yapay gecikme ve hata enjekte edebilen uçlara sahip olmalı — dayanıklılık testleri buna dayanır.

Başarı kriteriHedef
Gateway ek yükü (p50)< 2 ms
Gateway ek yükü (p99)< 10 ms
Kota doğruluğu (3 örnek)sapma < %2
Devre kesici tepki süresi< 5 sn
Canary geri alma süresi< 60 sn
Deploy sırasında istek kaybı0
Yeni rota ekleme (deploy'suz)< 10 dk
En değerli kriter sonuncusudur. Teknik metrikler ürünler arasında genelde birbirine yakın çıkar. Ayrımı yapan şey şudur: gateway'i kullanacak ürün ekipleri onu kullanabiliyor mu? PoC'nin son haftasında başka bir ekipten bir mühendisi çağırın, dokümantasyonla baş başa bırakın ve yeni bir rotayı politikalarıyla eklemesini isteyin. Aldığınız süre, önümüzdeki üç yılın habercisidir.
Geriye bakış

Dört aşamada nereden nereye geldik?

Başladığınızda "gateway nedir" sorusu vardı. Şimdi elinizde bir ürün seçim çerçevesi, bir dayanıklılık matrisi, bir güvenlik kontrol listesi ve kendi gateway'inizi yazma kararı için gereken her şey var.

1 · TEMEL
2 · UYGULAMA
3 · İLERİ
4 · UZMAN
TEMEL
tek giriş noktasıpolitika uygulama noktası veri düzlemi / kontrol düzlemifail static proxy · LB · mesh farkıkuzey-güney / doğu-batı filtre zinciripre / post simetrisi BFF ve federation'ın yeri
UYGULAMA
predicate + filter + urirota gölgeleme tuzağı servis keşfi ve yayılım gecikmesioutlier detection iç / dış / partner ayrımıJWT claim doğrulama phantom tokentoken exchange kaba vs ince taneli yetkijeton kovası atomik Lua limiterfail-open / fail-closed güven sınırı ve header hijyenitraceparent deprecation / sunset
İLERİ
daralan timeout bütçesiretry bütçesi ve jitter devre kesici durum makinesiTimeLimiter = breaker'ın gözü congestion collapseuyarlanabilir eşzamanlılık öncelikli yük atmaön imzalı URL canary · shadow · blue-greenblast radius ve hücreler fail static bağımlılıklarcoordinated omission RED · kardinalite tuzağıyakma hızı alarmı OWASP API Top 10 eşlemesi
UZMAN
dört ürün türüeklenti mimarileri TCO ve gizli maliyetleryap vs satın al yedi katmanlı custom tasarımEnvoy + kendi kontrol düzlemin 14 farklılaştırıcıidempotency coalescing varlık farkında önbellekregülasyon katmanı anti-pattern'lerPoC ve başarı kriterleri
Sonuç

Sonuç ve mimari öneri

Araştırmanın tamamından çıkan on iki madde. Bunlar tercih değil, tekrar tekrar doğrulanmış pratiklerdir.

01

Gateway kurun, ince tutun

Merkezileştirmenin faydası tartışmasız; riski tektir ve bilinir: iş mantığının sızması. "Gateway'e ne girmez" listesi yazılı hâle getirilmelidir.

02

Maruziyete göre ayırın

Dış, partner ve iç trafiği ayrı filolarda çalıştırın. Aynı teknoloji, ayrı dağıtım. En düşük maliyetli blast-radius azaltma yöntemi.

03

Kimlik gateway'de, yetki iki yerde

Kimlik doğrulama tekdüze biçimde gateway'de. Kaba yetki gateway'de, nesne yetkisi serviste. Servisler gateway'e körü körüne güvenmesin.

04

Jeton kovası + rota bazlı fail politikası

Varsayılan algoritma jeton kovası, dağıtık sayaç atomik Lua ile. Her rotanın "Redis düşerse ne olur" cevabı yazılı olsun.

05

Dayanıklılık politikası rota bazlıdır

Tek global timeout/retry/CB ayarı yoktur. Altı sütunlu matrisi yapılandırmaya dönüştürün ve yeni rota eklerken zorunlu kılın.

06

Retry'ı bütçeleyin

Yalnızca idempotent, en fazla 1–2 deneme, jitter'lı geri çekilme, %10 retry bütçesi. Bütçesiz retry küçük olayları tam kesintiye çevirir.

07

SPOF'u kırın

Çoklu AZ, N+2 örnek, fail-static kontrol düzlemi. İstek yolundaki senkron bağımlılıkları sayın. Kritik sistemlerde hücresel dağıtımı ciddi değerlendirin.

08

Config'i de kademeli yayın

Cloudflare'in 2025 kesintisi kod değil veri yüzündendi. Yapılandırma ve politika verisi de canary'den, boyut/şema doğrulamasından geçmeli.

09

Ek yükü dürüstçe ölçün

Üç aşamalı test, açık model yük üreteci, JVM'de ısınma. Satıcı kıyaslamalarını karar girdisi değil ön eleme olarak kullanın.

10

Ürünü ekibinize göre seçin

JVM + özel politika → Spring Cloud Gateway · K8s-native çok dilli → Envoy Gateway / APISIX · kurumsal portal → Kong / WSO2 / Apigee · AWS serverless → AWS API Gateway.

11

Sıfırdan yazmayın — eklenti yazın

Protokol katmanını kanıtlanmış bir ürüne bırakın; farklılaştığınız yeri kendiniz yazın. "Custom gateway" ihtiyacının %90'ı aslında budur.

12

Farkı alan bilginizden çıkarın

Hiçbir ürün kurum hiyerarşinizi, idempotency ihtiyacınızı, regülasyon yükümlülüğünüzü veya iş önceliklerinizi bilemez. Gateway'inizi ayıran şey hız değil, bu bağlamı bilmesi olacak.

DönemHedefKapsam
0–3 ayTemeli kurPoC'yi tamamla, ürünü seç, dış gateway'i tek bir alanla üretime al. Kimlik, kota, correlation ID, temel metrikler.
3–6 ayYaygınlaştır ve sertleştirTüm dış trafiği taşı, iç/partner filolarını ayır, dayanıklılık matrisini uygula, canary'yi otomatikleştir, SLO ve alarm setini kur.
6–12 ayFarklılaştırAlana özgü eklentiler (idempotency, kimlik zenginleştirme, maliyet muhasebesi, öncelikli yük atma), self-servis rota yönetimi, sürüm otomasyonu, çoklu bölge.
Tek cümlede ne öğrendik: Her serviste tekrar eden çapraz kesen görevleri tek bir politika noktasında toplayıp; kimliği zorunlu, yetkiyi katmanlı, kotayı atomik, dayanıklılığı rota bazlı ve yapılandırmayı kademeli yayılan hâle getirerek — ve o noktayı çoğaltıp bağımlılıklarını fail-static tasarlayarak — sistemi hem hızlandıran hem koruyan bir giriş kapısı kurmayı; ürün seçiminin ekip becerisiyle, farklılaşmanın ise alan bilgisiyle yapıldığını.
1 / 46
gezin · O tüm slaytlar · Home başa · F tam ekran · R tekrar