Ini benar-benar tergantung pada persyaratan skalabilitas Anda, dan bagaimana / jika instance layanan mikro Anda perlu bekerja sama untuk memberikan hasil tunggal. Ini membantu untuk mengetahui apa timbal baliknya:
Menyimpan semuanya dalam satu basis data
- Konfigurasi lebih mudah
- Tidak diperlukan koordinasi atau komunikasi dengan layanan lain dari layanan Anda
- Lebih mudah untuk menemukan dataset lengkap Anda
- Kinerja sistem dibatasi oleh kinerja basis data
Memisahkan basis data
- Jawaban lengkap untuk permintaan dapat tersebar di seluruh layanan microservice
- Dalam hal ini Anda telah meningkatkan komunikasi dan negosiasi untuk menyelesaikan permintaan
- Menangani data ketika Anda kehilangan simpul microservice itu (bahkan ketika database masih naik, Anda tidak bisa mendapatkannya sampai yang baru dengan konfigurasi yang tepat berdiri kembali)
- Kompleksitas konfigurasi yang meningkat
Apa masalah yang Anda selesaikan?
Dalam beberapa kasus, Anda hanya khawatir tentang data fana. Jika database turun, itu bukan masalah besar. Dalam kasus-kasus itu, Anda bahkan mungkin tidak memerlukan database. Simpan saja semua itu dalam ingatan dan buat semuanya sangat cepat. Ini adalah solusi termudah untuk dikerjakan.
Dalam kasus lain, Anda memerlukan integritas data, tetapi database Anda mampu memperluas kapasitasnya berdasarkan jumlah node yang dimilikinya. Dalam hal ini, satu database mungkin lebih dari cukup, dan mengelola responsnya secara mandiri adalah jawaban yang tepat.
Ada beberapa kasus di antaranya. Misalnya, Anda mungkin memiliki basis data yang spesifik kawasan, jadi untuk setiap instance layanan Anda di wilayah yang berbeda, Anda memiliki basis data yang terpisah. Basis data yang biasanya tidak berfungsi dengan baik di seluruh wilayah, jadi ini adalah cara untuk melokalisasi data sedikit dan mengendalikan koordinasi Anda sendiri.
Ajaran dan Realitas
Saya telah membaca sejumlah artikel tentang layanan microser dan bagaimana modularnya seharusnya. Rekomendasi berkisar dari menjaga ujung depan, layanan mikro, dan tingkat data sebagai satu kesatuan untuk berbagi basis data dan / atau kode ujung depan untuk semua contoh. Biasanya, lebih banyak isolasi memberikan skalabilitas terbesar, tetapi hal itu terjadi dengan meningkatnya kompleksitas.
Jika microservice Anda adalah perhitungan yang berat, masuk akal untuk memungkinkan jumlah skala microservice tersebut sesuai kebutuhan - berbagi database atau bahkan kode front-end tidak melukai atau menghalangi pendekatan ini.
Kenyataannya adalah bahwa kebutuhan spesifik proyek Anda akan membutuhkan serangkaian kompromi yang berbeda untuk menyelesaikan pekerjaan tepat waktu dan menangani beban sistem yang Anda ukur (ditambah sedikit lagi). Pertimbangkan trio front-end, microsrervice, dan tier data yang sepenuhnya terisolasi sebagai tujuan mulia. Semakin banyak permintaan pada sistem Anda, semakin dekat dengan tujuan yang mungkin Anda butuhkan. Kita tidak semua [insert name of highly successful web entity here]
, dan mereka tidak memulai dari mana mereka sekarang. Terkadang Anda hanya perlu memulai dengan situasi yang kurang sempurna, dan bahagia dengan itu.