以下で構成される ASP.NET MVC3 Web アプリケーションがあります。
- ウェブサイト (MVC3)
- データ アクセス サービス (WCF + EF)
- データベース サーバー (SQL Server 2008 R2)
パフォーマンス上の利点のために、次のアーキテクチャを実装することが提案されました。
- Web サーバー クラスタ (Web サイト + データ アクセス サービス)
- ラウンド ロビン ロード バランシングがあります。
- このクラスター内の各サーバーにはキャッシュ(読み取り専用) データベースがあります
- 読み取り SPと書き込み SPの 2 つのカテゴリに明確に分類できる一連の SP があります。
- 各読み取り SP はキャッシュ DBに接続し、各書き込み SP は書き込み DBに接続します。
- レプリケーション/ミラーリングを備えたデータベース サーバー
- これは書き込み DBです。
- 変更されるたびに、すべての変更をすべてのキャッシュ DBに伝播します。
- それに加えて、レプリケーション/ミラーリングが実装されているため、ダウンしたときのバックアップがあります。
これは非常に大雑把な考えであり、システムのパフォーマンスが向上するかどうかはわかりません。
それを支持する議論は80%の時間であり、操作は読み取り専用です。これらはキャッシュ DBで作成できます(読み取り専用に構成されているため、より高速です)。残りの20%は書き込み DBで作成できます。
しかし、私は次の質問があります:
- 読み取り専用構成: 実際にキャッシュ DBを読み取り専用に構成できますか? Write DBは、変更されるたびに変更をプッシュする必要があるためです。
- 同期: ネットワーク上でこのような複雑な状況が発生している中で、すべてが同期されていることを確認するのはどれほど簡単でしょうか? ネットワーク遅延: すべてを同期させるためのネットワーク オーバーヘッドについてはどうでしょうか?
- 複雑さとメンテナンス: 追加のメンテナンス オーバーヘッドとシステムの複雑さを考慮する価値はありますか?