Monolitik bir REST API'sini bir mikro hizmet mimarisine taşımayı düşünüyorum ve veri depolama konusunda biraz kafam karıştı. Gördüğüm gibi, mikro hizmetlerin faydalarından bazıları şunlar olabilir:
- Yatay olarak ölçeklenebilir - Yük ve / veya aşağıya inen bir sunucu ile başa çıkmak için bir mikro hizmetin birden çok yedek kopyasını çalıştırabilirim.
- Gevşek bir şekilde birleştiğinde - Diğerlerini değiştirmek zorunda kalmadan mikro servislerin iç uygulamalarını değiştirebilirim ve bunları bağımsız olarak konuşlandırıp değiştirebilirim ...
Benim sorunum veri depolama ile ilgili. Gördüğüm gibi birkaç seçenek var:
- Tüm mikro servisler tarafından paylaşılan tek bir Veri Tabanı servisi - bu durum, gevşek kuplajın herhangi bir yararını tamamen ortadan kaldıracak gibi görünmektedir.
- Her mikro hizmette yerel olarak kurulu bir veritabanı örneği - Bunu yatay ölçeklemenin bir yolunu göremiyorum, bu yüzden bunun bir seçenek olacağını düşünmüyorum.
- Her mikro hizmetin kendine ait bir veritabanı servisi vardır - bu, en çok ümit verici görünüyor, çünkü gevşek bağlanma ve yatay ölçeklemenin faydalarını koruyor (gereksiz veritabanı kopyalarını kullanarak ve / veya birden fazla yerde paylaşarak)
Bana göre, üçüncü seçenek tek seçenek gibi görünüyor, ancak bana inanılmaz derecede ağır geliyor ve çok ince bir çözüm. Eğer doğru anlıyorsam, o zaman 4-5 mikroservisti olan basit bir uygulama için, 16-20 sunucuyu çalıştırmak zorunda kaldım - mikro servis başına iki gerçek mikro servis örneği (sunucu arızası durumunda ve aksama süresi olmadan devreye alma için) ve mikro hizmet başına iki veritabanı hizmeti örneği (sunucu arızası durumunda vb.).
Açıkçası bu, biraz saçma görünüyor. Gerçekçi bir projenin muhtemelen 4-5'ten fazla hizmete sahip olacağını akılda tutarak, basit bir API çalıştırmak için 16-20 sunucu? Bunu açıklayacağım eksik olan bazı temel kavramlar var mı?
Cevap verirken yardımcı olabilecek bazı şeyler:
- Bu projenin tek geliştiricisiyim ve öngörülebilir gelecek için olacak.
- Node.js ve MongoDB kullanıyorum, ancak dille-agnostik cevaplarla ilgilenirim - bir cevap sadece yanlış teknolojileri kullanıyorum olabilir!