Situasi saat ini
Kami menerapkan (dan sekarang memelihara) aplikasi web belanja online dalam arsitektur layanan mikro.
Salah satu persyaratannya adalah bahwa bisnis harus dapat menerapkan aturan tentang apa yang ditambahkan oleh pelanggan kami ke keranjang mereka, untuk menyesuaikan pengalaman mereka dan pesanan akhirnya. Jelas sekali, mesin aturan bisnis harus diberlakukan, dan kami menerapkan "layanan mikro" khusus untuk ini (jika kami masih bisa menyebutnya begitu).
Selama setahun, mesin aturan ini menjadi semakin kompleks, membutuhkan semakin banyak data (mis. Isi keranjang, tetapi juga informasi pengguna, perannya, layanan yang ada, beberapa informasi tagihan, dll.) Untuk dapat hitung aturan itu.
Untuk saat ini, layanan Microsoft kami shopping-cart
mengumpulkan semua data ini dari layanan Microsoft lainnya. Meskipun sebagian dari data ini digunakan oleh shopping-cart
, sebagian besar waktu itu terutama digunakan untuk memberi makan mesin aturan.
Persyaratan baru
Sekarang tiba kebutuhan untuk aplikasi lain / layanan mikro untuk menggunakan kembali mesin aturan untuk persyaratan yang sama. Dalam situasi saat ini, mereka harus mentransmisikan data yang sama, memanggil layanan mikro yang sama dan membangun (hampir) sumber daya yang sama untuk dapat memanggil mesin aturan.
Melanjutkan apa adanya, kami akan menghadapi beberapa masalah:
- setiap orang (memanggil mesin aturan) harus menerapkan kembali pengambilan data, bahkan jika mereka tidak membutuhkannya sendiri;
- permintaan ke mesin aturan sangat kompleks;
- melanjutkan ke arah ini, kita harus mengangkut data ini di seluruh jaringan untuk banyak permintaan (pikirkan μs A calling μs B memanggil mesin aturan, tetapi A sudah memiliki beberapa data yang dibutuhkan mesin aturan);
shopping-cart
telah menjadi besar karena semua pengambilan data;- Saya mungkin lupa banyak ...
Apa yang bisa kita lakukan untuk menghindari masalah ini?
Idealnya, kami akan menghindari menambah kerumitan pada mesin aturan. Kita juga harus memastikan bahwa itu tidak menjadi hambatan - misalnya beberapa data agak lambat untuk diambil (10s atau bahkan lebih) sehingga kami menerapkan pra-pengambilan shopping-cart
sedemikian rupa sehingga data lebih mungkin untuk berada di sana sebelum kita memanggil aturan mesin, dan pertahankan pengalaman pengguna yang dapat diterima.
Beberapa ide
- Biarkan mesin aturan mengambil data yang dibutuhkan. Ini akan menambah kompleksitas bahkan lebih, melanggar prinsip tanggung jawab tunggal ( bahkan lebih ... );
- Terapkan proxy μs sebelum mesin aturan untuk mengambil data;
- Terapkan "data fetcher" μs yang diminta oleh mesin aturan untuk mengambil semua data yang dibutuhkan sekaligus (penyelidikan komposit).
shopping-cart
, tetapi kami dapat dengan mudah menyesuaikannya untuk kebutuhan layanan-layanan microsoft lainnya (mereka masih terkait dengan pengguna, produk & pemesanan). Seperti yang kita lihat, mereka akan membutuhkan data input yang sama, terutama karena bisnis dapat memilih predikat untuk diterapkan. Semua data disediakan oleh layanan microser lainnya kecuali konten keranjang itu sendiri. Mengambil data tidak rumit per se tetapi menjadi kompleks ketika Anda harus memanggil ~ 10 layanan mikro lainnya dan mempertahankan struktur yang diharapkan oleh mesin aturan.