Nacos 2.0が正式にリリースされ、パフォーマンスが大幅に向上しました

Nacosプロジェクトは、Alibabaの内部の多色石プロジェクトから始まり、2008年から内部でインキュベートされています。近年、ユーレカや執政官などのプロジェクトの影響を受けて、ナコスはますます人気が高まっています!

現在、Nacosは、主流のマイクロサービス開発言語と主流のサービスフレームワーク、およびDuboo、SpringCloud、SCAなどの構成管理フレームワーク、およびcoreDNSやsentinelなどの一部のクラウドネイティブコンポーネントをサポートしています。

クライアント言語は現在、Javaやgo pythonなどの主流言語をサポートしており、最近リリースされた公式バージョンもC#とC ++をサポートしています。

最近、Nacosは頻繁に更新され、Nacos 2.Xバージョンがデビューし、1.Xアーキテクチャに基づく長い接続モデルのサポートが追加されました。通信層は現在、grpcを介して長接続RPC呼び出しとプッシュ機能を実装しており、長接続を使用する利点は大幅に減少しています。1.xの頻繁なポーリングハートビートはJVMフルGCにつながります。

1.Xアーキテクチャの問題

次に、Nacos1.Xアーキテクチャが直面するより重要な問題のいくつかを見てみましょう。

一文で、多くのハートビート、多くの無効なクエリ、ハートビート更新の認識の遅い変化、高い接続消費、および深刻なリソースの浪費があります。

画像

画像

  1. ハートビートの数が非常に多いため、TPSは高いままです

ハートビートの更新により、サービスの規模が大きくなると、特にDubboのようなインターフェイスレベルのサービスが増えると、ハートビートと構成メタデータのポーリング数が多くなり、クラスター内のTPSが高くなり、システムリソースの消費量が多くなります。

  1. ハートビートの更新、時間の延長を通じてサービスの変化を認識する

ハートビートの更新は、削除されてサブスクライバーに通知される前にタイムアウト期間に達する必要があります。デフォルトは15秒で、遅延が長く、適時性が低くなっています。タイムアウト期間が短くなると、ネットワークがジッターするときに変更プッシュが頻繁にトリガーされ、クライアントとサーバーの損失が大きくなります。

  1. UDPプッシュは信頼性が低く、QPSが高くなります

UDPは信頼性が低いため、クライアントは定期的に調整クエリを実行して、クライアントによってキャッシュされたサービスリストのステータスが正しいことを確認する必要があります。サブスクリプションクライアントのサイズが大きくなると、クラスターQPSは非常に高くなりますが、ほとんどのサービスはリストは実際にはそうではありません。頻繁に変更すると無効なクエリが発生し、リソースが浪費されます。

  1. HTTPショート接続モデルに基づくと、TIME_WAIT状態の接続が多すぎます

HTTPショート接続モデル、各クライアント要求はTCPリンクを作成および破棄し、TCPプロトコル破棄のリンク状態はWAIT_TIMEです。完全に解放されるまでに時間がかかります。TPSとQPSが高い場合、サーバーとクライアントは多くのWAIT_TIMEステータスリンク。接続タイムアウトエラーが発生したり、要求されたアドレスを割り当てることができません。

  1. 構成モジュールの30秒の長いポーリングによって引き起こされる頻繁なGC

構成モジュールは、HTTPショート接続ブロッキングモデルを使用してロング接続通信をシミュレートしますが、実際のロング接続モデルではないため、30秒ごとに要求とデータのコンテキストスイッチが必要です。各スイッチはメモリの浪費を引き起こし、サーバー側の頻繁なGCに。

Nacos2.xアーキテクチャの長所と短所

Nacos 2.xのアーキテクチャと新しいモデルの仕組みを簡単に紹介しました。次に、このような変更の長所と短所を分析しましょう。

画像

画像

利点

  1. クライアントはインスタンスのハートビートを定期的に送信する必要がなくなり、接続を維持するために使用できるのはキープアライブメッセージのみです。繰り返されるTPSを大幅に減らすことができます。

  2. TCP接続の切断をすばやく検出できるため、応答速度が向上します。

  3. 長い接続でのストリーミングプッシュはUDPよりも信頼性が高く、nioのメカニズムはスループットが高く、信頼性の高いプッシュにより、クライアントの調整サービスリストの時間が長くなり、関連するリクエストが削除されることもあります。繰り返される無効なQPSを大幅に減らすことができます。

  4. 長い接続は頻繁な接続オーバーヘッドを回避し、TIME_WAITの問題を大幅に軽減できます。

  5. 本当に長い接続は、構成モジュールのGCの問題を解決します。

  6. よりきめ細かい同期コンテンツは、サービスノード間の通信圧力を軽減します。

不利益

特効薬の解決策はありません。新しいアーキテクチャでは、いくつかの新しい問題も発生します。

  1. 内部構造の複雑さが増し、接続ステータスが管理され、接続の負荷分散を管理する必要があります。

  2. データは、接続にバインドされた元のステートレスデータからステートフルデータに変更され、プロセスリンクが長くなります。

  3. RPCプロトコルはHTTPほど観察可能ではありません。gRPCがHTTP2.0ストリームに基づいて実装されている場合でも、HTTPプロトコルを直接使用するほど直感的ではありません。

パフォーマンスの向上

Nacos 2.xサービスディスカバリパフォーマンステストはすべて主要な機能に焦点を当てています。3ノードクラスターでストレステストを実行することにより、インターフェイスパフォーマンスの負荷と容量を確認し、同じバージョンのNacos1.Xバージョンの改善を比較できます。 /同様のシナリオ。

  • ストレステスト中、サービスとインスタンスの容量は数百万に達し、クラスターの動作は引き続き安定しており、期待に達しました(このシナリオでは、頻繁な変更によって発生する頻繁なプッシュコンテンツは計算されず、計算容量のみがオンラインであり、実際のプッシュを伴うシナリオは、次のラウンドの圧力テストレポートで報告されます。

  • 登録/登録解除されたインスタンスTPSは26000を超えました。これは、Nacos1.X全体の少なくとも2倍であり、インターフェイスは期待に応えます。

  • クエリインスタンスのTPSは30,000を超える可能性があり、これはNacos1.X全体の約3倍であり、インターフェイスは期待に応えます。

互換性

構成センター

  • 1.XクライアントのすべてのAPIインターフェースメソッドと完全に互換性があります

  • 2.XクライアントのすべてのAPIインターフェースメソッドを完全に実装します

  • 構成センターに関連するすべてのopenAPIと完全に互換性があります

サービスディスカバリ

サービスディスカバリのデータモデルが大幅に変更されたため、以下の機能は一時的にサポートされていません。

  • 現在のクラスターリーダーを表示します(廃止されます)

  • インスタンスメタデータをバッチで更新します(ベータ版、サポートされていません)

  • インスタンスメタデータをバッチで削除します(ベータ版、サポートされていません)

コンソール

  • 構成センターの関連ページおよび機能と完全に互換性があります

  • アクセス制御関連のページおよび機能と完全に互換性があります

  • 名前空間関連のページおよび関数と完全に互換性があります

  • クラスタ管理関連のページおよび機能と完全に互換性があります

  • サービスディスカバリ関連のページおよび機能と完全に互換性があります

SpringCloudAlibabaの適応

Spring cloud alibaba 2.2.5バージョンに現在組み込まれているnacos-clientは1.4.1であるため、nacos-clientメソッドを指定することで、Nacos2.0の長い接続機能を事前に使用できます。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.5.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.5.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>2.0.0</version>
</dependency>

おすすめ

転載: blog.csdn.net/weixin_42073629/article/details/115262844