MSE online configuration tag push

背景

マイクロサービスシナリオでは、フルリンクグレースケーリングが低コストな新機能検証手法として、ますます広く利用されています。マイクロサービスインスタンスとトラフィックのグレースケーリングに加え、マイクロサービスアプリケーション内の設定項目にも対応するグレースケーリング機能が必要であり、グレースケールアプリケーションの特別な設定に対する要件を満たす必要があります。

ラベルプッシュの設定が必要な理由

フルリンクグレースケーリングから始める

マイクロサービスシナリオでは、アプリケーションのグレースケール公開は新たな課題に直面します。シングルアーキテクチャとは異なり、アプリケーションをまとめてパッケージ化してからテスト版をリリースするのではなく、マイクロサービスアプリケーションは複数のサービスで構成されることが多く、これらのサービスは通常、異なるチームによって独立して開発されます。新機能は通常、一部のサービスのみに関わります。新機能をテストする際は、これらのサービスのみを公開すれば問題ありません。マイクロサービスアプリケーションを正常に稼働させるには、公開不要な他のサービスを通過できるグレースケールトラフィックの仕組みも設計する必要があります。

この機能には通常、物理環境分離と論理環境分離の 2 つのソリューションがあります。前者は各グレースケール環境ごとに、ネットワークが隔離されリソースが独立した環境を構築する必要があります。アプリケーションの正常な稼働を確保するため、グレースケール対象外のサービスや各種ミドルウェアに対しても冗長な公開を行う必要があります。図に示す通りです:

物理環境分離ソリューションではマシンリソースの浪費が大きいため、業界では一般的に後者の論理環境分離方式をフルリンクグレースケーリングソリューションとして採用しています。グレースケールサービスのみをデプロイし、リンク上のフロー制御により、グレースケールトラフィックをグレースケール環境と本番環境間で流通させることで、グレースケールマイクロサービスアプリケーションの正常な稼働を実現し、ビジネス側の新機能検証を支援します。図に示す通りです:

設定グレースケールの適用シーン

多くのビジネスシナリオで設定グレースケール機能の活用が考えられます。ここではいくつかの代表的なシナリオを紹介します。

・キャナリアリリース

キャナリアリリースは業界で広く実装されており、新バージョンリリースの一般的な手段です。キャナリアリリースではトラフィックを比例的に分割します。最初は新バージョンのインスタンスに小規模な割合のトラフィックを割り当て、一定期間稼働後に新バージョンが正常に稼働していることを確認し、その後割り当てるトラフィックの割合を段階的に増加させて、最終的にすべてのトラフィックを切り替えます。この方法により、新バージョンに問題が発生した際の影響範囲を制御し、システムの安定性を向上できます。

キャナリアリリースは通常、フローダイイングとマシンマーキングを通じて実現されます。新バージョンのマシンにキャナリアバージョンのマークを付け、トラフィックの一部にもキャナリアバージョンのマークを付けることで、最終的にフルリンクグレースケーリングソリューションへと進化しました。キャナリアバージョンのアプリケーション内の設定項目で、旧バージョンとは異なる設定値を使用する必要がある場合があり、その場合は設定グレースケール機能が必要です。

・新機能のオンライン化

大規模な機能の変更がオンライン化される場合、機能の安定性は数量的に段階的に増加させることで検証されることが多いです。代表的なスケーリング手法はホワイトリスト方式で、ホワイトリストに設定されたユーザー/デバイスのみが新機能を利用でき、ホワイトリストに含まれないユーザーは引き続き旧バージョンを使用します。一定期間オンライン稼働後、ホワイトリストのユーザーからフィードバックを収集し、機能を最適化してホワイトリスト内のユーザー/デバイス数を段階的に増やし、最終的な安定状態に達した後に機能を全面リリースします。

ホワイトリストのユーザー/デバイスには特別なマークが付けられ、グレースケール環境にルーティングされます。新機能内の設定値が旧バージョンと異なる必要がある場合、設定グレースケールを同時に使用する必要があります。

・データベース移行

データベース移行もビジネス開発でよく直面する課題です。ビジネスの急速な成長に伴い、既存のデータベースが容量/パフォーマンスの面で将来のビジネスニーズを満たせなくなる可能性があり、データベース移行が必要になります。移行プロセスの安定性を確保するため、移行は通常段階的に行われます。このプロセスでは、一部のトラフィックが新データベースに書き込まれ、一部のトラフィックが旧データベースに書き込まれます。移行完了後、すべてのトラフィックが新データベースに切り替えられます。移行プロセス中、フローカラーリングとグレースケール設定により、異なるデータベースへの操作を行うことができます。

課題と解決策

マイクロサービスアプリケーションでは通常、設定管理のために設定センターを導入し、動的設定プッシュ機能を提供することで、アプリケーションを再起動せずに実行ロジックを動的に変更できます。ただし、設定センターの管理ディメンションは設定項目そのものであり、設定を取得しに来るサービスインスタンスの環境情報を感知できません。つまり、設定を要求しているインスタンスが本番環境のインスタンスなのかグレースケール環境のインスタンスなのかを区別できません。このような背景から、ある設定が本番環境とグレースケール環境で異なる値を使用する必要がある場合、設定センター内で異なる設定項目として扱う必要があります。以下のようなコードを記述する必要があるかもしれません:

グレースケール環境で異なる設定値を持つ設定項目が複数ある場合、このようなコードを複数回繰り返す必要があります。さらに極端なシナリオでは、テスト中のグレースケール環境が複数セットあり、各環境セットの設定値が異なる場合、設定項目の取得を担当するコードはさらに複雑になります。さらに、グレースケール環境には通常複数のサービスがあり、各サービスが独立して同様のコードを一式ずつ管理する必要があります。最終的な解決策は図に示す通りです。同じ設定項目が異なる環境で使用する設定値は、ユーザーアプリケーション側で能動的に区別する必要があります。

その理由は、設定センターがサービスインスタンスの環境情報を感知できないため、この処理をコード内で実行する必要があり、環境情報がビジネスコードに侵入してしまうことです。設定を取得するコードをラップしてビジネスコードの使用複雑度を軽減できますが、設定センターがサービスインスタンスの環境情報を感知できないという事実が存在する限り、環境情報のビジネスコードへの侵入は避けられません。

機能紹介

MSE の新機能である設定タグプッシュ機能は、設定管理シナリオにおける環境情報の感知をプラットフォーム側に移譲し、エージェントがその責任を担います。ユーザーは MSE に接続するだけで、フルリンクグレースケールシナリオでの設定プッシュ機能を簡単に利用でき、ビジネスコード内の煩雑な環境情報検出ロジックを排除できます。図に示す通りです:

設定タグプッシュが提供する機能は以下の通りです:

・ラベルディメンションでの設定管理

設定リストページでアプリケーション内の各種設定項目を確認できます。現在、MSE は以下の 3 種類の設定の収集をサポートしています:

A. SDK が提供する @Switch アノテーションでタグ付けされた設定クラス

B. Spring の @Value アノテーションでマークされた設定項目

C. SpringBoot の @ConfigurationProperties アノテーションでマークされた設定クラス

すべてのサービスインスタンスの設定値が各設定項目の下に表示されます。ユーザーはタグ名を通じて異なるインスタンスのグレースケール環境を直感的に確認でき、異なるグレースケール環境下での設定値の分布も確認できます。

・ラベルディメンションでのアプリケーション設定プッシュ機能

「タグでプッシュ」を使用すると、指定したグレースケール環境内のすべてのサービスインスタンスに対して、新しい設定値を永続的に簡単にプッシュできます。永続的とは、アプリケーションを再起動しても、その環境用の設定項目が失われないことを意味します。

・設定シナリオでのインスタンスの動的マーキング

アプリケーション起動時に MSE のマーキング方式でサービスインスタンスにラベルを設定するだけでなく、MSE コンソール上でサービスインスタンスに対して動的にラベルを追加/削除でき、異なるグレースケール環境での設定項目管理に対応できます。

・設定タグプッシュ全プロセスのトレーサビリティ

MSE はラベルプッシュの全プロセスに対するトレーサビリティ機能を提供しており、インスタンスのラベル変更記録やラベルプッシュ記録を含み、ラベルプッシュプロセスで発生した問題のトラブルシューティングを容易にします。

設定タグプッシュの実践

次に、実践を通じて設定タグプッシュの使用プロセスを紹介します。簡単な 3 つの手順で完了できます。

・事前準備

1. アプリケーションを MSE マイクロサービスガバナンスに接続する

2. MSE コンソールにログインし、対象のリージョンを選択する

3. ガバナンスセンター > アプリケーションガバナンスに移動し、接続したアプリケーションを選択する

・手順 1:ラベルの追加

設定タグプッシュの最初のステップは、サービスインスタンスにタグを設定することです。サービスインスタンスのタグは起動時に Alicloud.service.tag で設定でき、MSE コンソールで動的に設定することもできます。

次に、サービスインスタンスに対する動的なマーキングプロセスを紹介します。アプリケーション設定 > タグリストを選択します。ここに現在のアプリケーション配下のすべてのサービスインスタンスが表示されます。左上の「ラベル追加」ボタンをクリックし、表示されるノードマーキングウィンドウでタグ付けするサービスインスタンスのバッチを選択できます。ユーザーはノード IP でマーキング対象のインスタンスをフィルタリングできます。ノード IP でのフィルタリングに加え、MSE ではホスト名でのサービスインスタンスのフィルタリング機能も提供しています。マークするマシンを選択後、ラベル名を入力して「ラベル追加」をクリックすると、マシンのタグ付けが完了します。

・手順 2:ラベルでプッシュ

マシンのタグ付け後、指定したタグ用の設定値をプッシュできます。アプリケーション設定 > 設定リストに戻り、「customName」設定項目を選択して「タグでプッシュ」をクリックします。表示されるプッシュウィンドウで、プッシュ対象のタグを選択し、プッシュする設定値を設定して「次へ:値の比較」をクリックすると、新旧設定項目の差分を確認できます。その後「タグプッシュ」をクリックして設定の配信を完了します。

設定項目が「gray」タグを持つ 2 台のマシンインスタンスに正常にプッシュされたことを確認できます。

その後、「gray2」タグにも同じ操作を実行し、「testGray2」設定値をプッシュします。

タグ用の設定値プッシュは永続的です。ユーザーはコンソールで一度操作するだけでよく、その後、指定タグを持つサービスインスタンスが再起動する際、MSE はエージェントを通じて永続化された設定値をアプリケーションに送信します。

・手順 3:設定値の分布を確認

アプリケーション設定 > 設定リストに戻り、「customName」設定項目を選択します。「gray」と「gray2」のラベル用に先ほどプッシュした 2 つの設定値が反映されていることを確認できます。

「値の分布」をクリックします。表示されるウィンドウで、その設定項目のすべてのマシンインスタンス間での設定値の分布と、異なるタグでの永続化値を確認できます。

まとめ

本記事では、フルリンクグレースケールシナリオが設定管理にもたらす課題を紹介し、このシナリオに対する MSE のソリューションを説明し、実践を通じて設定タグプッシュの使用プロセスを紹介しました。今後、MSE は設定ガバナンスに関するさらなる探求を行い、マイクロサービス設定管理における課題の解決を支援し、マイクロサービスアプリケーションの安定性向上に貢献していきます。

Related Articles

Explore More Special Offers

  1. 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

phone お問い合わせ
Hi, I'm Alibaba Cloud AI Assistant!
I can help with questions and solutions.