すべてのプロダクト
Search
ドキュメントセンター

Microservices Engine:マイクロサービスガバナンスを 15 分で開始する (Java アプリケーションの場合)

最終更新日:Apr 03, 2025

このトピックでは、Java アプリケーションを使用してマイクロサービスガバナンスのコア機能を開始する方法について説明します。

前提条件

デモをデプロイする

デモの概要

このデモでは、レジストリとして Nacos インスタンスを使用し、Spring Cloud ゲートウェイと Zuul ゲートウェイを備えています。ビジネス要件に基づいて 2 つのゲートウェイを有効にすることができます。デモのデフォルトのアプリケーション呼び出しワークフローは A -> B -> C で、アプリケーション A とアプリケーション C にはそれぞれのカナリアバージョンがあります。コードリポジトリからアプリケーションコードを取得できます。

アプリケーション名

サービスフレームワークバージョン

関連コンポーネント

デモ構成

Zuul

Spring Cloud Greenwich

zuul

pom.xml

SpringCloudGateway

spring-cloud-starter-gateway 4.1.2

spring-cloud-starter-gateway

pom.xml

A

Spring Cloud 2023.0.1

Dubbo 3.3.0

openfeign/httpclient/rocketmq/nacos/loadbalancer

pom.xml

B

Spring Cloud 2023.0.1

Dubbo 3.3.0

httpclient/mybatis/druid/nacos

pom.xml

C

Spring Cloud 2023.0.1

Dubbo 3.3.0

openfeign/httpclient/nacos

pom.xml

image.png

Helm パッケージをダウンロードする

リンクからデモの Helm パッケージをダウンロードします。Helm パッケージとイメージは GitHub で定期的に更新されます。

image

デプロイ方法

ACK クラスタの CloudShell を使用して mse-simple-demo をデプロイする

  1. mse-simple-demo ファイルをパッケージ化します。

  2. ACK コンソールにログインします。 クラスタの名前をクリックします。表示されるページで、[cloudshell を使用してクラスタを管理] をクリックします。image

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

  4. unzip mse-simple-demo.zip コマンドを実行して、デモパッケージを解凍します。

  5. 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: mse-simple-demo が属する Kubernetes 名前空間。このパラメータはオプションです。ほとんどの場合、default という名前のネームスペースが使用されます。

  • registry: コンテナイメージアドレスのプレフィックス。クラスタがデモイメージをプルできない場合は、デモイメージをアカウントのイメージリポジトリに同期し、このアドレスを変更できます。

  • images.version: イメージのバージョン。最新バージョンは 3.1.0 です。

  • mse.namespace: MSE マイクロサービスガバナンスに接続されているマイクロサービス名前空間。このパラメータを使用して、異なる環境を区別できます。デフォルト値: mse-demo。

  • nacos.host: Nacos レジストリのアドレス。デモは自動的に Nacos サーバーを起動します。デモアプリケーションを別の Nacos サーバーに登録する場合は、このパラメータを構成する必要があります。

  • autoscaling: 自動スケーリングを有効にするかどうかを指定します。デフォルト値: false。自動スケーリングを有効にする前に、kubernetes-cronhpa-controller コンポーネントがクラスタにインストールされていることを確認してください。

  • resources.enable: リソースのリクエストを構成するかどうかを指定します。デフォルト値: true。

基本機能を確認する

エンドツーエンドカナリアリリース

MSE コンソール にログインします。左側のナビゲーションペインで、[マイクロサービスガバナンス] > [フルリンクグレースケール] を選択します。

レーングループを作成する

[フルリンクグレースケール] ページで、次の手順を実行します。

  1. [レーングループとレーンを作成] をクリックします。選択したマイクロサービス名前空間にレーングループが使用可能な場合は、[+ レーングループを作成] をクリックします。

  2. [レーングループを作成] パネルで、パラメータを構成し、[OK] をクリックします。

image

レーンを作成する

[フルリンクグレースケール] ページの下部で、次の手順を実行します。

  1. [最初の分割レーンを作成] をクリックします。選択したマイクロサービス名前空間にレーングループが使用可能な場合は、[レーンを作成] をクリックします。

  2. [レーンを作成] パネルで、レーン関連のパラメータを構成し、[OK] をクリックします。

    image

    image

共通リクエストをベースバージョンにルーティングする

説明

Web ページの IP アドレスは、ゲートウェイにバインドされている Server Load Balancer (SLB) インスタンスの IP アドレスです。 [ACK コンソール] のクラスタ詳細ページで、[ワークロード] > [デプロイメント] を選択します。[デプロイメント] ページで、spring-cloud-gateway をクリックします。表示されるページで、[アクセス方法] をクリックします。[サービス情報] のアクセス方法で、[外部エンドポイント] 列の IP アドレスとポート番号を確認できます。

ブラウザを使用してゲートウェイの SLB アドレスにアクセスし、次のリクエストを開始します。

image

image

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

image

image

詳細については、「セルフマネージド Spring Cloud または Zuul ゲートウェイに基づいてエンドツーエンドカナリアリリースを実装する」をご参照ください。

グレースフルスタートとシャットダウン

MSE コンソールにログインします。左側のナビゲーションウィンドウで、[マイクロサービスガバナンス] > [アプリケーションガバナンス] を選択します。[アプリケーションリスト] ページで、目的のアプリケーションの名前をクリックして、[アプリケーションの概要] ページに移動します。

グレースフルスタートとシャットダウンを構成する

[アプリケーションの概要] ページで、左側のナビゲーションウィンドウの [トラフィック管理] をクリックします。デフォルトでは、システムはいくつかのグレースフルスタートとシャットダウン機能を提供します。グレースフルスタートとシャットダウンの全機能を活用するには、コンソールでグレースフルスタートとシャットダウンの設定を有効にして構成できます。

image

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

image

詳細については、「グレースフルスタートとシャットダウン」をご参照ください。

スロットリングルール

エントリ: MSE コンソールにログインします。左側のナビゲーションウィンドウで、[マイクロサービスガバナンス] > [アプリケーションガバナンス] を選択します。[アプリケーションリスト] ページで、目的のアプリケーションのカードをクリックして、[アプリケーションの概要] ページに移動します。

スロットリングルールを追加する

[アプリケーションの概要] ページで、左側のナビゲーションウィンドウの [トラフィック管理] をクリックします。[トラフィック管理] ページで、[フロー保護] タブをクリックします。[フロー保護] タブで、[インターフェースフロー制御] サブタブをクリックし、[スロットリングルールを追加] をクリックします。

image

スロットリング効果を表示する

ブラウザを使用してゲートウェイの SLB アドレスにアクセスし、次のリクエストを開始します。

image

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

image

詳細については、「概要」をご参照ください。

サンプルリクエスト

説明

localhost フィールドの値を、ゲートウェイにバインドされている SLB インスタンスの IP アドレスに変更する必要があります。その後、ゲートウェイのポッドを使用してリクエストを開始できます。

# 共通リクエスト
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" を明示的に追加することです。実際のユースケースでは、O&M センターページで、Kubernetes クラスタの名前空間内のアプリケーションに対してマイクロサービスガバナンスを一度に有効にすることができます。

詳細については、「ACK または ACS クラスタ内の Java マイクロサービスアプリケーションに対してマイクロサービスガバナンスを有効にする」をご参照ください。

グレースフルスタートとシャットダウン

説明

アプリケーションのデプロイ時にグレースフルスタートとシャットダウンを有効にしなかったが、後続のプロセスでグレースフルスタートとシャットダウン機能を使用し、その効果を確認したい場合は、このセクションで説明する手順を実行できます。

  1. グレースフルスタートとシャットダウン機能を使用するには、ACK コンソールにログインします。[クラスタ情報] ページで、左側のナビゲーションウィンドウの [操作] > [アドオン] を選択し、検索ボックスに cronhpa を入力して、コンポーネントカードの [インストール] をクリックします。

  2. 次の 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

ゲートウェイによる自動リクエスト開始の構成

デフォルトでは、すべてのリクエストの自動送信が有効になっています。ACK コンソールにログインし、[クラスタ情報] ページに移動します。左側のナビゲーションウィンドウで、[ワークロード] > [デプロイメント] を選択します。[デプロイメント] ページで、spring-cloud-gateway アプリケーションをクリックします。アプリケーション詳細ページで、右上隅にある [編集] をクリックし、さまざまなリクエストの自動開始のための環境変数を構成します。

環境変数キー

説明

デフォルト値

enable.auto

ゲートウェイのリクエストの自動開始を有効にするかどうかを指定します。

true

enable.rpc.invoke

Dubbo リクエストの自動開始を有効にするかどうかを指定します。

true

enable.sql

データベースリクエストの自動開始を有効にするかどうかを指定します。

true

enable.sentinel.demo.flow

Sentinel ルール関連のリクエストの自動開始を有効にするかどうかを指定します。

  • flow リクエストは、スロットリングルールをテストするために使用されます。

  • isolate リクエストは、場合によっては並行して送信され、分離ルールをテストするために使用できます。

  • params はホットパラメータを伝送し、ホットパラメータ保護ルールをテストするために使用できます。

true

enable.gray

タグベースのカナリアリリースに関連するリクエストの自動開始を有効にするかどうかを指定します。

false

demo.qps

リクエスト QPS。このパラメータは、/a パスのリクエスト QPS を制御します。/a パスのリクエスト QPS が変更されると、他のパスのリクエスト QPS もそれに応じて調整されます。

20

image.png