Sinkronisasi antara dua sistem menggunakan MongoDB sebagai changelog

11

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:

  1. Setiap sistem memelihara changelog dari databasenya. Kami berencana untuk mengimplementasikannya dengan MongoDB.
  2. 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).
  3. 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.
  4. 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?

k91
sumber
Sudahkah Anda melihat alat yang terkait dengan DBMS untuk membantu dengan data yang direplikasi? DBMS mana yang terlibat?
Adam Zuckerman
Kami menggunakan MySQL 5.5.8. Kami telah melihat beberapa alat tetapi kami pikir itu tidak sesuai dengan persyaratan kami.
k91
Salah satu perangkap adalah bahwa ObjectIds tidak meningkat secara monoton.
CodesInChaos

Jawaban:

1

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:

  • Penggunaan changelog yang dipesan berarti bahwa proses sinkronisasi hanya dapat mengambil perubahan yang dibuat sejak perubahan terakhir yang terlihat. Ini akan menjaga waktu pemrosesan yang membantu skalabilitas dan akan memungkinkan Anda untuk membangun sinkronisasi waktu dekat dalam kasus di mana konektivitas internet tersedia.
  • Pelanggan tanpa koneksi internet memaksa Anda untuk berpikir tentang berurusan dengan sinkronisasi yang tertunda dan rusak sekarang, daripada mengandalkan sinkronisasi cepat dan secara tidak sengaja berakhir dengan masalah skalabilitas.

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:

  • Apakah beberapa konflik memerlukan resolusi pengguna?
  • Apakah sistem pelanggan selalu menjadi tempat yang tepat untuk menyelesaikan konflik?
  • Apakah mungkin ada konflik dalam sistem B setelah langkah 4 ketika sistem pelanggan mengirimkan perubahannya?
Justin
sumber
0

Setiap sistem memelihara changelog dari databasenya. Kami berencana untuk mengimplementasikannya dengan MongoDB.

Anda dapat menggunakan eventstore . Di sana setiap pembaruan data akan membuat acara baru di toko.

Ketika suatu sistem menginisialisasi proses sinkronisasi, ia mengambil semua perubahan yang dibuat dari log. Jika sistemnya B, perubahan yang diambil bergantung pada tujuan. Kemudian, sistem membuat serial mereka dalam format XML dan, akhirnya, mengirimkannya (melalui file atau jaringan).

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.

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.

Cukup menerapkan peristiwa ke objek domain Anda.

Terakhir, sistem penerima mengirimkan perubahannya (dan produk resolusi konflik lainnya).

Gunakan pendekatan yang sama.

Pelican Terbang Rendah
sumber