Masih mencoba untuk membungkus kepala saya di sekitar arsitektur microservice karena saya sudah terbiasa dengan pendekatan monolitik
Misalkan kita mencoba membangun sistem pemesanan Uber yang sangat disederhanakan . Untuk menyederhanakan hal yang kita katakanlah kita memiliki 3 layanan dan api gateway dari klien: Booking
, Drivers
, Notification
dan kami memiliki alur kerja berikut:
Saat membuat pemesanan baru:
- Periksa apakah pengguna yang sudah ada sudah melakukan pemesanan
- Dapatkan daftar driver yang tersedia
- Kirim pemberitahuan kepada pengemudi untuk mengambil pesanan
- Sopir mengambil pesanan
Katakanlah semua olahpesan dilakukan melalui panggilan http daripada bus olahpesan seperti kafka untuk menjaga hal-hal sederhana.
Jadi dalam hal ini, saya berpikir bahwa Booking
layanan dapat melakukan pengecekan untuk pemesanan yang ada. Tetapi kemudian siapa yang seharusnya mendapatkan daftar driver dan notifikasi yang tersedia? Saya sedang berpikir untuk melakukannya di tingkat gateway tetapi kemudian sekarang logika dibagi menjadi dua tempat:
Gateway
- dapatkan daftar driver yang tersedia + kirim pemberitahuanBooking
- periksa pemesanan yang ada
Dan saya cukup yakin gateway bukan tempat yang tepat untuk melakukannya tetapi saya merasa jika kita melakukannya dalam Booking
layanan, itu menjadi sangat erat?
Untuk membuatnya lebih rumit, apa yang terjadi jika kita memiliki proyek lain yang ingin menggunakan kembali sistem pemesanan tetapi dengan logika bisnis sendiri di atasnya? Itu sebabnya saya berpikir untuk melakukannya di tingkat gateway sehingga gateway proyek baru dapat memiliki logika bisnis sendiri terpisah dari yang sudah ada.
Cara lain untuk melakukannya saya kira adalah untuk setiap proyek memiliki layanan pemesanan sendiri yang akan berbicara dengan layanan pemesanan inti tetapi saya tidak yakin apa pendekatan terbaik di sini :-)