MSE supports Go language traffic protection

まとめ

Go 言語とクラウドネイティブの普及に伴い、Go 言語はマイクロサービスシーンでますます多く利用されており、Go 言語マイクロサービスのガバナンス、流量制限、デグラデーションへの需要も高まっています。

Go 言語では、go.uber.org/ratelimit などのフロー制御ライブラリがコミュニティから提供されていますが、多言語対応が不十分で Go のみしかサポートされていないこと、機能面でも流量制限とデグラデーションはフロー制御、アイソレーション、サーキットブレーカー、ホットスポットなどの機能に細分化されており、動的設定に対応していないため、機能的なサポートが十分ではありません。

Alibaba Cloud のマイクロサービスエンジン (MSE) は、Sentinel と連携することで、Go 言語および Java 言語のアプリケーションにマイクロサービスガバナンス機能を提供します。本記事では、Go 言語マイクロサービスアプリケーションで流量制限とデグラデーション機能を使用する方法を紹介します。

流量制限とデグラデーションとは

マイクロサービスアプリケーションにおいて、流量制限とデグラデーションは主に以下の 3 つの要素で構成されます。

・ターゲット:どのようなトラフィックを対象とするか

・戦略:流量制限とデグラデーションの戦略

・フォールバックアクション:戦略発動後の動作

たとえば、注文作成インターフェイス(ターゲット)に対して、リクエストを 1000 QPS に制限する(戦略)場合、フロー制御が発動されると、リクエストは例外を返します(フォールバックアクション)。

Alibaba Cloud MSE は、オープンソースの Sentinel 方式で定義されたリソースをサポートし、MSE から流量制限とデグラデーションのルールを取得して適用できます。全体的な接続方法は以下の通りです。

MSE の流量制限とデグラデーションの使用方法

アプリケーションの接続

1. MSE Go SDK [1] をダウンロードします。

A. SDK の example ディレクトリにあるサンプルを参考に接続できます。

2. go.mod ファイルに、以下の依存関係の宣言を追加します。

アプリケーションのデプロイ

クラウドネイティブなデプロイ方式では、一般的なデプロイ仕様は 12 factor [2] です。設定については、アプリケーションの設定を環境変数に保存することが推奨されます。これにより、アプリケーションのデプロイ時に異なる環境変数を切り替えるだけで、異なる環境に接続できます。

同様に、MSE Go SDK でも環境変数を通じた MSE への接続を推奨しています。必要な環境変数は以下の通りです。

上記の手順に従って接続すると、アプリケーション一覧ページで接続済みのアプリケーションを確認できます。

リソースの定義

記事の冒頭で、流量制限とデグラデーションはターゲット+戦略+フォールバックアクションで構成されると説明しました。したがって、最初のステップはターゲットを定義することです。

・Sentinel によるリソースの定義

MSE はユーザーが Sentinel を通じて定義したリソースをサポートしています。ビジネスロジックを以下のコードブロックでラップするだけです。

日常的な業務開発では、開発者は Dubbo-go、Gin、gRPC などのマイクロサービスフレームワークを通じてサービスを提供することが多く、これらのサービスをリソースとして登録したいと自然に考えるでしょう。

・Dubbo-go によるリソース定義方法

dubbo go アダプターを導入するだけで、リソースが自動的に MSE に登録されます。

・Dubbo アプリケーションはコード内で import パッケージの形で Dubbo アダプターを導入します。init() 関数が関連するフィルターを自動的に注入します。Dubbo Go のバージョンは 1.3.0 以上が必要です。Sentinel Dubbo アダプターは、すべてのプロバイダーとコンシューマーの呼び出しを自動的に集計します。

・gRPC アプリケーションの接続

・gRPC アプリケーションは、gRPC の初期化コードに Sentinel が提供するインターセプタを導入します。Sentinel はサーバー側とクライアント側の両方に、unary 用と streaming 用のインターセプタを提供します。上記のコードはサーバー側を例としています。デフォルトのフロー制御処理ロジックは Sentinel の BlockError を返すことです。インターセプタの作成時に、カスタムのフォールバック処理ロジックを指定することもできます。

・Gin Web アプリケーションの接続

・Gin Web アプリケーションは、Gin の初期化コードに SentinelMiddleware を導入します。Sentinel は各 API ルートに対して集計を行い、リソース名は「GET:/foo/:id」のようになります。デフォルトのフロー制御処理ロジックは 429 (Too Many Requests) エラーコードを返すことです。

・Go-Micro アプリケーションの接続

・Go-Micro の初期化コードに Sentinel が提供するラッパーを導入します。Sentinel は Go-Micro のサーバー側とクライアント側の両方にラッパーを提供します。上記のコードはサーバー側を例としています。計装点はデフォルトでサービスメソッドをリソース名として抽出し、デフォルトのフロー制御処理ロジックは Sentinel の BlockError を返すことです。ラッパーの作成時に、カスタムのフォールバック処理ロジックを指定することもできます。

フロー制御ルールの設定方法

上記の方法で接続した後、フロー制御ルール、アイソレーションルール、サーキットブレーカールール、ホットスポットルールなどの各種ルールを設定できます。

・アプリケーションの確認

接続後、アプリケーション一覧ページで接続済みのアプリケーションを確認できます。

アプリケーション詳細ページでは、アプリケーションの概要データも確認できます。

コード内で登録されたリソースを確認できます。

・フロー制御ルールの設定

各リソースに対してフロー制御ルールを設定できます。

フロー制御ルールを設定すると、拒否された QPS が増加し、通常の QPS が減少することが確認できます。

フロー制御保護を選択すると、サービスが耐えられる QPS トラフィックを事前に設定できます。トラフィックが設定された閾値に達すると、超過リクエストを即座に遮断し、アプリケーションが瞬時のトラフィックピークに圧迫されるのを防止します。

・アイソレーションルールの設定

アイソレーション保護を選択すると、インターフェイスや依存関係の同時実行スレッド数を制御することで、システムの安定性を確保できます。一般的に、アプリケーション内部や下流の依存関係が不安定になるシナリオ(スロー SQL や下流アプリケーションの応答時間が長くなる場合など)に適用されます。

・サーキットブレーカールールの設定

サーキットブレーカー保護を選択すると、アプリケーション内部や下流の依存関係の応答時間や異常割合を監視し、指定された閾値に達した時点で下流の依存関係の優先度を即座に下げます。指定された期間内、システムはこの不安定なリソースを呼び出さず、アプリケーションへの影響を回避することで、高い可用性を確保します。指定された期間経過後、リソースの呼び出しが再開されます。

・ホットスポットルールの設定

ホットスポットパラメーター保護を選択すると、AHAS はリソース呼び出しの中で呼び出し頻度の高いパラメーターを分析し、設定されたホットスポットルールに基づいて、ホットスポットパラメーターを含むリソース呼び出しに対してフロー制限を行い、システムの安定性を保護します。ホットスポットとは、頻繁にアクセスされるデータです。たとえば、以下のシナリオでは、一定期間内で最もアクセス頻度の高い商品 ID を集計して制限し、キャッシュ破損によるデータベースへの大量リクエストを防止する必要があります。

・一定期間内で最も頻繁にアクセスされるユーザー ID を制限し、悪意のある自動注文を防止します。

MSE マイクロサービスガバナンスの展望

OpenSergo オープンソースプロジェクトは Sentinel プロジェクトと連携し、流量制限とデグラデーションの標準を策定・完善しており、統一されたコントロールプレーンを通じて異なる言語アプリケーションの統一されたマイクロサービスガバナンスを実現します。

Alibaba Cloud のマイクロサービスエンジン (MSE) も段階的に OpenSergo 標準をサポートし、マイクロサービス開発者が OpenSergo を通じて異なる言語のマイクロサービスアプリケーションを統一してガバナンスできるようにします。

同時に、Alibaba Cloud 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.