How do we do full link grayscale on the database?
フルリンクグレースケールとは
マイクロサービスアーキテクチャでは、サービス間の依存関係が複雑であり、ある機能のリリースが複数のサービスの同時アップグレードおよびローンチに依存する場合があります。これらのサービスの新しいバージョンに対して、小規模なトラフィックによるグレースケール検証を同時に実施したいというニーズがあり、これがマイクロサービスアーキテクチャにおける独自のフルリンクグレースケールシナリオです。ゲートウェイからバックエンドサービス全体にかけて環境分離を構築することで、複数バージョンのサービスに対してグレースケール検証を実施できます。
以下のリンクをクリックして、ライブチュートリアルをご覧ください:
https://yqh.aliyun.com/live/detail/29004
公開プロセスでは、サービスのグレースケールバージョンのみをデプロイすれば十分です。トラフィックが呼び出しリンク上を流れる際、通過するゲートウェイ、ミドルウェア、マイクロサービスがグレースケールトラフィックを識別し、対応するサービスのグレースケールバージョンに動的に転送します。以下の図に示す通りです:
前述の図は、この方式の効果を分かりやすく示しています。異なる色で異なるバージョンのグレースケールトラフィックを表現しています。マイクロサービスゲートウェイとマイクロサービス自体の両方がトラフィックを識別し、ガバナンスルールに基づいて動的な判断を行う必要があることが分かります。サービスバージョンが変更されると、この呼び出しリンクの転送もリアルタイムで変化します。マシンを使用して構築するグレースケール環境と比較して、この方式は大幅なマシンコストと運用保守の人件費を削減できるだけでなく、開発者がフルリンク全体のオンライントラフィックを迅速かつ正確に制御できるようにします。
OpenSergo [1] トラフィックルーティング標準
Q:OpenSergo とは
A:OpenSergo は、リンク全体のヘテロジニアスエコシステムをカバーする、オープンで汎用的な分散サービスアーキテクチャ向けのサービスガバナンス標準です。業界のサービスガバナンスシナリオと実践に基づいて共通標準を形成しています。OpenSergo の最大の特徴は、統一された設定、DSL、プロトコルでサービスガバナンスルールを定義し、多言語ヘテロジニアスアーキテクチャに対応してリンク全体のエコシステムカバレッジを実現することです。マイクロサービスの言語が Java、Go、Node.js、またはその他の言語のいずれであっても、標準的なマイクロサービスでもメッシュアクセスでも、ゲートウェイからマイクロサービスまで、データベースからキャッシュまで、サービス登録と検出から設定まで、開発者は同一の OpenSergo CRD 標準設定を使用して各レイヤーを一元管理でき、さまざまなフレームワークと言語間の差異を気にする必要がなく、ヘテロジニアスなフルリンクサービスガバナンスと制御の複雑さを軽減できます。
Q:フルリンクグレースケールを理解する前に、なぜ OpenSergo を先に紹介するのか
A:OpenSergo は、分散アーキテクチャ向けのフルリンクサービスガバナンス仕様を実装するための統一された YAML 設定方法を定義しています。仕様と標準を理解しながら、技術的な詳細の実装も把握できます。同時に、OpenSergo 標準に準拠した新しいコンポーネントを実装することも可能です。
トラフィックルーティングは、その名の通り、特定の属性特性を持つトラフィックを指定された宛先にルーティングすることを指します。トラフィックルーティングはトラフィックガバナンスの重要な構成要素です。開発者はトラフィックルーティング標準に基づき、グレースケールリリース、カナリアリリース、ディザスタリカバリルーティング、ラベルルーティングなど、さまざまなシナリオを実装できます。
フルリンクグレースケールの例:
トラフィックルーティングルール (v1alpha1) は主に 3 つの部分に分かれます:
- WorkloadLabelRule:ワークロードグループに対応するラベルを付けます。このブロックは、アプリケーションまたは対応するストレージレイヤーにラベルを付けるものと理解でき、データベースワークロード (データベース、テーブル) に対応するラベルを付けることを意味します。
- Traffic Label Rule:特定の属性特性を持つトラフィックに対応するラベルを付けます。
- Workload タグとトラフィックタグに基づくマッチングルートを実行し、指定されたタグを持つトラフィックをマッチする Workload に転送します。
トラフィックのラベル付け:
特定の属性特性を持つトラフィックに対応するラベルを付ける必要があります。
深センリージョンのユーザーをホームページの新規バージョンにグレースケールする場合を仮定します。テストユーザーの location=cn-shenzhen が location ヘッダーに設定されているとします。
前述の設定により、location ヘッダーが cn-shenzhen の HTTP トラフィックに gray フラグが付けられ、このトラフィックがグレースケールトラフィックであることを示します。
ワークロードのラベル付け:
Nacos をサービス検出ツールとして使用するビジネスシステムでは、一般的に使用しているマイクロサービスフレームワークに基づいてラベル付け方法を決定する必要があります。Java アプリケーションで Spring Cloud マイクロサービス開発フレームワークを使用している場合、ビジネスコンテナに対応する環境変数を追加することでタグ付け操作を完了できます。たとえば、ノードにバージョングレースケールを追加する場合、traffic.opensergo.io/label: gray をビジネスコンテナに追加します。これにより、フレームワークが Nacos に登録する際にノードに gray ラベルを自動的に付与します。
一部の複雑なワークロードラベリングシナリオ (データベースインスタンスやキャッシュインスタンスタグなど) では、WorkloadLabelRule CRD を使用してラベル付けを行えます。
データベースにおけるフルリンクグレースケールの一般的な方式
方式 1:シャドウデータベース
各データベースが独立したデータベースセットを維持します。ベースライン環境のデータベース名が mse-demo の場合、グレースケール環境のトラフィックは mse-demo-gray のデータベースにマッピングされます。同一インスタンス上に各環境のトラフィック用のシャドウデータベースを構築します。ビジネス内の各データベース接続に対して接続プールを維持し、異なるトラフィック指標に基づいて対応するシャドウデータベース接続を選択してアクセスすることで、ベースライン環境のデータベースからのデータ分離を実現し、グレースケール環境のフローにより生成されるデータによるベースライン環境のデータベースの汚染を防止します。
方式 2:シャドウテーブル
シャドウデータベース方式と同様に、シャドウテーブル方式では、同一インスタンスの同一データベース上に対応するシャドウテーブルを作成します。SQL の実行時に、グレースケールトラフィックの SQL を解析・修正することで、異なる環境の SQL が対応するテーブルにアクセスできるようにします。ベースライン環境のテーブル名が mse_demo_table の場合、グレースケール環境のトラフィックは mse_demo_table_gray のテーブルにマッピングされます。これにより、グレースケールデータとベースライン環境のデータテーブルの分離を実現します。
MSE [2] データベースフルリンクグレースケール機能
MSE は、ビジネスコードを一切修正せずにデータベースレベルでのフルリンクグレースケールを実現するデータ分離ソリューションを提供しています。以下では、MySQL データストレージに基づくシャドウテーブル方式を通じて、MSE がフルリンクグレースケールを実現する機能について説明します。
前提条件
- アプリケーションの MSE への接続
- デモアプリケーションのデプロイ
Alibaba Cloud コンテナサービスに A、B、C の 3 つのアプリケーションをデプロイし、各アプリケーションにベースバージョンとグレイバージョンをそれぞれデプロイします。また、サービス検出用の Nacos Server アプリケーションをデプロイします。詳細については、アプリケーションデプロイのチュートリアルを参照してください:デモアプリケーションのデプロイ [3]
ステップ 1:フルリンクグレースケールルールの設定
MSE のフルリンク公開を設定して完了する必要があります。具体的な操作手順については、チュートリアルを参照してください:フルリンクグレースケールの設定 [4]
以下のスイムレーンルールを作成します:
ステップ 2:データベースのフルリンクグレースケールの設定
- データベースのフルリンクグレースケール機能を追加で有効にするため、以下の環境変数を設定する必要があります。
ステップ 3:結果の確認
グレースケールリクエストを送信したところ、すべてのトラフィックリクエストがグレースケール環境にアクセスすることを確認しました:
グレースケール環境に挿入されたデータはシャドウテーブルに格納されています。
フルリンクグレースケールだけではありません
これまで、MSE サービスガバナンスのフルリンクグレースケール機能は、クラウドネイティブゲートウェイ、ALB、APISIX、Apache Dubbo、Spring Cloud、RocketMQ、データベースに対応してきました。データベースレベルでは、シャドウテーブルによるデータレベルのトラフィック分離を実現しています。次のステップとして、この機能のさらなる商業化を進め、フルリンクグレースケールはキャッシュレベルの機能もサポートする予定です。
サービスガバナンスは、マイクロサービス変革がある段階に達した後に避けて通れない道であり、その過程で新たな問題に直面し続けます。
- フルリンクグレースケール以外に、サービスガバナンスにはどのような機能があるのか
- サービスガバナンス機能の標準定義は存在するのか、またどのような内容が含まれるのか
- 多言語シナリオにおけるフルリンクのベストプラクティスや標準はあるのか
- ヘテロジニアスなマイクロサービスを統一してガバナンスするにはどうすればよいのか
サービスガバナンスを検討し、他のマイクロサービスと連携する過程で、異なるガバナンスシステムがもたらす困難は非常に大きく、2 つ以上のガバナンスシステムを接続するコストも莫大なものになります。このため、OpenSergo プロジェクトを提案しました。OpenSergo は、異なるフレームワークと言語におけるマイクロサービスガバナンスの概念の断片化と相互運用性の問題を解決することを目指しています。
マイクロサービスアーキテクチャでは、サービス間の依存関係が複雑であり、ある機能のリリースが複数のサービスの同時アップグレードおよびローンチに依存する場合があります。これらのサービスの新しいバージョンに対して、小規模なトラフィックによるグレースケール検証を同時に実施したいというニーズがあり、これがマイクロサービスアーキテクチャにおける独自のフルリンクグレースケールシナリオです。ゲートウェイからバックエンドサービス全体にかけて環境分離を構築することで、複数バージョンのサービスに対してグレースケール検証を実施できます。
以下のリンクをクリックして、ライブチュートリアルをご覧ください:
https://yqh.aliyun.com/live/detail/29004
公開プロセスでは、サービスのグレースケールバージョンのみをデプロイすれば十分です。トラフィックが呼び出しリンク上を流れる際、通過するゲートウェイ、ミドルウェア、マイクロサービスがグレースケールトラフィックを識別し、対応するサービスのグレースケールバージョンに動的に転送します。以下の図に示す通りです:
前述の図は、この方式の効果を分かりやすく示しています。異なる色で異なるバージョンのグレースケールトラフィックを表現しています。マイクロサービスゲートウェイとマイクロサービス自体の両方がトラフィックを識別し、ガバナンスルールに基づいて動的な判断を行う必要があることが分かります。サービスバージョンが変更されると、この呼び出しリンクの転送もリアルタイムで変化します。マシンを使用して構築するグレースケール環境と比較して、この方式は大幅なマシンコストと運用保守の人件費を削減できるだけでなく、開発者がフルリンク全体のオンライントラフィックを迅速かつ正確に制御できるようにします。
OpenSergo [1] トラフィックルーティング標準
Q:OpenSergo とは
A:OpenSergo は、リンク全体のヘテロジニアスエコシステムをカバーする、オープンで汎用的な分散サービスアーキテクチャ向けのサービスガバナンス標準です。業界のサービスガバナンスシナリオと実践に基づいて共通標準を形成しています。OpenSergo の最大の特徴は、統一された設定、DSL、プロトコルでサービスガバナンスルールを定義し、多言語ヘテロジニアスアーキテクチャに対応してリンク全体のエコシステムカバレッジを実現することです。マイクロサービスの言語が Java、Go、Node.js、またはその他の言語のいずれであっても、標準的なマイクロサービスでもメッシュアクセスでも、ゲートウェイからマイクロサービスまで、データベースからキャッシュまで、サービス登録と検出から設定まで、開発者は同一の OpenSergo CRD 標準設定を使用して各レイヤーを一元管理でき、さまざまなフレームワークと言語間の差異を気にする必要がなく、ヘテロジニアスなフルリンクサービスガバナンスと制御の複雑さを軽減できます。
Q:フルリンクグレースケールを理解する前に、なぜ OpenSergo を先に紹介するのか
A:OpenSergo は、分散アーキテクチャ向けのフルリンクサービスガバナンス仕様を実装するための統一された YAML 設定方法を定義しています。仕様と標準を理解しながら、技術的な詳細の実装も把握できます。同時に、OpenSergo 標準に準拠した新しいコンポーネントを実装することも可能です。
トラフィックルーティングは、その名の通り、特定の属性特性を持つトラフィックを指定された宛先にルーティングすることを指します。トラフィックルーティングはトラフィックガバナンスの重要な構成要素です。開発者はトラフィックルーティング標準に基づき、グレースケールリリース、カナリアリリース、ディザスタリカバリルーティング、ラベルルーティングなど、さまざまなシナリオを実装できます。
フルリンクグレースケールの例:
トラフィックルーティングルール (v1alpha1) は主に 3 つの部分に分かれます:
- WorkloadLabelRule:ワークロードグループに対応するラベルを付けます。このブロックは、アプリケーションまたは対応するストレージレイヤーにラベルを付けるものと理解でき、データベースワークロード (データベース、テーブル) に対応するラベルを付けることを意味します。
- Traffic Label Rule:特定の属性特性を持つトラフィックに対応するラベルを付けます。
- Workload タグとトラフィックタグに基づくマッチングルートを実行し、指定されたタグを持つトラフィックをマッチする Workload に転送します。
トラフィックのラベル付け:
特定の属性特性を持つトラフィックに対応するラベルを付ける必要があります。
深センリージョンのユーザーをホームページの新規バージョンにグレースケールする場合を仮定します。テストユーザーの location=cn-shenzhen が location ヘッダーに設定されているとします。
前述の設定により、location ヘッダーが cn-shenzhen の HTTP トラフィックに gray フラグが付けられ、このトラフィックがグレースケールトラフィックであることを示します。
ワークロードのラベル付け:
Nacos をサービス検出ツールとして使用するビジネスシステムでは、一般的に使用しているマイクロサービスフレームワークに基づいてラベル付け方法を決定する必要があります。Java アプリケーションで Spring Cloud マイクロサービス開発フレームワークを使用している場合、ビジネスコンテナに対応する環境変数を追加することでタグ付け操作を完了できます。たとえば、ノードにバージョングレースケールを追加する場合、traffic.opensergo.io/label: gray をビジネスコンテナに追加します。これにより、フレームワークが Nacos に登録する際にノードに gray ラベルを自動的に付与します。
一部の複雑なワークロードラベリングシナリオ (データベースインスタンスやキャッシュインスタンスタグなど) では、WorkloadLabelRule CRD を使用してラベル付けを行えます。
データベースにおけるフルリンクグレースケールの一般的な方式
方式 1:シャドウデータベース
各データベースが独立したデータベースセットを維持します。ベースライン環境のデータベース名が mse-demo の場合、グレースケール環境のトラフィックは mse-demo-gray のデータベースにマッピングされます。同一インスタンス上に各環境のトラフィック用のシャドウデータベースを構築します。ビジネス内の各データベース接続に対して接続プールを維持し、異なるトラフィック指標に基づいて対応するシャドウデータベース接続を選択してアクセスすることで、ベースライン環境のデータベースからのデータ分離を実現し、グレースケール環境のフローにより生成されるデータによるベースライン環境のデータベースの汚染を防止します。
方式 2:シャドウテーブル
シャドウデータベース方式と同様に、シャドウテーブル方式では、同一インスタンスの同一データベース上に対応するシャドウテーブルを作成します。SQL の実行時に、グレースケールトラフィックの SQL を解析・修正することで、異なる環境の SQL が対応するテーブルにアクセスできるようにします。ベースライン環境のテーブル名が mse_demo_table の場合、グレースケール環境のトラフィックは mse_demo_table_gray のテーブルにマッピングされます。これにより、グレースケールデータとベースライン環境のデータテーブルの分離を実現します。
MSE [2] データベースフルリンクグレースケール機能
MSE は、ビジネスコードを一切修正せずにデータベースレベルでのフルリンクグレースケールを実現するデータ分離ソリューションを提供しています。以下では、MySQL データストレージに基づくシャドウテーブル方式を通じて、MSE がフルリンクグレースケールを実現する機能について説明します。
前提条件
- アプリケーションの MSE への接続
- デモアプリケーションのデプロイ
Alibaba Cloud コンテナサービスに A、B、C の 3 つのアプリケーションをデプロイし、各アプリケーションにベースバージョンとグレイバージョンをそれぞれデプロイします。また、サービス検出用の Nacos Server アプリケーションをデプロイします。詳細については、アプリケーションデプロイのチュートリアルを参照してください:デモアプリケーションのデプロイ [3]
ステップ 1:フルリンクグレースケールルールの設定
MSE のフルリンク公開を設定して完了する必要があります。具体的な操作手順については、チュートリアルを参照してください:フルリンクグレースケールの設定 [4]
以下のスイムレーンルールを作成します:
ステップ 2:データベースのフルリンクグレースケールの設定
- データベースのフルリンクグレースケール機能を追加で有効にするため、以下の環境変数を設定する必要があります。
ステップ 3:結果の確認
グレースケールリクエストを送信したところ、すべてのトラフィックリクエストがグレースケール環境にアクセスすることを確認しました:
グレースケール環境に挿入されたデータはシャドウテーブルに格納されています。
フルリンクグレースケールだけではありません
これまで、MSE サービスガバナンスのフルリンクグレースケール機能は、クラウドネイティブゲートウェイ、ALB、APISIX、Apache Dubbo、Spring Cloud、RocketMQ、データベースに対応してきました。データベースレベルでは、シャドウテーブルによるデータレベルのトラフィック分離を実現しています。次のステップとして、この機能のさらなる商業化を進め、フルリンクグレースケールはキャッシュレベルの機能もサポートする予定です。
サービスガバナンスは、マイクロサービス変革がある段階に達した後に避けて通れない道であり、その過程で新たな問題に直面し続けます。
- フルリンクグレースケール以外に、サービスガバナンスにはどのような機能があるのか
- サービスガバナンス機能の標準定義は存在するのか、またどのような内容が含まれるのか
- 多言語シナリオにおけるフルリンクのベストプラクティスや標準はあるのか
- ヘテロジニアスなマイクロサービスを統一してガバナンスするにはどうすればよいのか
サービスガバナンスを検討し、他のマイクロサービスと連携する過程で、異なるガバナンスシステムがもたらす困難は非常に大きく、2 つ以上のガバナンスシステムを接続するコストも莫大なものになります。このため、OpenSergo プロジェクトを提案しました。OpenSergo は、異なるフレームワークと言語におけるマイクロサービスガバナンスの概念の断片化と相互運用性の問題を解決することを目指しています。
Related Articles
-
A detailed explanation of Hadoop core architecture HDFS
Knowledge Base Team
-
What Does IOT Mean
Knowledge Base Team
-
6 Optional Technologies for Data Storage
Knowledge Base Team
-
What Is Blockchain Technology
Knowledge Base Team
Explore More Special Offers
-
Short Message Service(SMS) & Mail Service
50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00
