Mikroservis mimarisi; tek bir uygulamayı, her biri kendi başına çalışan, bağımsız olarak deploy edilebilen(yayımlanabilen) küçük hizmetlere(servislere) bölünmesini amaçlar.
Mikroservis Mimarisi Nedir?
Mikroservis mimarisi; tek bir uygulamayı, her biri kendi başına çalışan, bağımsız olarak deploy edilebilen(yayımlanabilen) küçük hizmetlere(servislere) bölünmesini amaçlar. Bu hizmetler, genellikle hafif HTTP(Hyper Text Transfer Protocol) tabanlı API(Web Servis)’ler veya mesajlaşma altyapıları(örneğin; RabbitMQ, Kafka vb.) üzerinden iletişim kurabilirler.
Neden Mikroservis Mimarisi?
Geleneksel monolitik uygulamalar yani bütün kodların tek bir uygulama içerisine yazılması, projenin bakımı, test edilebilmesi ve ölçeklendirilebilmesi gibi sorunları beraberinde getirmektedir. Yeni bir özellik eklemek veya bir modülü güncellemek tüm sistemi yeniden dağıtmayı(yayımlamayı) gerektirir. Mikroservis mimarisi, bu sorunları çözmek için uygulamanın her bir işlevini bağımsız, küçük ve tek sorumluluklu servislere böler. Böylece yazılım geliştiriciler paralel bir şekilde çalışabilir, her servis kendi yaşam döngüsünde deploy edilir(yayımlanır) ve yüksek trafikli modüller ayrı ölçeklenir.
Mikroservis Mimarisi Nedir?
- Tek Sorumluluk Prensibi: Her mikroservis yalnızca bir işlevi yerine getirir (ör. ödeme işlemi).
- Database per Service: Servisler kendi veritabanı örneklerine veya farklı veri teknolojilerine (SQL, NoSQL) sahip olabilir.
- Bağımsız Teknoloji Seçimi: Java, Go, Python, Node.js, C# gibi dillerden en uygun olanı tercih edilebilir.
- İzole Dağıtım: Her servis ayrı CI/CD sürecinden geçer; hata izole edilir ayrıca tüm sistem etkilenmez.
- İleri C# Kursu eğitimlerinde Microservice Mimarisi oldukça detaylı ve uygulamalı olarak aktarılır.
Örnek Senaryo: Bir e-ticaret uygulaması mikroservis mimari yapısı kullanılarak geliştirildiğinde “Ürün Arama”, “Ödeme İşlemleri” ve “Kullanıcı Yönetimi” gibi servisler birbirlerinden ayrıdır. Ödeme servisi örneğin indirim döneminde yoğun yük altındayken yalnızca o servis ölçeklenir, diğer modüller kesintisiz çalışır.
Monolitik vs. Mikroservis Mimarisi
|
Özellik |
Monolitik Mimari |
Mikroservis Mimarisi |
|---|---|---|
|
Kod ve Veri |
Tek kod tabanı, tek veritabanı |
Her servis ayrı kod tabanı ve veri deposu |
|
Ölçeklenebilirlik |
Tüm uygulama bir bütün olarak ölçeklenir |
Sadece ihtiyaç duyulan servisler ölçeklenir |
|
Dağıtım |
Bir modül değişince tüm uygulama yeniden deploy(yayımlanır) edilir |
Servis bazında bağımsız deploy(yayımlama) |
|
Hata İzolasyonu |
Bir hata tüm sistemi etkileyebilir |
Servis hatası izole edilir, diğerleri çalışmaya devam eder |
Temel Prensipler ve Bileşenler
Bağımsız Dağıtım
Her mikroservis kendi CI/CD hattına, sürüm yönetimine sahiptir. Amazon günde binlerce bağımsız servisi deploy eder.
Heterojen Teknoloji Seçimi
Servisler farklı yazılım dillerinde yazılarak her bir iş yüküne en uygun teknoloji seçilmiş olur. Netflix, veri işleme servislerini Java ile, kullanıcı arayüzü(UI) servislerini JavaScript ile geliştirir.
API Gateway
Tüm clientlar isteklerini tek noktadan alır, yetkilendirme, rate limiting(belirli bir sürede yapılabilecek istek sınırı) ve load balancing(ağ trafiğini birden fazla sunucu kullanarak bölüp, gelen client isteğini ilgili sunuya iletip sunucu trafiği yönetimini sağlayarak yük dengeleme işlemini gerçekleştirme) sağlar. Örneğin “sepete ürün ekle” isteğini doğru mikroservise yönlendirir.
Service Discovery
Servislerin IP ve port bilgilerini dinamik olarak yönetir. Kubernetes ortamında pod’lar otomatik keşfedilir, manuel konfigürasyona gerek kalmaz.
Veri Yönetimi
“Database per Service” modeliyle (yani her servisin kendisine ait bir veritabanının olması) veri izolasyonu sağlanır. Kullanıcı servisi SQL tercih ederken log servisi NoSQL kullanabilir.
İletişim Modelleri
- Senkron (REST/HTTP): JSON tabanlı, anlık istek/yanıt.
- gRPC: Protobuf tabanlı, düşük gecikmeli ikili protokol.
- Asenkron (Kafka, RabbitMQ): Event-driven mimari; servisler olayları kuyruğa yayınlar ve dinler.
Gerçek Hayat Örnekleri
Yemek Çarşısı Analojisi
Bir yemek çarşısında döner, içecek, tatlı tezgâhları bağımsız çalışır. Merkezi ödeme noktası API Gateway, tezgâhlar mikroservislere benzer: Her tezgâh kendi işini yapar, ödeme servisi hatası diğer tezgâhları durdurmaz.
Netflix
Kullanıcı profili, öneri algoritması, video akışı gibi modüller ayrı mikroservislerdir. Yüksek trafikte bile her servis birbirinden ayrı çalıştığı için kesintisiz yayın sağlar.
E-Ticaret Uygulaması Akışı
|
Servis |
Teknoloji |
Görev |
|---|---|---|
|
User Service |
Node.js |
Kullanıcı kaydı ve kimlik doğrulama |
|
Product Service |
Java + Spring |
Ürün kataloğu yönetimi |
|
Order Service |
Go |
Sipariş oluşturma ve takibi |
|
Payment Service |
Python |
Ödeme entegrasyonları |
|
Inventory Service |
.NET |
Stok takibi |
Akış:
- Kullanıcı REST API’den sipariş talebi gönderir.
- Order Service, REST ile stok kontrolü yapar.
- Stok onayı gelirse Payment Service’e gRPC ile ödeme isteği gider.
- Ödeme başarılı ise Kafka üzerinden “OrderCreated” eventi yayınlanır.
- Inventory Service, event’i dinleyip stoğu günceller.
Karşılaşılan Zorluklar ve Çözümler
|
Zorluk |
Önerilen Çözüm |
|---|---|
|
Karmaşıklık |
Kubernetes & Docker ile servis orkestrasyonu |
|
Veri Tutarsızlığı |
Saga Pattern, CQRS ile dağıtık transaction yönetimi |
|
Ağ Gecikmesi |
Redis cache, CDN kullanımı |
|
İzlenebilirlik |
Jaeger(dağıtık uygulamaların izlenmesi), Prometheus(veri toplama) + Grafana(veri görselleştirme) ile monitoring |
Sonuç
Mikroservis mimarisi; bağımsız geliştirme, esnek ölçeklenebilirlik ve hata izolasyonu avantajlarıyla modern yazılım dünyasında öne çıkar. Dağıtık sistem karmaşıklığı, veri tutarlılığı ve izleme zorlukları ise ancak doğru araç Kubernetes, Docker, Saga Pattern, Prometheus ve kültürle aşılabilir. Başarılı bir mikroservis dönüşümü, ekiplerin organizasyonel yapısından teknolojik seçimine kadar bütünsel bir strateji gerektirir.