Layanan yang diberikan (CMS) yang mengontrol model (Produk, mari kita asumsikan satu-satunya bidang yang dimilikinya adalah id, judul, harga) dan layanan B (Pengiriman) dan C (Email) yang harus menampilkan model yang diberikan apa yang harus pendekatan untuk menyinkronkan informasi model yang diberikan di seluruh layanan tersebut dalam pendekatan sumber acara? Mari kita asumsikan bahwa katalog produk jarang berubah (tetapi tidak berubah) dan bahwa ada admin yang dapat mengakses data pengiriman dan email sangat sering (contoh fungsi adalah: B: display titles of products the order contained
dan C:) display content of email about shipping that is going to be sent
. Setiap layanan memiliki DB sendiri.
Solusi 1
Kirim semua informasi yang diperlukan tentang Produk dalam acara - ini berarti struktur berikut untuk order_placed
:
{
order_id: [guid],
product: {
id: [guid],
title: 'Foo',
price: 1000
}
}
Pada layanan B dan C informasi produk disimpan dalam product
atribut JSON di atas orders
meja
Dengan demikian, untuk menampilkan informasi yang diperlukan hanya data yang diambil dari acara yang digunakan
Masalah : tergantung pada informasi apa yang perlu disajikan dalam B dan C, jumlah data dalam acara dapat bertambah. B dan C mungkin tidak memerlukan informasi yang sama tentang Produk, tetapi acara harus mengandung keduanya (kecuali jika kami memisahkan acara menjadi dua). Jika data yang diberikan tidak ada dalam acara yang diberikan, kode tidak dapat menggunakannya - jika kami akan menambahkan opsi warna ke Produk yang diberikan, untuk pesanan yang ada dalam B dan C, produk yang diberikan tidak akan berwarna kecuali jika kami memperbarui acara dan kemudian memutarnya kembali. .
Solusi 2
Kirim hanya panduan produk dalam acara - ini berarti struktur berikut untuk order_placed
:
{
order_id: [guid],
product_id: [guid]
}
Pada layanan, informasi produk B dan C disimpan dalam product_id
atribut di atas orders
meja
Informasi produk diambil oleh layanan B dan C bila diperlukan dengan melakukan panggilan API ke A/product/[guid]
titik akhir
Masalah : ini membuat B dan C tergantung pada A (setiap saat). Jika skema perubahan Produk pada A, perubahan harus dilakukan pada semua layanan yang bergantung padanya (tiba-tiba)
Solusi 3
Kirim hanya panduan produk dalam acara - ini berarti struktur berikut untuk order_placed:
{
order_id: [guid],
product_id: [guid]
}
Pada layanan informasi produk B dan C disimpan dalam products
tabel; masih ada di product_id
atas orders
meja, tetapi ada replikasi products
data antara A, B dan C; B dan C mungkin mengandung informasi berbeda tentang Produk daripada A
Informasi produk diunggulkan ketika layanan B dan C dibuat dan diperbarui setiap kali informasi tentang Produk berubah dengan melakukan panggilan ke A/product
endpoint (yang menampilkan informasi yang diperlukan dari semua produk) atau dengan melakukan akses DB langsung ke A dan menyalin informasi produk yang diperlukan yang diperlukan untuk diberikan layanan.
Masalah : ini membuat B dan C tergantung pada A (saat penyemaian). Jika skema perubahan Produk pada A, perubahan harus dilakukan pada semua layanan yang bergantung padanya (saat penyemaian)
Dari pemahaman saya, pendekatan yang benar adalah dengan solusi 1, dan memperbarui riwayat peristiwa per logika tertentu (jika katalog Produk tidak berubah dan kami ingin menambahkan warna untuk ditampilkan, kami dapat dengan aman memperbarui riwayat untuk mendapatkan keadaan saat ini) Produk dan mengisi data yang hilang dalam acara tersebut) atau melayani tidak adanya data yang diberikan (jika katalog Produk telah berubah dan kami ingin menambahkan warna untuk ditampilkan, kami tidak dapat memastikan apakah pada titik waktu di masa lalu Produk yang diberikan memiliki warna atau tidak - kita dapat mengasumsikan bahwa semua Produk dalam katalog sebelumnya berwarna hitam dan diperuntukkan dengan memperbarui acara atau kode)
updating event history
maksud saya: pergi melalui semua peristiwa, menyalinnya dari satu aliran (v1) ke aliran lain (v2) untuk mempertahankan skema acara yang konsisten.
display image at the point when purchase was made
) atau tidak bisa (mewakili maksud display current image as it within catalog
)
updating event history
- Dalam peristiwa sumber sejarah acara adalah sumber kebenaran Anda dan tidak boleh diubah tetapi hanya maju. Jika acara berubah, Anda dapat menggunakan versi acara atau solusi serupa tetapi saat memutar ulang acara hingga titik waktu tertentu, keadaan data harus seperti saat itu.