Kami sedang mengembangkan dua sistem terkait. Salah satunya (A) akan dipasang di mesin pelanggan kami. Sisanya (B) akan digunakan oleh organisasi saya.
Setiap sistem memiliki database sendiri (relasional) dan skema mereka berbeda. Namun, kedua sistem harus disinkronkan. Selain itu, beberapa perubahan dalam B harus diekspor ke semua sistem kelas A dan yang lainnya hanya untuk yang spesifik.
Beberapa pelanggan tidak memiliki koneksi Internet sehingga sinkronisasi, dalam beberapa kasus, harus dilakukan melalui pertukaran file.
Jadi, kami berencana untuk menyelesaikan masalah ini sebagai berikut:
- Setiap sistem memelihara changelog dari databasenya. Kami berencana untuk mengimplementasikannya dengan MongoDB.
- Ketika suatu sistem menginisialisasi proses sinkronisasi, ia mengambil semua perubahan yang dibuat dari log. Jika sistem B, perubahan yang diambil tergantung pada tujuan. Kemudian, sistem membuat serial mereka dalam format XML dan, akhirnya, mengirimkannya (melalui file atau jaringan).
- Ketika titik akhir lainnya menerima perubahan itu, itu unserialize mereka. Kemudian, sistem membuat beberapa transformasi atas data, yang mungkin diperlukan, dan akhirnya, mencatat perubahan. Pada langkah ini, jika perlu, sistem harus menyelesaikan konflik yang mungkin ada.
- Terakhir, sistem penerima mengirimkan perubahannya (dan produk resolusi konflik lainnya).
Apakah pendekatan ini layak, terukur, dan elegan? Perubahan atau penambahan apa yang akan Anda lakukan?
Jawaban:
Jika Anda belum melakukannya, Anda mungkin tertarik untuk membaca tentang sistem yang digerakkan oleh acara, sumber acara, dan konsistensi akhirnya. Sistem yang Anda gambarkan memiliki banyak kesamaan dengan pola-pola ini, yang merupakan hal yang baik.
Pendekatan Anda terdengar bagus, khususnya:
Tanpa tahu lebih banyak tentang model domain, tebakan saya adalah menyelesaikan konflik adalah bagian yang paling banyak menimbulkan masalah bagi Anda. Saya akan meluangkan waktu memikirkan bagaimana setiap jenis konflik akan diselesaikan. Khususnya:
sumber
Anda dapat menggunakan eventstore . Di sana setiap pembaruan data akan membuat acara baru di toko.
Anda dapat menggunakan mekanisme apa pun untuk mengirim acara, tetapi akan lebih mudah untuk menggunakan bus jika memungkinkan di mana Anda tidak harus berurusan dengan file. Biasanya ini dapat dikonfigurasi untuk menyimpan pesan sampai konektivitas tersedia untuk mengirimnya.
Cukup menerapkan peristiwa ke objek domain Anda.
Gunakan pendekatan yang sama.
sumber