環境
- 本番環境で RavenDB インデックスを更新するための安定した一貫したアプローチを設計しようとしています
- 特にインデックス更新の話に焦点を当てています (つまり、私のセットアップが高可用性に完全に対応していないことを知っています)。
- これは架空のシナリオです (つまり、現在実稼働環境には何もありません)。
- ハードウェア/ソフトウェア/ネットワーク構成が柔軟であると仮定します (つまり、別の RavenDB インスタンスの追加、サーバーの追加、永続キャッシュなど)。
現在のホスティング シナリオ
- 2 つの Web サーバーがアクティブ/パッシブ構成で負荷分散され、それぞれが 1 つの Web アプリケーションを実行します
- RavenDB インスタンスを実行する 1 つのサーバー (最新の安定バージョン)
制約
- プロセス全体を通して高可用性を維持する必要がある
- 導入プロセスは完全に自動化されます
- 展開プロセスは、展開中の任意の時点でロールバックを開始する可能性があります
- インデックスの再構築には最大 1 分かかる場合があります。これほど長い間データを表示できないことは受け入れられません
考えられる解決策
2 つ目の RavenDB インスタンスを追加し、アクティブ/アクティブ構成で RavenDB をレプリケートする
- アクティブな Web サーバーがアクティブな RavenDB インスタンスと対話する
- パッシブ Web サーバーがパッシブ RavenDB インスタンスと対話する
展開は次のようになります。
- レプリケーションを停止する
- 新しい Web アプリケーション コードをパッシブ Web サーバーにデプロイする
- Web アプリケーションを起動し、RavenDB インスタンスのインデックス定義を自動更新します
- テスト
- ロード バランサーをパッシブ Web サーバーに切り替えて、アクティブにします
- (x 時間) 監視し、必要に応じてロールバックする
- レプリケーションを開始し、他の RavenDB インスタンスでインデックス定義とデータを更新します
ロールバックは次のようになります。
- ロード バランサーをパッシブ Web サーバーに切り替えて、アクティブにします
これを実装するためのより最適な方法はありますか?