4

Microsoft のhttp://login.live.comのような Identity サーバーを構築する必要があります。

フェイルオーバーを処理するために、複数の Web サーバー ノードを用意します。計画では、すべてのデータベース書き込み操作は、データベース サーバーにメッセージを送信することによって行われます。データベースはミラー化または複製されます。データベースは書き込み操作をサブスクライブしますが、他のノードもサブスクライブするという考え方です。そうすれば、他のノードはデータベースから読み取る必要がなく、キャッシュを更新できます。

サービス バス アーキテクチャを学び始めたばかりで、サービス バスのフェールオーバー シナリオを処理する方法が明確ではありません。

質問:

  1. データベース サーバーが利用できない場合、発行されたメッセージはどうなりますか?
  2. それらはどこに、どこに保管されますか?
  3. サービス バスのフェールオーバーを処理するには、追加のマシンまたはクラスターが必要ですか?
  4. SQL Server をメッセージ ストアとして使用できると読みましたが、永続的な MSMQ を使用できますか? メッセージをデータベースに書き込むことができるようにメッセージをキューに入れているのに、最初にメッセージを取得して再度書き込むために、最初にデータベースに保存する必要があるのはなぜですか? または、これは間違っています。DB はサブスクリプションのリストにのみ使用され、メッセージには使用されませんか?
4

2 に答える 2

9

この種のアーキテクチャを実装する場合は、CQRS の原則を適用することを検討する必要があります。クエリ (このユーザー/パスワードの組み合わせは有効か) は、バス経由で実行しないでください。コマンド (pwd の変更、pwd を忘れた) はバス経由で送信され、イベントとして発行されません。内部的には、イベントを使用してコマンド側とクエリ側の同期を維持する可能性がありますが、これにはクライアントは関与しません。

クエリは、DB のレプリケートされた読み取りスレーブに対して単純な ado.net を使用して実行できます。これは、CQRS の永続ビュー モデルとして知られています。必要に応じて、その前に簡単な WCF を配置することもできます。

MSMQ を使用すると、すべてのメッセージがストア アンド フォワード経由で配信されます。つまり、メッセージはサーバーに配信される前にクライアントに格納されるため、サーバーがダウンした場合、メッセージはクライアントで待機します。耐障害性のために、メッセージを回復可能にする (ディスクに書き込む) 必要があります。これは NServiceBus のデフォルトですが、標準の MSMQ のデフォルトではありません (MassTransit については知りません)。これにはデータベースは必要ありません。

NServiceBus では、バスは別のマシンにインストールされないため、システムの残りの部分とは別にバスの可用性に対処する必要はありません。コマンド処理をより多くのノードにスケーリングすることを検討する場合にのみ、NServiceBus でメッセージベースのロード バランサー (ディストリビューターと呼ばれます) を使用することを検討できます。これは、高可用性のために、クラスターまたはフォールト トレラント ハードウェアにインストールする必要があります。

于 2010-09-08T05:49:28.523 に答える
8
  1. これはセットアップ方法によって異なりますが、MassTransit ではサブスクリプションをアクティブのままにしておくことができるため、メッセージは引き続き DB のキューに配信されます。DB が再びアクティブになると、キュー内のメッセージを読み取ることができます。

  2. MassTransit のサービス バスに接続されている各サービスには、それ自体のアクティブなキューがあります。メッセージはそこに保存されます。

  3. これは「場合による」と思います... MassTransit は MSMQ 以外の MQ をサポートしていますが、実際には MSMQ を中心に構築されています。MSMQ からのフェールオーバーなどについては、優れたサポートの経験がありません。ただし、サブスクリプション サービス (つまり、バス) に障害が発生した場合でも、すべてが問題なく実行され続けます。サービスは、誰と話すかを既に知っています。これが問題になるのは、コンシューマーの変更 (購読または購読解除) のみです。私にとって、それはめったに起こらない出来事です。

  4. MassTransit では、DB を使用してサブスクリプションの状態を保存しますが、すべてのメッセージは MSMQ に保存されます。

これらの回答のいずれかで詳細を知りたい場合、または MT についてさらに質問がある場合は、メーリング リストhttp://groups.google.com/group/masstransit-discussに参加してください。

于 2010-09-07T22:40:54.683 に答える