Microservices Design — API Gateway Pattern

Coşkun Kurtuldu
4 min readJan 6, 2021

--

Merhabalar,

Bu yazımda sizlere API Gateway yaklaşımını anlatarak, bir sonraki yazımda Ocelot kütüphanesiyle örneklendirmeye çalışacağım.

“Microservice is a tightly scoped, strongly encapsulated, loosely coupled, independently deployable, and independently scalable application component.”

Microservice’lerin amacı, modüllerin yüksek oranda birleştirildiği ve tek bir büyük parça olarak dağıtıldığı monolitik uygulamaların aksine, uygulamayı gevşek bağlı microservice’lere / modüllere yeterince ayrıştırmak / ayırmaktır. Aşağıdaki microservice’lerin birkaç özelliğine bakabiliriz:

  • Her microservice, uygulamadaki kardeş hizmetlerden bağımsız olarak dağıtılabilir, yükseltilebilir, ölçeklenebilir, bakımı yapılabilir ve yeniden başlatılabilir.
  • Özerk işlevler arası bir ekiple çevik geliştirme ve çevik dağıtım yapılabilir.
  • Teknolojileri kullanma esnekliği ve ölçeklenebilirlik.

Her hizmetin farklı istemcilere (Web, Mobil ve 3. taraf API’leri) hizmet vermek için ayrıntılı API modeline sahip olduğu kendi özel ihtiyaçlarına göre dağıtılır.

Client to Microservices

İstemcinin dağıtılan microservice’lerin her biriyle doğrudan iletişim kurduğunu düşünürken , aşağıdaki zorluklar dikkate alınmalıdır:

  1. Microservice’lerin ayrıntılı API’leri istemciye sunması durumunda, istemci her microservice’e talepte bulunmalıdır. Tipik bir tek sayfada, isteği yerine getirmek için birden çok sunucu gidiş gelişi için gerekli olabilir . Bu, mobil gibi düşük ağ işletim cihazları için daha da kötü olabilir.
  2. Microservice’lerde mevcut olan çeşitli iletişim protokolleri ( gRpc, thrift, REST, AMQP vb. ) , kullanıcının tüm bu protokolleri benimsemesini zor ve hantal hale getirir.
  3. Her microservice’te ortak ağ geçidi işlevlerinin (authentication, authorization, logging) uygulanması gerekir.
  4. İstemci bağlantısını kesmeden microservice’lerde değişiklik yapmak zor olacaktır . Örneğin, microservice’i birleştirirken veya bölerken, istemci bölümünün yeniden kodlanması gerekebilir.

API Gateway

Yukarıda belirtilen zorlukları gidermek için, istemci ile sunucu arasında bulunan ve istemciden sunucuya ters proxy yönlendirme talebi olarak hareket eden ek bir katman eklenir. API Ağ Geçidi adı verilen temel sistem mimarisini kapsayan API’lere tek bir giriş noktası sağlar.

Kısacası, tam olarak API yönetimi gibi davranır ancak API yönetimini API Ağ Geçidi ile karıştırmamak önemlidir .

Microservice API Gateway

API Gateway İşlevleri:

Routing

Diğer tüm sistemleri kapsülleyen ve istemcilerden ayıran ağ geçidi, istemcinin microservice sistemiyle iletişim kurması için tek bir giriş noktası sağlar.

Offloading

API ağ geçidi, her microservice’i uygulamak yerine uç işlevselliklerini birleştirir. İşlevlerden bazıları şunlardır:

  • Authentication and authorization
  • Response caching
  • Retry policies, circuit breaker, and QoS
  • Load balancing
  • Logging, tracing, correlation
  • Headers, query strings, and claims transformation
  • IP whitelisting
  • Centralized Logging (transaction ID across the servers, error logging)
  • Identity Provider, Authentication and Authorization

Backend for Frontend (BFF) pattern

API Gateway modelinin bir varyasyonudur . İstemciler için tek bir giriş noktası yerine, istemciye göre birden çok ağ geçidi sağlar. Amaç, müşterinin ihtiyaçlarına göre özel API’ler sağlamak ve tüm istemciler için jenerik API’ler oluşturmanın neden olduğu birçok bloğu ortadan kaldırmaktır.

Önemli API Gateway Örnekleri

Netflix API Gateway: Zuul

1000'den fazla farklı cihaz türünde (televizyonlar, set‑top boxes, akıllı telefonlar, oyun sistemleri, tabletler vb.) sunulan ve yoğun saatlerde saniyede 50.000'den fazla istek sağlayan Netflix yayın hizmeti, OSFA’da (one-size-fits-all) REST API yaklaşımı ve her cihaz için özel olarak hazırlanmış API Gateway kullandı.

Netflix’teki Zuul 2, Netflix’in bulut altyapısına gelen tüm istekler için ön kapıdır. Zuul 2, ağ geçidimizin Netflix’in bulut sistemlerini işlemesine, yönlendirmesine ve korumasına olanak tanıyan mimariyi ve özellikleri önemli ölçüde iyileştirir ve 125 milyon üyemizin mümkün olan en iyi deneyimi sağlamasına yardımcı olur.

Netflix Bulut Mimarisinde Şekil Zuul (Resim Kaynağı: https://netflixtechblog.com )

Amazon API Gateway

AWS, geliştiricilerin AWS veya diğer web hizmetlerinin yanı sıra AWS Cloud’da depolanan verilere erişen API’ler oluşturabileceği REST, HTTP ve WebSocket oluşturmak, yayınlamak, sürdürmek, izlemek ve güvenli hale getirmek için tam olarak yönetilen hizmet sağlar .

AWS API Gateway

Kong API Gateway

Kong Gateway, microservice’ler için optimize edilmiş, benzersiz gecikme performansı ve ölçeklenebilirlik sunan açık kaynaklı, hafif bir API ağ geçididir. Sadece temel bilgileri istiyorsanız, bu seçenek sizin için çalışacaktır. Daha fazla düğüm eklenerek yatay olarak kolayca ölçeklenebilir. Çok düşük gecikme süresiyle büyük ve değişken iş yüklerini destekler.

Kong API Ağ Geçidi

Diğer API Ağ Geçitleri

API Gateway uygulamasına ilişkin bazı dezavantajlar:

  • Olası tek hata noktası veya darboğaz.
  • API Ağ Geçidi üzerinden ek ağ atlaması ve karmaşıklık riski nedeniyle yanıt süresinde artış.

Faydalı olması dileğimle, sağlıcakla kalın :)

Referanslar:

  1. https://medium.com/dev-genius/microservices-design-api-gateway-pattern-980e8d02bdd5
  2. https://microservices.io/index.html
  3. https://docs.microsoft.com/en-us/azure/architecture/
  4. https://github.com/wso2/reference-architecture/blob/master/api-driven-microservice-architecture.md
  5. https://tsh.io/blog/design-patterns-in-microservices-api-gateway-bff-and-more/
  6. https://www.infoq.com/articles/service-mesh-ultimate-guide/
  7. https://samnewman.io/patterns/architectural/bff/
  8. https://netflixtechblog.com/

--

--

No responses yet