Microservice Nedir?

İngilizce: Microservice

Mikro hizmet mimarisi, büyük uygulamayı bağımsız geliştirilen, dağıtılan ve ölçeklenen küçük servisler halinde tasarlar.

Microservice Nedir?

Microservice ya da mikro hizmet mimarisi, tek parça bir uygulamayı iş kabiliyetlerine göre ayrılmış küçük servislere böler. Örneğin kullanıcı yönetimi, ödeme, fatura, bildirim ve raporlama ayrı servisler olarak geliştirilebilir.

Her mikro hizmet kendi kod tabanına, dağıtım sürecine ve çoğu zaman kendi veritabanına sahip olur. Servisler birbirleriyle HTTP tabanlı API’ler, mesaj kuyrukları veya olay akışları üzerinden konuşur.

Nasıl Tasarlanır?

  • Servis sınırı: Teknik katmana göre değil, iş kabiliyetine göre belirlenmelidir.
  • Bağımsız dağıtım: Bir servisin yeni sürümü diğer servisleri yeniden yayınlamadan canlıya alınabilmelidir.
  • Veri sahipliği: Her servis kendi verisinin kaynağı olmalı; ortak veritabanı bağımlılığı azaltılmalıdır.
  • Gözlemlenebilirlik: Log, metrik ve trace olmadan dağıtık hataları bulmak zorlaşır.
  • Dayanıklılık: Zaman aşımı, yeniden deneme ve circuit breaker gibi kalıplar gerekir.

İş Dünyasında Kullanımı

Mikro hizmetler özellikle farklı ekiplerin aynı ürün üzerinde paralel çalıştığı, bazı alanların diğerlerinden çok daha fazla ölçeklenmesi gerektiği veya modüllerin bağımsız geliştirilmek istendiği ürünlerde anlamlıdır. Bir pazaryeri uygulamasında arama, sepet, ödeme ve kargo servisleri ayrı ölçeklenebilir.

Bu mimari her zaman daha basit değildir. Ağ gecikmesi, dağıtık transaction, versiyon uyumu ve izleme maliyeti artar. Bu nedenle önce sınırları iyi kurulmuş modüler monolit, sonra gerekirse mikro hizmet geçişi daha sağlıklı olabilir.

Mikro hizmetlerde dış trafiği yönetmek için API Gateway, servisler arası standart iletişim için de sıkça REST API kullanılır.

API Sözleşme Testi

API sözleşme testi, tüketici beklentileriyle sağlayıcı yanıtlarını OpenAPI veya Pact gibi sözleşmeler üzerinden karşılaştırır.

API Gateway

API Gateway, istemciler ile servisler arasına girerek yönlendirme, kimlik doğrulama, kota, gözlemleme ve sürümleme görevlerini toplar.

BFF (Backend for Frontend)

BFF, web ve mobil gibi farklı arayüzler için ayrı backend katmanı kurarak API yanıtlarını istemciye göre şekillendirir.

Circuit Breaker

Circuit breaker, bağımlı servisler hata verdiğinde çağrıları geçici keserek zincirleme arıza ve kaynak tüketimini azaltan desendir.

DDD

DDD, karmaşık iş alanlarını domain modeli, bounded context ve ortak dil etrafında yazılım mimarisine taşıyan tasarım yaklaşımıdır.

Dağıtık İzleme (Distributed Tracing)

Dağıtık izleme, bir isteğin mikroservisler arasında geçtiği adımları trace kimliğiyle takip ederek gecikme ve hata kaynağını gösterir.

GraphQL Federation

GraphQL Federation, bağımsız ekiplerin şemalarını birleştirerek tek GraphQL supergraph sunmasını sağlayan mimaridir.

Kubernetes

Kubernetes, konteynerle çalışan servisleri çoklu sunucu üzerinde dağıtma, ölçekleme, güncelleme ve iyileştirme için yönetir.

Load Balancer

Load balancer, gelen ağ trafiğini birden fazla sunucu arasında dağıtarak yüksek erişilebilirlik ve performans sağlayan sistem bileşenidir.

REST API

REST API, HTTP yöntemleriyle kaynakları okuma ve değiştirme üzerine kurulu, entegrasyonlarda yaygın kullanılan web servis tasarımıdır.