1

背景: MVC アプリには 1 秒あたり 100 以上のトランザクションがあり、詳細なリアルタイム レポートが必要です。

問題: トランザクション データベースに対するレポートは、複雑なレポート ロジック + 遅いレポートの読み込み時間を意味します。大きなレポートは、トランザクション プロセスに悪影響を与える可能性があります。非正規化されたキューブに定期的にデータをプルすると、リアルタイム レポートの制約に違反します

解決策: 状態の変更をトランザクション データベースとキューブに同時に保持し、データがキューブに保持されるときにデータを非正規化します (1 ~ 2 分の待機時間は問題ありません)。

ジレンマ: 各レイヤー、Web、アプリ、トランザクション データベース、およびキューブは水平方向にスケーリングされ、地理的に異なる場所の異なるファームに存在します。

考えられる解決策:
マルチキャストを使用する MSMQ - アプリ サーバーはエンティティの状態が変化したときにメッセージを送信し、トランザクション データベースとキューブ サービスはメッセージを受信して​​永続化します。長所: 成熟したソリューション、短所: 高可用性を確保するために多くのハードウェアやライセンスが必要 - 翻訳: 高価。

オブザーバー パターン - .net WCF (うーん..) を使用して、データベース サーバーがサブスクライブ (監視) する変更イベントをアプリケーション サーバーに呼び出させます。長所: 余分なハードウェアが不要、短所: WCF。

REST Web サービス - メッセージを送信したりイベントを呼び出したりする代わりに、.net Web クライアントを使用してトランザクション データベースとキューブに投稿します。長所:実装が非常に簡単、短所:アプリケーションサーバーが投稿できるように、データベース側のどこかにIISをインストールする必要があります。

質問 1: 考えられる解決策に関する私の仮定は正しいですか?

4

1 に答える 1

0

さらに多くの調査を行った結果、CQRS はソリューションとして適しています。すべての可動部分間の通信に関しては、エンタープライズ サービス バス (ESB) http://en.wikipedia.org/wiki/Enterprise_service_busについて多くのことを読まなければなりませんでした。.net の世界では、nservicebus は人気があるようですが無料ではなく、公共交通機関も無料ですが、サンプルのビルドと実行に問題があります。TT

大量輸送機関の背後にいる連中の 1 人によるメッセージングと Web サービスの一般的な概要: http://blip.tv/ineta-live/event-driven-architecture-by-chris-patterson-north-dallas-net-ug- on-02-03-2010-3193457

ESB は MSMQ を使用してオブザーバー パターンを実装します。Web サービスを介して cqrs イベントストアにディスパッチする小さな Web サービスを投入すると、基本的にすべての解像度が使用されますが、オープン ソース コンポーネントを活用します。

于 2013-03-07T21:18:38.227 に答える