Jika Anda memang menggunakan layanan-layanan microser untuk mendapatkan keuntungan dari skalabilitas, kopling longgar, dan modifikasi independen yang mudah dari masing-masing layanan, Anda harus tetap menggunakannya semaksimal mungkin.
Arsitektur keseluruhan
Saya pikir pendekatan terbaik adalah:
- memiliki layanan mikro untuk manajemen informasi pengguna umum;
- menyimpan informasi pengguna khusus microservice (mis. profil, otorisasi, preferensi) di setiap microservice (menggunakan rujukan dari id umum)
Bacaan tambahan:
- Artikel ini menjelaskan dengan sangat baik arsitektur dan pemikiran seperti ini, dengan kasus otorisasi tertentu.
- Artikel ini menjelaskan tantangan dan solusi untuk manajemen identitas pengguna, untuk menghindari semua layanan untuk mengakses repositori yang sama.
- Artikel ini menjelaskan cara menggunakan JWT untuk meneruskan identitas pengguna di antara layanan (mencatat bahwa beberapa informasi dasar dapat diberikan dalam token id, yang menghindari keharusan untuk menanyakan layanan pengguna satu lagi setelah login, setidaknya untuk yang sangat mendasar informasi).
Berbagi kode
Sekarang jika Anda menyetujui solusi di atas, kami memiliki layanan microservice (enkapsulasi model domain untuk pengguna) dan semua layanan lainnya adalah konsumen dari microservice yang sama. Pertanyaannya adalah untuk mengetahui apakah Anda ingin:
- baik setiap layanan mikro untuk menemukan kembali kode konsumen, mengikuti dogma pemisahan yang kuat untuk memungkinkan siklus rilis yang fleksibel dan berbeda,
- atau untuk membagikan kode konsumen sebagai bagian dari perpustakaan, mengingat informasi mendasar ini merupakan perpanjangan dari pola infrastruktur "sasis" .
Saya tidak akan mengambil posisi yang jelas tentang hal itu, karena ada perang pendapat tentang topik pembagian kode ini, dan saya tidak berpikir bahwa saya berada dalam posisi untuk mengambil posisi objektif. Ini sudah ada beberapa bacaan tambahan:
- Artikel ini menganggap tidak ada solusi terbaik, dan semuanya tergantung pada tujuan Anda
- Posisi artikel ini adalah bahwa berbagi kode adalah buruk hanya jika membuat sambungan yang kuat, dan berbagi kode dapat membawa beberapa sinergi
- Artikel ini (dari orang-orang yang mengimplementasikan microservices pada skala) bersikeras perlunya memiliki bangunan terpisah, dan potensi masalah penonaktifan kode lama. Memiliki perpustakaan bersama untuk dikonsumsi dengan manajemen versi yang solid tidak mencegah praktik yang baik ini.
Pendapat saya sendiri tentang itu adalah bahwa Anda TIDAK HARUS BERBAGI kode antara penyedia-pengguna dan konsumen-pengguna, untuk menghindari penggabungan yang ketat. Namun Anda DAPAT BERBAGI kode konsumsi-pengguna antara konsumen jika Anda memiliki manajemen versi yang kuat. Pendekatan ini akan memiliki beberapa keunggulan:
- Layanan pelanggan yang berbeda dapat dibuat dengan versi berbeda dari kode konsumsi pengguna yang digunakan bersama (selama versi tersebut kompatibel dengan penyedia-pengguna independen). Fleksibilitas yang sama dengan menciptakan kembali roda tetapi produktivitas lebih tinggi.
- Anda dapat mengubah layanan penyedia pengguna Anda secara mandiri tanpa berdampak pada konsumen.
- Jika bug ditemukan di sisi konsumsi, Anda bisa memperbaikinya sekali dan menggunakan semua konsumen sebagai yang paling sesuai (terima kasih kepada manajemen versi). Ini bahkan dapat mengarah pada kualitas layanan yang lebih tinggi.
- Jika karena alasan Anda wajib memperbarui API penyedia-pengguna, Anda dapat menggunakan konsumsi pengguna yang diperbarui dengan lebih cepat. Jika Anda menjaga layanan penyedia lama dan baru aktif selama transisi, kemungkinan berbagi ini dapat memungkinkan untuk menonaktifkan versi yang lebih lama dari penyedia konsumen.