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.
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.
Ö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.
Ö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 |
Her mikroservis kendi CI/CD hattına, sürüm yönetimine sahiptir. Amazon günde binlerce bağımsız servisi deploy eder.
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.
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.
Servislerin IP ve port bilgilerini dinamik olarak yönetir. Kubernetes ortamında pod’lar otomatik keşfedilir, manuel konfigürasyona gerek kalmaz.
“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.
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.
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.
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ış:
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 |
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.