1

環境

  • 本番環境で RavenDB インデックスを更新するための安定した一貫したアプローチを設計しようとしています
  • 特にインデックス更新の話に焦点を当てています (つまり、私のセットアップが高可用性に完全に対応していないことを知っています)。
  • これは架空のシナリオです (つまり、現在実稼働環境には何もありません)。
  • ハードウェア/ソフトウェア/ネットワーク構成が柔軟であると仮定します (つまり、別の RavenDB インスタンスの追加、サーバーの追加、永続キャッシュなど)。

現在のホスティング シナリオ

  • 2 つの Web サーバーがアクティブ/パッシブ構成で負荷分散され、それぞれが 1 つの Web アプリケーションを実行します
  • RavenDB インスタンスを実行する 1 つのサーバー (最新の安定バージョン)

制約

  • プロセス全体を通して高可用性を維持する必要がある
  • 導入プロセスは完全に自動化されます
  • 展開プロセスは、展開中の任意の時点でロールバックを開始する可能性があります
  • インデックスの再構築には最大 1 分かかる場合があります。これほど長い間データを表示できないことは受け入れられません

考えられる解決策

2 つ目の RavenDB インスタンスを追加し、アクティブ/アクティブ構成で RavenDB をレプリケートする

  • アクティブな Web サーバーがアクティブな RavenDB インスタンスと対話する
  • パッシブ Web サーバーがパッシブ RavenDB インスタンスと対話する

展開は次のようになります。

  • レプリケーションを停止する
  • 新しい Web アプリケーション コードをパッシブ Web サーバーにデプロイする
  • Web アプリケーションを起動し、RavenDB インスタンスのインデックス定義を自動更新します
  • テスト
  • ロード バランサーをパッシブ Web サーバーに切り替えて、アクティブにします
  • (x 時間) 監視し、必要に応じてロールバックする
  • レプリケーションを開始し、他の RavenDB インスタンスでインデックス定義とデータを更新します

ロールバックは次のようになります。

  • ロード バランサーをパッシブ Web サーバーに切り替えて、アクティブにします

これを実装するためのより最適な方法はありますか?

4

1 に答える 1

0

インデックス名を構成変数に格納することで、同様のことを実現します。次に、更新された定義で新しいインデックスを新しい名前で作成します。完了したら、新しいインデックス名を指すように構成変数を切り替えます。

プロセスに応じて、個別のビルドでインデックス名をハードコーディングしたり、このセットアップを作成してスタートアップ コードの一部を切り替えたり、最適な代替手段をいくつでも作成したりできます。

このプロセスは、インデックス定義の出力が根本的に異なっていない限り、正常に機能するはずです。そうである場合、どの Web サーバーがどの定義を使用しているかをさらに制御する必要がある場合があります。

于 2014-08-03T06:00:59.933 に答える