System Design

API Gateway Kılavuzu: Ölçeklenebilir ve Güvenli Mikro Servisler Tasarlamak

Monolitik uygulamalar mikro servis mimarilerine evrildikçe, trafik, güvenlik ve veri dönüşümünü yönetmenin karmaşıklığı üstel olarak artar. Bu zorluğun ön saflarında API Gateway yer alır. Sadece basit bir ters vekilden çok daha fazlası olan bir API Gateway, tüm istemciler için tek giriş noktası olarak hizmet verir ve arka uç servislerinin iç karmaşıklığını soyutlarken kritik çapraz kesim endişelerini sağlar.

API Gateway Nedir?

API Gateway, bir sisteme tek giriş noktası olarak çalışan bir sunucudur. Gelen tüm istekleri ele alan, onları ilgili mikro servislere yönlendiren ve yanıtları toplayan orta adam (man-in-the-middle) rolünü üstlenir. Bir yük dengeleyici veya ters vekile benzese de, dağıtık sistemler için özel olarak tasarlanmış daha geniş bir yetenek seti sunar.

Temel sorumlulukları şunları içerir:

  • Yönlendirme: URL desenlerini belirli mikro servislere eşleme.
  • Kimlik Doğrulama ve Yetkilendirme: Trafiğin arka uca ulaşmadan önce JWT'leri veya API anahtarlarını doğrulama.
  • Hız Sınırlama: DDoS saldırılarını önleme ve adil kaynak kullanımını sağlama.
  • Protokol Çevirisi: Dış protokolleri (HTTP/REST) iç protokollere (gRPC) dönüştürme.

Temel Sorumluluklar Derinlemesine

1. Merkezi Güvenlik

Güvenlik, her mikro serviste asla tekrarlanmamalıdır. Kimlik doğrulamayı gateway seviyesinde ele alarak, hiçbir servisin kimlik doğrulanmamış trafiği almamasını sağlarsınız. Bu, saldırı yüzeyini azaltır ve uyumluluğu basitleştirir.

2. Trafik Yönetimi

Gateway'ler, canary yayınları, A/B testleri ve devre kesicilerin (circuit breaker) uygulanmasına olanak tanır. Aşağı akıştaki bir servis başarısız olursa, gateway hızlıca başarısız olabilir, anlamlı bir hata dönebilir veya trafiği yedek bir servise yönlendirebilir.

3. Yanıt Dönüşümü

Farklı istemciler (mobil, web, IoT) genellikle farklı veri biçimleri gerektirir. Gateway, birden fazla servisten verileri toplayabilir ve yanıtı istemci ihtiyaçlarına göre şekillendirebilir; bu da istemcinin gerektirdiği gidiş-dönüş sayısını azaltır.

Pratik Uygulama Örneği

Aşağıda, Kong (popüler bir açık kaynak API gateway'i) kullanılarak, beyan edici bir YAML dosyası aracılığıyla yapılandırılmış kavramsal bir örnek yer almaktadır. Bu parça, yönlendirmeyi, hız sınırlama için eklenti entegrasyonunu ve temel kimlik doğrulamayı göstermektedir.

# kong.yml
_format_version: "3.0"
_plugins:
  - name: rate-limiting
    config:
      minute: 100
      policy: redis

services:
  - name: user-service
    url: http://user-svc:8080
    routes:
      - name: user-route
        paths:
          - /users
        plugins:
          - name: key-auth
            config:
              key_names:
                - api_key
          - name: rate-limiting
            config:
              minute: 50 # Kullanıcı servisi için daha sıkı sınır

Bu yapılandırmada, /users adresine yapılan herhangi bir istek, geçerli bir api_key başlığı içermelidir. Ayrıca, genel hız sınırı dakikada 100 istek olsa da, kullanıcı servisi aşırı yüklenmeden korunmak üzere 50 istekle sınırlıdır.

API Gateway Ne Zaman Kullanılmalı (ve Ne Zaman Kullanılmamalı)

Güçlü olsa da, bir API Gateway ek bir ağ sıçraması ve potansiyel tek nokta arızası (single point of failure) getirir. Şu durumlarda kullanmayı düşünmelisiniz:

  • Mimarınız sayısız mikro servisten oluşuyorsa.
  • Farklı güvenlik gereksinimlerine sahip dış istemcilere iç servisleri açmanız gerekiyorsa.
  • Merkezi gözlemlenebilirlik (günlük tutma, metrikler, izleme) gerektiriyorsanız.

Ancak, basit etkileşimlere sahip küçük sayıda servisiniz varsa, basit bir yük dengeleyici (Nginx veya HAProxy gibi) yeterli olabilir. Gateway'inizi aşırı mühendislik yapmak, gereksiz gecikmelere ve operasyonel yüklenmeye yol açabilir.

Sonuç

API Gateway, modern mikro servis mimarisinin bir köşe taşıdır. İstemcileri arka uç uygulama detaylarından ayırır, çapraz kesim endişelerini merkezi hale getirir ve temel ölçeklenebilirlik özelliklerini sağlar. Gateway stratejinizi dikkatli bir şekilde tasarlayarak ve doğru aracı seçerek (ister Kong, ister AWS API Gateway, ister Envoy olsun) sağlam, güvenli ve sürdürülebilir dağıtık sistemler inşa edebilirsiniz. Unutmayın: Sadelik anahtardır. Karmaşıklığı yalnızca ölçeğiniz gerektirdiğinde ekleyin.

Share: