İletişim

Mikroservis Mimarisi Nedir?

Kısa tanım

Mikroservis mimarisi, bir uygulamanın her biri belirli bir iş yeteneğinden sorumlu, bağımsız olarak geliştirilip dağıtılabilen ve kendi verisine sahip küçük servisler hâlinde kurgulanmasıdır. Servisler ağ üzerinden API çağrıları veya mesajlarla haberleşir. Bağımsız ölçekleme ve ekip özerkliği sağlar; karşılığında dağıtık sistem karmaşıklığı, ağ hataları ve veri tutarlılığı gibi ciddi bir operasyon yükü getirir.

Diğer adları: Mikroservis, Mikroservisler, Microservices, Mikro hizmet mimarisi

API ağ geçidinin isteği her biri kendi veritabanına sahip ve ayrı yayına alınan küçük servislere dağıttığı mikroservis mimarisi

Monolitle karşılaştırınca

Klasik bir monolitte uygulamanın tamamı tek bir kod tabanı olarak derlenir ve tek parça hâlinde yayına alınır. Mikroservis mimarisinde ise aynı uygulama iş yeteneklerine göre bölünür. Bir e-ticaret sistemini düşünün: katalog, sepet, ödeme ve kargo ayrı servislerdir; her birinin kendi kod tabanı, kendi veritabanı ve kendi yayın takvimi vardır. Ödeme servisinde yapılan bir değişiklik için katalog yeniden dağıtılmaz.

Servisler birbirleriyle iki temel yolla konuşur: REST API ya da gRPC gibi senkron çağrılarla veya bir mesaj kuyruğu ya da olay akışı üzerinden asenkron olarak. "Sipariş oluşturuldu" olayını yayımlayıp ilgili servislerin bunu kendi hızında işlemesine izin vermek, servisler arasındaki bağımlılığı azaltır.

Gerçek kazanımlar

  • Bağımsız dağıtım: Ekipler birbirini beklemeden yayın yapabilir; büyük ve riskli toplu sürümler yerine küçük, sık değişiklikler mümkün olur.
  • Seçici ölçekleme: Kampanya döneminde yalnızca yoğunluk alan servis (ör. sepet) büyütülür, tüm uygulama değil.
  • Hata izolasyonu: İyi tasarlandığında, öneri servisinin çökmesi ödeme akışını durdurmaz.
  • Ekip özerkliği: Her ekip kendi servisinin sahibidir. Bu, birçok ekibin aynı üründe çalıştığı büyük organizasyonlarda belirleyici bir avantajdır.

Karşılığında ödenen bedel

  • Ağ güvenilmezdir. Bir fonksiyon çağrısı, gecikebilen ya da yarıda kesilebilen bir ağ isteğine dönüşür. Zaman aşımları, yeniden denemeler ve devre kesici (circuit breaker) gibi önlemler zorunlu hâle gelir.
  • Veri tutarlılığı zorlaşır. Servisler arasında tek bir veritabanı işlemi (transaction) yoktur. Sipariş, ödeme ve stok güncellemesinin birlikte tutarlı kalması için saga gibi desenler ve "nihai tutarlılık" (eventual consistency) kabul edilmelidir.
  • Gözlemlenebilirlik şarttır. Bir isteğin beş servisten geçtiği bir sistemde hata ayıklamak; merkezi log, metrik ve dağıtık izleme (distributed tracing) olmadan pratikte mümkün değildir.
  • Operasyon yükü çoğalır. Her servisin kendi CI/CD hattı, container imajı, izleme ayarları ve güvenlik güncellemeleri olur.
  • Sözleşmeler yönetilmelidir. Bir servisin API'sindeki değişiklik, onu kullanan diğer servisleri bozmamak için sürümlenmelidir.

Modüler monolit: çoğu zaman daha dürüst bir başlangıç

Modüler monolit, tek parça hâlinde yayına alınan ama içinde sınırları sıkı biçimde korunan modüllerden oluşan bir uygulamadır. Modüller birbirinin tablolarına doğrudan dokunmaz, yalnızca tanımlı arayüzler üzerinden konuşur.

Modüler monolitMikroservisler
DağıtımTek birimHer servis ayrı
Modüller arası çağrıSüreç içi fonksiyon çağrısıAğ isteği veya mesaj
Veri tutarlılığıTek veritabanı işlemiyle sağlanabilirSaga, nihai tutarlılık
Operasyon yüküDüşükYüksek
En uygun olduğu durumKüçük ve orta ekipler, alan sınırları henüz netleşmemiş ürünlerÇok sayıda bağımsız ekip, belirgin şekilde farklı ölçekleme ihtiyaçları

En kötü sonuç ise "dağıtık monolit"tir: servisler ayrı ayrı çalışır ama aynı veritabanını paylaşır ya da her yayında birlikte dağıtılmak zorundadır. Bu durumda iki yaklaşımın da avantajı kaybolur, yalnızca maliyetleri kalır. İyi modüllenmiş bir monolitten, somut bir ihtiyaç doğduğunda tek bir modülü ayrı servise çıkarmak, baştan onlarca servisle başlamaktan genellikle daha az risklidir.

Karar vermeden önce sorulacak sorular

  • Birbirinden bağımsız yayın yapması gereken birden fazla ekip var mı?
  • Bileşenlerin ölçekleme ihtiyaçları gerçekten birbirinden çok farklı mı?
  • Alan sınırları (hangi verinin hangi servise ait olduğu) net mi?
  • Otomatik dağıtım, merkezi loglama ve izleme altyapısı hazır mı?

Bu soruların çoğuna yanıt "hayır" ise, mikroservislerin getireceği karmaşıklık büyük olasılıkla sağlayacağı faydadan fazladır.

İlgili terimler

← Sözlüğe dön