Kami sedang dalam proses migrasi aplikasi monolitik ke arsitektur layanan mikro. Karena beberapa persyaratan peraturan, kami harus menyimpan data klien dari berbagai negara dalam basis data terpisah (khusus negara). Yaitu US db untuk pelanggan AS, UK db untuk pelanggan UK ...
Desain-desain berikut yang kami pertimbangkan adalah sebagai berikut:
Opsi 1: Aplikasi multi-penyewa dengan dukungan multi-penyewa berhibernasi yang dapat ditingkatkan ke N beberapa kali tergantung pada permintaan (pikirkan pod kubernet). Satu contoh aplikasi ini akan dapat terhubung ke semua database.
Opsi 2: Menyebarkan instance microservice 1 per basis data negara. Dengan gateway API di depan mereka merutekan lalu lintas
Jika Anda merancang jenis sistem ini, apa pilihan Anda?
sumber
Jawaban:
Saya pikir opsi 2 bukan yang buruk, tetapi mungkin tidak diperlukan. Layanan mikro adalah untuk memungkinkan Anda menangani kebutuhan beberapa aplikasi.
Faktor besar di sini, adalah jika ada perbedaan antara kedua skema, dan jika akan ada di masa depan.
Biasanya, saya pikir menggunakan antarmuka untuk repositori tidak perlu; Namun, mungkin sepadan dengan usaha dalam hal ini. Pabrik repositori akan penting bagi Anda.
Masalah saya dengan opsi 1 adalah terlalu spesifik. Anda harus dapat beralih dari pengaturan yang Anda gambarkan, ke dua instance terpisah yang masing-masing menunjuk ke DB-nya sendiri dengan mudah. Aplikasi TIDAK BISA PERAWATAN DI MANA SAJA MENDAPATKAN DATA PERUSAHAAN.
Meskipun skema tidak berbeda untuk dua database Anda yang berbeda, Anda dapat memiliki satu repositori dengan mudah menangani keduanya, tanpa aplikasi mengetahui perbedaannya:
Jika skema DB menjadi berbeda antara AS dan Inggris, maka Anda kemudian akan membagi fungsionalitas menjadi dua repositori yang sama sekali berbeda. Ini akan mudah, karena yang harus Anda lakukan hanyalah mengganti pabrik Anda.
sumber
Saya akan memilih opsi kedua, ini mengurangi gesekan dalam pengembangan dan penyebaran.
Ini akan memungkinkan skalabilitas dan ketersediaan yang lebih baik dan opsi penerapan downtime nol yang lebih baik, karena Anda mendistribusikan aplikasi Anda ke 1 (atau setidaknya satu) instance per wilayah sebagai lawan dari setidaknya satu untuk seluruh dunia.
Karena persyaratan berubah, Anda mungkin memiliki lebih banyak logika bisnis khusus kawasan dan kemungkinan juga perubahan data, saya akan mencoba dan membagi kode dan datanya per wilayah, dan menghindari berbagi logika bisnis khusus kawasan (Anda mungkin akhirnya berbagi beberapa kode inti).
Masuk akal?
sumber