このタスクでは、シンプルなオンライン モール マイクロサービス システムに基づいた Dubbo のトラフィック制御機能を示します。
オンラインモールの構成図は以下の通りです。
このシステムは 5 つのマイクロサービス アプリケーションで構成されています。
- フロントエンドモールのホームページは、ユーザーと対話するための Web インターフェイスとして、User、Detail、Order などを呼び出すことにより、ユーザーのログイン、商品の表示、注文管理などのサービスを提供します。
- ユーザーデータ管理、本人確認等を担当するユーザーサービス。
- 注文注文サービス。注文作成や注文クエリなどのサービスを提供し、製品在庫やその他の情報を確認するために Detail サービスに依存します。
- Detail 製品詳細サービス。製品詳細情報を表示し、Comment サービスを呼び出して製品に関するユーザー コメント レコードを表示します。
- コメントコメントサービスは、製品に対するユーザーのコメントデータを管理します。
ショッピングモールシステムの導入
便宜上、システム全体を Kubernetes クラスターにデプロイし、次のコマンドを実行して mall プロジェクトのデプロイを完了します。プロジェクトのソース コードのサンプルは dubbo-samples/task にあります。
kubectl apply -f https://raw.githubusercontent.com/apache/dubbo-samples/master/10-task/dubbo-samples-shop/deploy/All.yml
完全な展開アーキテクチャ図は次のとおりです。
注文サービスには v1 と v2 の 2 つのバージョンがあり、v2 は注文サービスの最適化後にリリースされた新しいバージョンです。
- バージョン v1 は注文の詳細を表示せずに注文を作成するだけです
- バージョン v2 では、注文が正常に作成された後、注文の配送先住所の詳細が表示されます。
Detail サービスと Comment サービスには、それぞれ v1 と v2 の 2 つのバージョンがあり、トラフィック迂回の効果を実証するために複数のバージョンを使用します。
- バージョン v1 はデフォルトですべてのリクエストを処理します
- バージョン v2 は、特定のリージョンにデプロイされたサービスをシミュレートするため、v2 インスタンスには特定のラベルが付きます。
次のコマンドを実行して、すべてのサービスとポッドが正常に実行されていることを確認します。
$ kubectl get services -n dubbo-demo
$ kubectl get pods -n dubbo-demo
システムの整合性を確保するために、この例では、モールに関連するいくつかのマイクロサービス アプリケーションに加えて、Nacos 登録構成センター、Dubbo 管理コンソール、および Skywalking フル リンク追跡システムもバックグラウンドで起動します。
$ kubectl get services -n dubbo-system
$ kubectl get pods -n dubbo-system
アクセスアドレスを取得する
次のコマンドを実行して、クラスター ポートをローカル ポートにマッピングします。
kubectl port-forward -n dubbo-demo deployment/shop-frontend 8080:8080
kubectl port-forward -n dubbo-system service/dubbo-admin 38080:38080
kubectl port-forward -n dubbo-system service/skywalking-oap-dashboard 8082:8082
この時点で、ブラウザを開いて次のアドレスからアクセスします。
- モールホームページ http://localhost:8080
- Dubbo 管理コンソール http://localhost:38080
- スカイウォーキング コンソール http://localhost:8082
タスクアイテム
次に、次のタスク項目を通じて、モールに交通制御ルールを追加してみます。
タイムアウトを調整する
実行期間中にサービスタイムアウト時間を動的に調整することで、不当なタイムアウト設定やシステムの緊急事態によるサービスタイムアウトの多発やサービスブロックなどの問題に効果的に対処し、システムの安定性を向上させることができます。
再試行回数を増やす
最初のサービス呼び出しが失敗した後、再試行すると全体の呼び出し成功率が効果的に向上します。
アクセスログ
アクセス ログには、特定のマシンが一定期間内に処理したすべてのサービス リクエスト情報を記録できます。実行状態でアクセス ログを動的に有効にすると、トラブルシューティングに非常に役立ちます。
同じコンピュータルーム/エリアが望ましい
同じコンピュータ ルーム/エリア内の優先順位とは、アプリケーションがサービスを呼び出すときに、最初に同じコンピュータ ルーム/エリア内のサービス プロバイダーを呼び出し、クロスリージョンによって引き起こされるネットワーク遅延を回避し、それによって呼び出しの応答時間が短縮されることを意味します。
環境隔離
クラスター内の 1 つ以上のアプリケーション用に論理分離環境を分割することにより、グレースケール環境または複数セットのテスト環境で使用できます。
パラメータルーティング
たとえば、トラフィックはユーザー ID に基づいてルーティングされ、少数のユーザー リクエストが最新の製品バージョンに転送されて、新しいバージョンの安定性を確認し、製品エクスペリエンスに関するユーザー フィードバックが取得されます。
重量比
ルールを通じて単一のマシンまたはマシンのグループの重みを動的に調整することで、実行状態でリクエスト トラフィックの配分を変更し、動的な比例トラフィック ルーティングを実現できます。
サービスのダウングレード
サービスのダウングレードの中心的な目標は、これらの弱い依存関係をターゲットにすることです。弱い依存関係が利用できない場合、または呼び出しが失敗した場合、ダウングレード結果を返すことにより、関数は可能な限り完全な状態に保たれます。
固定機流用
リクエストを特定のプロバイダー マシンに転送することで、開発またはオンラインの問題を迅速に再現するのに役立ちます。