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.
İlgili Terimler
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 GatewayAPI 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 BreakerCircuit breaker, bağımlı servisler hata verdiğinde çağrıları geçici keserek zincirleme arıza ve kaynak tüketimini azaltan desendir.
DDDDDD, 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 FederationGraphQL Federation, bağımsız ekiplerin şemalarını birleştirerek tek GraphQL supergraph sunmasını sağlayan mimaridir.
KubernetesKubernetes, konteynerle çalışan servisleri çoklu sunucu üzerinde dağıtma, ölçekleme, güncelleme ve iyileştirme için yönetir.
Load BalancerLoad balancer, gelen ağ trafiğini birden fazla sunucu arasında dağıtarak yüksek erişilebilirlik ve performans sağlayan sistem bileşenidir.
REST APIREST API, HTTP yöntemleriyle kaynakları okuma ve değiştirme üzerine kurulu, entegrasyonlarda yaygın kullanılan web servis tasarımıdır.