Saya baru mengenal layanan microser, dan dari pemahaman saya, DDD mengatakan agar layanan microser dibangun di sekitar domain bisnis. Ini berarti layanan-layanan microsoft yang baik akan seperti ScheduleScheduler dan SendNotification dalam konteks sistem pemesanan pertemuan.
Dalam contoh ini, kedua layanan mikro ini akan memerlukan akses ke data pengguna untuk memenuhi fungsi bisnis mereka, dan saya berjuang dengan cara terbaik untuk menyediakannya.
Bagi saya, Pengguna tampak seperti objek yang harus ada sebagai entitas di dalam layanan mikro , tetapi harus ada di sebagian besar layanan mikro karena data pengguna diperlukan hampir di mana-mana. Ini juga memperkenalkan banyak duplikasi.
Opsi lainnya adalah memiliki layanan microser pengguna yang menyediakan operasi CRUD pada basis data pengguna. Ini kemudian dapat digunakan oleh microservices lain untuk mengakses data pengguna, tetapi masalah yang saya miliki dengan itu adalah layanan pasangan erat bersama-sama ke titik di mana kita berakhir dengan monolit terdistribusi, yang sedikit lebih baik daripada monolit itu sendiri.
Apakah alasan saya tampaknya valid? Bagaimana orang lain menghadapi masalah?
sumber
Jawaban:
Jika Anda benar-benar membutuhkan objek / model / catatan Pengguna yang sama di sebagian besar layanan microser Anda, Anda mungkin tidak memerlukan layanan microser terpisah sama sekali ATAU mereka seharusnya menjadi objek-agnostik sejauh pengetahuan mereka berjalan. Dengan demikian, setiap layanan mikro mengelola sub-jenis model Pengguna dengan data yang diperlukan untuk fungsinya, dengan kunci yang digunakan untuk membedakan Pengguna itu. Di dunia yang ideal, dengan cara itu Anda dapat melakukan mutasi yang diperlukan dan menyebarkan perubahan di seluruh sistem melalui semacam broker acara (dengan asumsi Anda memiliki arsitektur yang dikendalikan oleh peristiwa), jika tidak, setiap layanan harus mengetahui beberapa (atau semua) layanan lain dan apa yang harus mereka lakukan dan jenis objek apa yang mereka harapkan terima.
Perlu diingat bahwa dalam lingkungan layanan mikro yang benar, setiap layanan microser diharapkan memiliki penyimpanan data sendiri yang terisolasi dari sisa sistem, mendukung pernyataan awal saya bahwa Anda harus membuang konsep entitas Pengguna sepenuhnya.
Sebagai contoh, sebuah layanan mikronik SendNotification hanya akan menerima objek dengan pengenal websocket (yang diteruskan ke seluruh layanan, akhirnya mencapai yang ini) dan data yang seharusnya dikembalikan ke pengguna, dan mungkin saja akan memverifikasi bahwa bidang yang diperlukan ada dan dorong pemberitahuan ke saluran yang sesuai oleh pengidentifikasi WS. Itu tidak harus tahu jenis objek yang ditanganinya sama sekali.
sumber