2つの関連しているが別々のシステムを同期させるにはどうすればよいですか? 質問する

2つの関連しているが別々のシステムを同期させるにはどうすればよいですか? 質問する

私の現在の開発プロジェクトには 2 つの側面があります。まず、外部ユーザーがさまざまな目的で情報を送信および更新できるパブリック Web サイトがあります。この情報は、コロケーション施設のローカル SQL Server に保存されます。

2 番目の側面は、従業員が同じレコードを (概念的に) 管理し、ステータスの更新や承認などを行うために使用する内部アプリケーションです。このアプリケーションは、独自のローカル SQL Server データベースを使用して、企業のファイアウォール内でホストされます。

2 つのネットワークはハードウェア VPN ソリューションによって接続されていますが、これはまともなソリューションではあるものの、明らかに世界最速のものではありません。

2 つのデータベースは類似しており、同じテーブルを多数共有していますが、100% 同じではありません。両側のテーブルの多くは、内部アプリケーションまたは外部アプリケーションに非常に特化しています。

そこで質問です。ユーザーが公開 Web サイトで情報を更新したり、レコードを送信したりする場合、そのデータを社内アプリケーションのデータベースに転送して、社内スタッフが管理できるようにするにはどうすればよいでしょうか。またその逆の場合、スタッフが行った更新を Web サイトにプッシュするにはどうすればよいでしょうか。

これらの更新は「リアルタイム」で行われるほど良いということは言及する価値があります。即時である必要はなく、適度に速ければよいのです。

これまで、私は次のようなアプローチを検討してきました。

  1. 双方向レプリケーション
  2. 両側の Web サービス インターフェイスには、変更が行われると (リアルタイムで) 変更を同期するコードが含まれています。
  3. 両側の Web サービスは、変更を非同期に同期するコード (キューイング メカニズムを使用) とインターフェイスします。

何かアドバイスはありますか? この問題に遭遇した人はいますか? 自分にとってうまく機能する解決策は見つかりましたか?

ベストアンサー1

これはかなり一般的な統合シナリオだと思います。個人的には、キューを使用した非同期メッセージング ソリューションが理想的だと思います。

レプリケーションなどのオーバーヘッドや複雑さなしに、ほぼリアルタイムの同期を実現できるはずです。

同期 Web サービスは、障害シナリオを処理するためにコードを非常に高度にする必要があるため、理想的ではありません。一方のシステムが再起動され、もう一方のシステムが変更の公開を継続すると、何が起きますか? 送信側システムはタイムアウトしますか? その場合、どうしますか? データが失われる覚悟がない限り、変更通知を受信し、もう一方のシステムに確実に届くようにする何らかのトランザクション キュー (MSMQ など) が必要になります。いずれかのシステムがダウンすると、変更 (メッセージとして渡される) が蓄積され、接続が確立されるとすぐに、再起動したサーバーがキュー内のメッセージをすべて処理して追いつくため、システムの整合性がはるかに簡単に実現されます。

.NET を使用している場合 (特に MSMQ を使用する場合)、これを簡単に実行できるオープン ソース ツールがいくつかあります。

  1. サービスバスウディ・ダハン
  2. 大量輸送ドルー・セラーズとクリス・パターソン

商用製品もありますので、商用オプションを検討している場合は、ここ.NET のオプションの一覧については、こちらをご覧ください。もちろん、WCF は MSMQ バインディングを使用して非同期メッセージングを実行できますが、nServiceBus や MassTransit などのツールを使用すると、非常にシンプルな Send/Receive または Pub/Sub API が提供され、要件を非常に簡単に満たすことができます。

Java を使用している場合は、Mule や ActiveMQ など、この種の双方向の非同期メッセージングを簡単に実現できるオープン ソース サービス バス実装が数多くあります。

こちらも読んでみてくださいウディ・ダハンのブログを読んで、彼のポッドキャストを聞いてみてください。その他の良いリソース始めるために。

おすすめ記事