このトピックでは、Java アプリケーション向けにマイクロサービスガバナンスのコア機能を使用する方法について説明します。
前提条件
- 説明
Kubernetes クラスターの最小要件構成は 12 コア、24 GiB のメモリです。
Kubernetes クラスターは、GitHub からデモをダウンロードするためにインターネット接続が必要です。
CloudShell からのアクセスを許可するために、Elastic IP アドレス (EIP) を使用して API サーバーを公開する必要があります。
ACK クラスターに ack-kubernetes-cronhpa-controller コンポーネントをインストールします。詳細については、「コンポーネントのインストール」をご参照ください。
RAM ユーザーの場合、Alibaba Cloud アカウントの管理者に <a baseurl="t2314492_v4_2_0.xdita" data-node="4751410" data-root="45393" data-tag="xref" href="t2487291.xdita#" id="b5397d18a1u34">AliyunMSEFullAccess</a> 権限を一時的に付与してもらい、このチュートリアル完了後に削除してもらってください。本番環境では、必要に応じて権限を付与してください。サービス管理の権限付与の詳細については、「マイクロサービス管理の権限付与」をご参照ください。
デモをデプロイする
デモの概要
このデモでは、Nacos インスタンスをレジストリとして使用し、必要に応じて有効にできる Spring Cloud ゲートウェイと Zuul ゲートウェイが含まれています。デフォルトのアプリケーション呼び出しワークフローは A -> B -> C です。アプリケーション A と C にはカナリアリリースバージョンがあります。アプリケーションコードはコードリポジトリから入手できます。
アプリケーション名 | サービスフレームワークバージョン | 関連コンポーネント | デモ |
Zuul | Spring Cloud Greenwich | zuul | |
SpringCloudGateway | spring-cloud-starter-gateway 4.1.2 | spring-cloud-starter-gateway | |
A | Spring Cloud 2023.0.1 Dubbo 3.3.0 | openfeign/httpclient/rocketmq/nacos/loadbalancer | |
B | Spring Cloud 2023.0.1 Dubbo 3.3.0 | httpclient/mybatis/druid/nacos | |
C | Spring Cloud 2023.0.1 Dubbo 3.3.0 | openfeign/httpclient/nacos |

Helm パッケージをダウンロードする
デモ用の Helm パッケージをダウンロードします。Helm パッケージとイメージは定期的に更新されます。

デプロイ方法
ACK クラスタの CloudShell を使用して mse-simple-demo をデプロイする
mse-simple-demo ファイルを準備します。
ACK コンソールにログインします。 ターゲットクラスターを選択し、[クラスター情報] ページで [ワークベンチでクラスターを管理] をクリックします。

Helm パッケージをアップロードします。

unzip mse-simple-demo.zipコマンドを実行して、デモパッケージを解凍します。kubectl create namespace mse-demoコマンドを実行して、--namespace パラメーターに対応する名前空間を作成します。
Helm を使用して mse-simple-demo をデプロイする
次の Helm コマンドを実行して mse-simple-demo をデプロイします。
helm upgrade mse-simple-demo mse-simple-demo \
--set mse.namespace=mse-demo \
--set gateway.springcloud=true \
--install \
--namespace mse-demo \
--values mse-simple-demo/values.yaml次のパラメータを変更できます。
namespace: デモをインストールする Kubernetes 名前空間です。このパラメーターはオプションです。デフォルト値は `default` です。registry: コンテナイメージアドレスのプレフィックスです。クラスターがデモイメージをプルできない場合は、イメージをアカウントのイメージリポジトリに同期し、このパラメーターを新しいアドレスで更新できます。images.version: イメージのバージョンです。最新バージョンは 3.1.0 です。mse.namespace: MSE マイクロサービスガバナンスに接続されている microservices namespace です。このパラメーターを使用して環境を区別できます。デフォルト値は mse-demo です。nacos.host: Nacos レジストリのアドレスです。デモは自動的に Nacos サーバーを起動します。デモアプリケーションを別のアドレスの Nacos に登録する場合は、このパラメーターを設定します。autoscaling: 自動スケーリングを有効にするかどうかを指定します。デフォルト値は false です。この機能を有効にする前に、kubernetes-cronhpa-controller コンポーネントがクラスターにインストールされていることを確認してください。resources.enable: リソースリクエスト構成を設定するかどうかを指定します。デフォルト値は true です。
基本機能を確認する
エンドツーエンドカナリアリリース
MSE コンソールにログインします。左側のナビゲーションウィンドウで、[マイクロサービスガバナンス] > [エンドツーエンドカナリアリリース] を選択します。
レーングループを作成する
[エンドツーエンドカナリアリリース] ページで:
[レーングループとレーンの作成] をクリックします。選択した microservices namespace にレーングループが既に存在する場合は、[+ レーングループの作成] をクリックします。
[レーングループの作成] ページでパラメーターを設定し、[OK] をクリックします。

レーンを作成する
[エンドツーエンドカナリアリリース] ページの下部で:
[最初の分割レーンの作成] をクリックします。選択した microservices namespace にレーンが既に作成されている場合は、[レーンの作成] をクリックします。
[レーンの作成] パネルでレーン設定を構成し、[OK] をクリックします。


共通リクエストをベースバージョンにルーティングする
Web ページのアドレスは、ゲートウェイ SLB のアドレスです。このアドレスを見つけるには、ACK コンソールでクラスターの詳細ページに移動します。[ワークロード] > [デプロイメント] を選択します。デプロイメントページで、`spring-cloud-gateway` デプロイメントをクリックします。表示される詳細ページで、[アクセス方法] タブをクリックします。[サービス] セクションの [外部エンドポイント] 列で IP アドレスとポートを確認できます。
ブラウザでゲートウェイの SLB アドレスにアクセスし、次のリクエストを送信します。


カナリアリクエストをカナリアリリースバージョンにルーティングする


詳細については、「自己管理型の Spring Cloud Gateway または Zuul ゲートウェイに基づくエンドツーエンドカナリアリリースの実装」をご参照ください。
グレースフルスタートとシャットダウン
MSE コンソールにログインします。左側のナビゲーションウィンドウで、[マイクロサービスガバナンス] > [アプリケーションガバナンス] を選択します。[アプリケーションリスト] ページで、目的のアプリケーションの名前をクリックして概要ページに移動します。
グレースフルスタートとシャットダウンを構成する
アプリケーションの概要ページの左側のナビゲーションウィンドウで、[トラフィックガバナンス] を選択します。デフォルトでは、いくつかのグレースフル起動とシャットダウン機能が提供されています。すべての機能を使用するには、コンソールでグレースフル起動とシャットダウンの設定を有効にして構成できます。

イベントとプロセスを表示する

詳細については、「グレースフルスタートとシャットダウン」をご参照ください。
スロットリングルール
MSE コンソールにログインします。左側のナビゲーションウィンドウで、[マイクロサービスガバナンス] > [アプリケーションガバナンス] を選択します。[アプリケーションリスト] ページで、目的のアプリケーションの名前をクリックして概要ページに移動します。
スロットリングルールの設定
アプリケーションの概要ページの左側のナビゲーションウィンドウで、[トラフィックガバナンス] を選択します。トラフィックガバナンスページで、[フロー保護] > [インターフェイススロットリング] を選択し、[スロットリングルールの追加] をクリックします。

スロットリング効果
ブラウザでゲートウェイの SLB アドレスにアクセスし、次のリクエストを送信します。

アプリケーション A には 1 つのノードがあります。シングルノードのスロットリングしきい値は 5 に設定されており、QPS (クエリ/秒) は 5 で安定しています。

詳細については、「トラフィック保護とは」をご参照ください。
サンプルリクエスト
`localhost` をゲートウェイの SLB アドレスに置き換えてください。ゲートウェイの Pod からリクエストを送信できます。
# 通常リクエスト
http://localhost:20000/A/a
A[10.0.0.47][config=base] -> B[10.0.0.39] -> C[10.0.0.48]
# カナリアリクエスト
http://localhost:20000/A/a?name=xiaoming
Agray[10.0.0.41][config=base] -> B[10.0.0.55] -> Cgray[10.0.0.30]
# 通常リクエスト (Feign)
http://localhost:20000/A/aByFeign
A[10.0.0.47][config=base] -> B[10.0.0.55]
# 通常リクエスト (A が B と C を順次リクエスト)
http://localhost:20000/A/a2bc
A[10.0.0.47][config=base] -> C[10.0.0.48]
A[10.0.0.47][config=base] -> B[10.0.0.55] -> C[10.0.0.49]
# Dubbo リクエスト
http://localhost:20000/A/dubbo
A[10.0.0.44] -> B[10.0.0.39]name:A -> C[10.0.0.49] params:A
# Dubbo カナリアリクエスト
http://localhost:20000/A/dubbo?name=xiaoming
Agray[10.0.0.41] -> B[10.0.0.39]name:A -> Cgray[10.0.0.30] params:A
# スロットリングテスト用のリクエスト
http://localhost:20000/A/flow
A[10.0.0.17][config=base] -> B[10.0.0.39] sleepTime:9 -> C[10.0.0.48] sleepTime:8 code:200
http://localhost:20000/A/dubbo-flow
A[10.0.0.17] -> B[10.0.0.55]name:A -> C[10.0.0.48] params:A
http://localhost:20000/A/isolate
A[10.0.0.42][config=base] -> B[10.0.0.55] sleepTime:504 -> C[10.0.0.48] sleepTime:8 code:200
http://localhost:20000/A/dubbo-isolate
A[10.0.0.17] -> B[10.0.0.55]name:isolate -> C[10.0.0.49] params:isolate
http://localhost:20000/A/params/hot
A[10.0.0.17][config=base] params:hot -> B[10.0.0.55] sleepTime:5 params:hot -> C[10.0.0.49] sleepTime:6 params:hot code:200
http://localhost:20000/A/dubbo-params/hot
A[10.0.0.17] params:hot -> B[10.0.0.55]name:hot -> C[10.0.0.49] params:hot
# データベースリクエスト
http://localhost:20000/A/sql?command=query&id=1
A[10.0.0.44][config=base] -> B[10.0.0.39] result:{"age":1,"email":"emailUpdate%40demo.com","id":1,"name":"name1Update"}
http://localhost:20000/A/sql?command=update&name=name1Update&email=emailUpd***@demo.com&age=1&id=1
A[10.0.0.44][config=base] -> B[10.0.0.55] result:true
# spring boot リクエスト
http://localhost:20000/spring_boot追加情報
アプリケーション接続
このメソッドでは、接続したい各アプリケーションのデプロイメントに msePilotAutoEnable: "on" ラベルを明示的に追加する必要があります。実際には、MSE オペレーションセンターで Kubernetes 名前空間全体のマイクロサービスガバナンスを有効にして、アプリケーションをバッチで接続できます。
詳細については、「ACK および ACS マイクロサービスアプリケーションを MSE ガバナンスセンターに接続する (Java)」をご参照ください。
グレースフルスタートとシャットダウン
デプロイメント中にグレースフル起動とシャットダウンを有効にしなかった場合は、後で次の手順を実行して有効にできます。
グレースフル起動とシャットダウンを使用するには、ACK コンソールにログインします。クラスター情報ページの左側のナビゲーションウィンドウで、[運用管理] > [アドオン] を選択し、検索ボックスで
cronhpaを検索して [インストール] をクリックします。次の YAML ファイルを使用して、スケジュールされたスケーリングタスクを作成します。`Namespace` フィールドは、Helm のインストール時に選択した Kubernetes 名前空間と同じに設定する必要があります。
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: cronhpa-deployment-spring-cloud-b
namespace: mse-demo # 注: namespace フィールドは、Helm のインストール時に選択した Kubernetes 名前空間と同じである必要があります。
spec:
jobs:
- name: scale-out
schedule: 0 0/6 * * * *
targetSize: 6
- name: scale-in
schedule: 0 5/6 * * * *
targetSize: 2
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: spring-cloud-bゲートウェイの自動リクエスト設定
自動リクエスト送信はデフォルトで有効になっています。Container Service コンソールにログインできます。ナビゲーションバーで、[ワークロード] > [ステートレス] をクリックします。ステートレスページで、spring-cloud-gateway アプリケーションをクリックします。詳細ページで、右上隅の [編集] をクリックし、自動リクエスト用に次の環境変数を設定します。
環境変数キー | 説明 | デフォルト値 |
enable.auto | 自動トラフィックのマスター スイッチ | true |
enable.rpc.invoke | Dubbo リクエストのスイッチ | true |
enable.sql | データベースリクエストのスイッチ | true |
enable.sentinel.demo.flow | Sentinel ルール関連のリクエストのスイッチ。その中で:
| true |
enable.gray | タグベースのカナリアリクエストのスイッチ | false |
demo.qps | QPS でのリクエストレート。これは /a パスのリクエストレートを制御します。他のパスのレートは、この値に相対的です。 | 20 |
