質問

システム A がシステム B にデータを送信する 2 つのシステムがあります。各システムが互いに独立して実行でき、もう一方がダウンしてもどちらもダウンしないことが要件です。問題は、システム A がデカップリング要件を満たしながらシステム B と通信するための最良の方法は何かということです。

システム B には現在、db テーブル内のデータをポーリングし、挿入された新しい行を処理するプロセスがあります。

提案されている設計の 1 つは、システム A がシステム B の DB テーブルにデータを挿入するだけで、システム B に既存のプロセスによって新しい行を処理させるというものです。問題は、このソリューションが 2 つのシステムを分離するという要件を満たしているかということです。データベースはシステム B の一部とみなされ、使用できなくなりシステム A が爆発する可能性がありますか?

もう 1 つの解決策は、システム A がデータを MQ キューに入れ、MQ から読み取ってシステム B のデータベースに挿入するプロセスを持たせることです。しかし、これは単なる余分なオーバーヘッドなのでしょうか?結局のところ、MQ キューは DB テーブルよりも耐障害性が高いのでしょうか?

役に立ちましたか?

解決

一般に、データベース共有は密接な結合であり、おそらく速度を目的とする場合を除いて、推奨されません。可用性の目的だけでなく、システム A と B は将来いくつかの時点で変更およびアップグレードされるため、相互の依存関係は最小限にする必要があります。メッセージ パッシングは明らかな依存関係ですが、共有データベースはユーザーに影響を与える傾向があります (または、あなたの相続人)が予想外の場合に後部に表示されます。データベース共有ルートを選択する場合は、少なくとも専用のテーブルまたはビューを使用して共有インターフェイスを明示的にします。

統合には 4 つの一般的なレベルがあります。

  1. データベースの共有
  2. ファイル共有
  3. リモートプロシージャコール
  4. メッセージパッシング

これらは、可用性と保守性が異なるさまざまな状況に適用および組み合わせることができます。優れた概要については、 エンタープライズ統合パターン サイト.

他の中央統合インフラストラクチャと同様に、MQ は可用性が高く、完全なフェイルオーバーなどを備えた環境でホストされる必要があります。キュー調整を分散できるキュー ソリューションは他にもあります。

他のヒント

通信のため使用するキュー。データベースを介してシステムBに、システムAからデータを「合格」しないでください。あなたは巨大な、高価な、複雑なメッセージキューとしてデータベースを使用している。

メッセージキューとしてメッセージキューを使用します。

これは、「エクストラ」頭上ではありません。これは、システムを分離するための最良の方法です。これは、サービス指向アーキテクチャ(SOA)と呼ばれ、メッセージを使用して、設計に絶対に中央でいます。

MQキューはDBのテーブルよりもはるかに簡単です。

RDBMSのトランザクションが正常に終了した保証の合理的なレベルを達成するために巨大な(ほとんど想像を絶する)オーバーヘッドを使用しているため、「フォールトトレランス」を比較しないでください。ロッキング。バッファリング。キューを作成します。ストレージ管理。などなど。

信頼性の高いメッセージキューの実装は、キューの状態を維持するために、いくつかのバッキングストアを使用しています。オーバーヘッドは、RDBMSよりもはるかに小さい、くらいです。パフォーマンスがはるかに優れています。そして、それはと対話するためにはるかに簡単、多くのです。

SQL Serverのでは、私は、SSISパッケージまたは(レコード数と私は動いていたものの複雑さに応じて)仕事を介してこれを行うだろう。他のデータベースもETLソリューションを持っています。私が変更されたかのログを保存することができますbecasue私は、ETLソリューションが好きで、どのようなエラーが処理された、私は、保持する(データ構造はめったに2つのデータベース間で同じではない)何らかの理由で他のシステムに行くことはありませんレコードを送信することができますプロセスの残りの部分を殺すことなく、テーブル。それは、データベースの差異を調整するために流れるにつれて、私も(ルックアップテーブル値のようなものは、DB1に完了し、ステータスが5であると言うのデータに変更を加えることができ、それがDB1にはないことを、DB2で7またはDB2が必要なフィールドを持っていると言うであり、あなたそれがnullの場合)申請にデフォルト値を追加する必要があります。一方または他のservverは失敗しますSSISパッケージを実行するジョブがダウンしていると、どちらのシステムが影響を受けることになりますので、トリガーを使用したり、複製ではないだろうと切り離さdatbasesを続けた場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top