9

Blue/Green デプロイに関するこの記事を調べた後、さらにグーグルでカナリア リリースに関するこの記事を紹介されました。私はこのあいまいさを持っています: データベースはどうなりますか? それらをどのように同期させるべきですか?私は2つの可能なシナリオを念頭に置いています:

  • 青がアクティブなときに環境ごとに 1 つずつ (緑と青) 2 つの別個のデータベースがあると想像してください
    。新しいレコードがそのデータベースに挿入され
    、トリガーのようなメカニズム (またはその他のメカニズム) を提供しない限り、緑はこれらの変更を認識しません。グリーンデータベースを更新します。

  • 2 番目のシナリオは、2 つの環境間で下位互換性のあるデータベースを共有することを示唆していますが、データベースを扱う場合、下位互換性はそれほど簡単ではありません
    。アプリケーションを公開する前に、データベースの変更を公開する必要があります。

3 番目のシナリオとして、メインの Blue/Green デプロイメント内のデータベースに Blue/Green デプロイメントを実装する場合があります。

より良い解決策は何だと思いますか、またその理由は何ですか? 他のプラクティスやよく知られているパターンを提案しますか?

ありがとうございました

4

2 に答える 2

2

個人的には、下位互換性のあるデータベース アプローチのみを使用してきました。主な利点は、カナリアやブルーグリーンなど、さまざまな展開タイプでよく理解され、機能することです。私は、Blue-Green デプロイ戦略 (すべてのサーバーへの平凡なローリング デプロイであり、基本的に高速なカナリア デプロイ) の利点がなくても、このアプローチを使用しました。アプリケーションのリリース前にデータベースの変更を展開する必要があることは、いくつかの展開戦略に共通しており、異なるデータベース バージョン間の複雑なトリガーまたはミラーリング メカニズムの必要性と比較して、それほど負担ではありません。

3 番目のシナリオも、データベース スライス間でのトリガーまたはミラーリングが必要になるという罠に陥ります。RDBMS 用語では、マスター データベースしかなく、他のすべてのインスタンスが書き込み操作を受け入れないため、これは通常サポートされていないか、まったく不可能です。これの最終的な効果は、マスター インスタンスのバージョンがデータベース全体の事実上のバージョンになることです。

特定の No-SQL データベースは、この罠にはまりません。たとえば、MongoDB では、同じコレクション内に複数の異なるバージョンのドキュメント スキーマを含めることができます。これにより、アプリケーションはデータ バージョンを通知され、ドキュメントを異なる方法で処理できます。ただし、MongoDB はすべてのアプリケーションに適しているわけではありません (RDBS が特定の種類のデータに適したデータ ストアではないのと同様)。

于 2016-01-04T21:56:27.670 に答える
0

100% ブルーグリーンまたはカナリアのアプリケーションを見たことがありません。その理由は、実際の「データ」レイヤーにあります。各データベース タイプには独自のニュアンスがあるため、データベース レイヤーでブルー グリーン デプロイを行うことはできません。これは通常、アプリケーション (コード) レベルのレイヤーのみに使用されます。

データベースを使用した Blue-Green デプロイメントが必要な場合は、DB レベルでのデータ移行または少なくとも復元が必要になります。これは、ほとんどのチームが実装するのが複雑で面倒です。時間がかかり、ロールバックは面倒な状態になります。後方互換性のある DB を使用し、ロールバック時に DB の変更をクリーンアップするだけです。

于 2022-01-13T09:33:58.940 に答える