Mikroservisler
- İngilizcesi
- Microservices
- Türkçe karşılığı
- mikro hizmetler
- Okunuşu
- maykrosörvisiz
Günlük kullanımda iki ad da yaygın.
Kısaca
Mikroservisler, bir uygulamanın ağ üzerinden iletişim kuran, küçük ve bağımsız olarak dağıtılabilen servislere bölündüğü bir mimari tarzdır.
Mikroservisler nelerdir?
Mikroservis mimarisinde her servis kullanıcı hesapları, ödemeler ya da arama gibi tek bir iş yeteneğine sahiptir ve kendi süreci olarak çalışır. Servisler birbirleriyle genellikle HTTP üzerinden ya da mesaj kuyrukları aracılığıyla API'ler yoluyla konuşur ve her biri tipik olarak kendi verisini yönetir. Bağımsız oldukları için ekipler her servisi ayrı ayrı geliştirebilir, dağıtabilir ve ölçekleyebilir.
Mikroservisler genellikle container'lara paketlenir ve Kubernetes gibi bir orkestrasyon platformunda çalışır; CI/CD hatları her servisi kendi takviminde dağıtır. Arama özelliği yoğun trafik alırsa yalnızca arama servisinin daha fazla örneğe ihtiyacı olur. Bir servis çökerse iyi tasarlanmış bir sistem uygulamanın geri kalanını çalışır durumda tutabilir.
Bu esnekliğin bir bedeli vardır. Ağ çağrıları, süreç içi fonksiyon çağrılarından daha yavaş ve daha az güvenilirdir; veri birçok veritabanına dağılır ve on servisten geçen bir isteğin hatasını ayıklamak iyi bir günlükleme, izleme ve iz sürme gerektirir. Servisler arasında veri tutarlılığını sağlamak da tek bir veritabanı işleminden daha zordur.
Mikroservisler, her şeyin tek uygulama olarak dağıtıldığı monolitin karşıtıdır. Esas olarak birçok ekibin tek büyük sistem üzerinde çalışması sorununu çözerler; bu yüzden birçok uzman, iyi yapılandırılmış bir monolitle başlamayı ve servisleri yalnızca açık bir ihtiyaç olduğunda ayırmayı önerir.
Bir bakışta
Önemli noktalar
- Her mikroservis tek bir iş yeteneğini yönetir ve bağımsız olarak dağıtılır.
- Servisler ağ üzerinden API'ler ya da mesajlarla iletişim kurar.
- Her servis genellikle kendi verisine sahiptir.
- Faydaları bağımsız ölçekleme ve dağıtımdır; bedeli operasyonel karmaşıklıktır.
- Mikroservisler, birden çok ekibin geliştirdiği büyük sistemlere uygundur.
Örnek
// Order service: asks the separate inventory service for stock levels
async function placeOrder(productId: string, quantity: number) {
const res = await fetch(`http://inventory-service/stock/${productId}`);
const { available } = await res.json();
if (available < quantity) {
throw new Error("Not enough stock");
}
// Each service owns its data, so orders go into the order service's database
await ordersDb.insert({ productId, quantity });
}Sık sorulan sorular
Mikroservisler ile monolit arasındaki fark nedir?
Monolit tek parça olarak dağıtılan tek bir uygulamadır; mikroservisler ise sistemi bağımsız dağıtılan birçok küçük servise böler. Mikroservisler bağımsız ölçeklemeye ve ekip özerkliğine olanak tanır ama ağ, veri ve operasyon karmaşıklığı ekler.
Mikroservisler ne zaman kullanılmalı?
Mikroservisler en çok, sistemin parçalarını bağımsız olarak dağıtması ve ölçeklemesi gereken birkaç ekibin geliştirdiği büyük uygulamalarda anlamlıdır. Küçük ekipler ve yeni ürünler için monolit genellikle daha hızlı ve basittir.
Mikroservisler birbiriyle nasıl iletişim kurar?
REST, GraphQL ya da diğer RPC tarzı API'ler üzerinden eşzamanlı olarak, ya da bir mesaj aracısı (message broker) aracılığıyla olay ve mesaj yayınlayarak eşzamansız olarak iletişim kurarlar. Eşzamansız mesajlaşma, servisler arasındaki doğrudan bağımlılıkları azaltır.
Sık karşılaştırılanlar
- Monolit vs MikroservislerMonolit tek birim olarak dağıtılan, kurması ve çalıştırması basit bir uygulamadır; mikroservisler ise onu bağımsız dağıtılıp ölçeklenen küçük servislere böler.
- Mikroservisler vs Servis Odaklı MimariSOA kurumsal sistemleri merkezi bir veri yolu ile konuşan ortak servislere böler; mikroservisler ise tek uygulamayı bağımsız dağıtılan küçük servislere böler.
İlgili sayfalar
- MonolitYazılım Mimarisi, s. 25Monolit, tek parça olarak derlenip dağıtılan, tüm özelliklerin tek kod tabanını, tek süreci ve çoğunlukla tek veritabanını paylaştığı yazılım uygulamasıdır.
- APIBackend ve API'ler, s. 2API, bir yazılımın başka bir yazılımdan veri ya da işlem talep etmesini sağlayan, belgelenmiş ve öngörülebilir kurallar bütünüdür.
- DockerDevOps ve Bulut, s. 15Docker, bir uygulamayı ve ihtiyaç duyduğu her şeyi, her makinede aynı şekilde çalışan bir konteyner içinde paketlemeye yarayan açık kaynaklı bir platformdur.
- KonteynerDevOps ve Bulut, s. 28Konteyner, bir uygulamayı bağımlılıklarıyla paketleyip ana makinenin paylaşılan işletim sistemi çekirdeği üzerinde çalıştıran hafif, yalıtılmış bir pakettir.
- KubernetesDevOps ve Bulut, s. 30Kubernetes, konteynerli uygulamaların bir makine kümesi üzerinde dağıtılmasını, ölçeklenmesini ve yönetilmesini otomatikleştiren açık kaynaklı bir sistemdir.
- CI/CDDevOps ve Bulut, s. 9CI/CD, kod değişikliklerini sık sık derleyen, test eden ve yayınlayan otomatik pratikler bütünüdür; yazılım kullanıcılara hızlı ve güvenli biçimde ulaşır.
- Dağıtık SistemYazılım Mimarisi, s. 8Dağıtık sistem, bir ağ üzerinden birlikte çalışan ve kullanıcılarına tek bir sistem gibi görünen bilgisayarlar kümesidir.
- Service DiscoveryYazılım Mimarisi, s. 35Service discovery (servis keşfi), dağıtık bir sistemde servislerin, örnekler başlayıp durdukça değişen diğer servislerin güncel adreslerini bulma yoludur.
- Sidecar DeseniYazılım Mimarisi, s. 37Sidecar deseni, bir uygulamanın yanında yaşam döngüsünü ve ağını paylaşan yardımcı bir süreç çalıştırarak loglama, proxy ya da güvenlik gibi özellikler ekler.
- Servis Odaklı MimariYazılım Mimarisi, s. 36Servis odaklı mimari, kurumsal yazılımı birbiriyle standart sözleşmelerle iletişim kuran, yeniden kullanılabilir ve ağdan erişilebilir servislerden kurar.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin