Saya sedang mempertimbangkan memindahkan REST API monolitik ke arsitektur layanan mikro, dan saya agak bingung tentang penyimpanan data. Seperti yang saya lihat, beberapa manfaat dari layanan microser adalah:
- Dapat diskalakan secara horizontal - Saya dapat menjalankan beberapa salinan berlebihan dari layanan microser untuk mengatasi beban dan / atau server turun.
- Digabungkan secara longgar - Saya dapat mengubah implementasi internal dari layanan microser tanpa harus mengubah yang lain, dan saya dapat secara mandiri menggunakan dan mengubahnya dll ...
Masalah saya adalah dengan penyimpanan data. Seperti yang saya lihat ada beberapa opsi:
- Layanan Database tunggal yang dibagikan oleh semua layanan microser - ini tampaknya sepenuhnya menghilangkan manfaat dari kopling longgar.
- Contoh basis data yang dipasang secara lokal pada setiap layanan mikro - Saya tidak dapat melihat cara penskalaan secara horizontal, jadi saya tidak berpikir itu akan menjadi pilihan.
- Setiap microservice memiliki layanan basis datanya sendiri - ini tampaknya yang paling menjanjikan, karena mempertahankan manfaat dari kopling longgar dan penskalaan horizontal (menggunakan salinan database yang berlebihan dan / atau membagikan beberapa)
Bagi saya, opsi ketiga tampaknya menjadi satu-satunya pilihan, tetapi tampaknya sangat berat bagi saya, dan solusi yang sangat direkayasa. Jika saya memahaminya dengan benar, maka untuk aplikasi sederhana dengan 4-5 microservices saya harus menjalankan 16-20 server - dua instance microservice aktual per microservice (jika terjadi kegagalan server, dan untuk penyebaran tanpa downtime), dan dua contoh layanan database per microservice (dalam hal kegagalan server dll ...).
Sejujurnya, ini agak konyol. 16-20 server untuk menjalankan API sederhana, mengingat bahwa proyek realistis mungkin akan memiliki lebih dari 4-5 layanan? Apakah ada konsep mendasar yang saya lewatkan yang akan menjelaskan ini?
Beberapa hal yang mungkin membantu saat menjawab:
- Saya adalah satu-satunya pengembang di proyek ini, dan akan berada di masa mendatang.
- Saya menggunakan Node.js dan MongoDB, tetapi saya akan tertarik pada jawaban bahasa-agnostik - jawabannya bahkan mungkin karena saya hanya menggunakan teknologi yang salah!