再版: SpringCloud と Dubbo の違い

この記事は次の場所に転載されています:記録のみ


1. SpringCloudとDubboの違い

どちらも現在主流のマイクロサービス フレームワークですが、多くの違いがあります。

  • 初期の位置付けは異なります: SpringCloud はマイクロサービス アーキテクチャの下でワンストップ ソリューションとして位置付けられていますが、Dubbo は SOA 時代の製品であり、主にサービス呼び出しとガバナンスに焦点を当てています。
  • 生態環境は異なります: SpringCloud は Spring プラットフォームに依存しており、より完全な生態システムを持っていますが、Dubbo は最初は RPC リモート呼び出しのみを行っていましたが、生態環境は比較的不足しており、現在は徐々に充実しています。
  • 呼び出し方法: SpringCloud はリモート呼び出しに Http プロトコルを使用し、インターフェイスは通常、比較的柔軟な Rest スタイルです。Dubbo は Dubbo プロトコルを使用し、インターフェイスは通常、固定形式の Java Service インターフェイスです。ただし、呼び出し時には Netty の NIO メソッドが使用され、パフォーマンスが向上します。
  • コンポーネントには多くの違いがあります。たとえば、SpringCloud 登録センターでは通常 Eureka が使用されますが、Dubbo では Zookeeper が使用されます。

SpringCloud は豊かなエコロジーと完全な機能を備えており、どちらかというとブランド マシンに近いのに対し、Dubbo は比較的柔軟で高度にカスタマイズ可能で、組み立てマシンに近いです。関連情報:

SpringCloud : Spring のオープンソースマイクロサービス フレームワークであるSpirngCloud は、マイクロサービス アーキテクチャの下でのワンストップ ソリューションとして位置付けられています。

Dubbo : Alibaba のオープン ソース RPC フレームワーク。Dubbo は SOA 時代の製品であり、主にサービス呼び出し、トラフィック分散、トラフィック監視、およびサーキット ブレークに焦点を当てています。

SpringCloudアリババ

両者の生態学的比較:

関数 ダボ スプリングクラウド
サービスレジストリ 動物園の飼育員 Eureka(主流)、Consul、zookeeper
サービスコール方法 RPC は Dubbo プロトコルに基づいています Httpプロトコルに基づくREST API
サービス監視 ダボモニター Spring Boot 管理者
ヒューズ 不完全 スプリングクラウド Netflix ハイストリックス
サービスゲートウェイ なし Spring Cloud Netflix ズール、ゲートウェイ
分散構成 なし 春のクラウド構成
サービス追跡 なし Spring Cloud Sleuth+Zipkin(一般)
データフロー なし 春の雲の流れ
バッチタスク なし 春のクラウドタスク
情報バス なし 春のクラウドバス

Spring Cloud の機能は明らかに Dubbo よりも強力であり、その範囲は広く、Spring のフラッグシップ プロジェクトとして、Spring Framework、Spring Boot、Spring Data、Spring Batch などの他の Spring プロジェクトと完全に統合することもできます。これらはマイクロサービス向けであり、言葉は非常に重要です。

Dubbo を使って構築されるマイクロサービス アーキテクチャは、コンピュータを組み立てるようなもので、各リンクの選択の自由度は高いものの、最終的な結果はメモリ品質の低下により不点灯になりやすく、常に不安を感じさせます。ユーザーがマスターである場合、これらは問題ありません。

Spring Cloud はブランドマシンのようなもので、Spring Source の統合の下で、マシンの安定性を高めるために多くの互換性テストが行​​われており、その原理は十分に理解されています。

2. ダボリモートコールとフェーンリモートコールの違い

Feign は、成熟した Http プロトコルに基づいた Spring Cloud のリモート呼び出しメソッドであり、すべてのインターフェイスは Rest スタイルを採用しています。そのため、インターフェイスの仕様がより統一され、仕様に準拠していれば、インターフェイスを実装するマイクロサービスをどのような言語やテクノロジでも開発できるようになります。しかし、httpプロトコル自体の特性上、リクエストやレスポンスのフォーマットが肥大化し、通信効率が相対的に悪くなってしまいます。

Dubbo フレームワークはデフォルトで Dubbo カスタム通信プロトコルを採用しており、最下層は Http プロトコルと同様の TCP 通信です。ただし、Dubbo プロトコルは Java データのシリアル化と逆シリアル化の方法、およびデータ送信形式をカスタマイズするため、データ送信パフォーマンスの点では、Dubbo は Http プロトコルよりも優れています。

ただし、このパフォーマンスの違いは、同時実行性が非常に高いレベルに達しない限り、あまり考慮する必要はありません。

関連情報:

Dubbo は、カスタム Dubbo プロトコルを使用して、一般的な RPC 呼び出しスキームであるリモート通信を実現します。一方、SpringCloud で使用される Feign は、Rest スタイルの呼び出し方法に基づいています。

1) 休憩スタイル

REST は、一連のアーキテクチャ上の制約と原則を参照するアーキテクチャ スタイルです。これらの制約と原則を満たすアプリケーションまたは設計が RESTful です。

Rest スタイルは、HTTP プロトコルを介して完全に実装でき、HTTP プロトコルを使用してデータ通信を処理します。リソースに対する REST アーキテクチャの操作には、リソースの取得、作成、変更、削除が含まれます。これらは、HTTP プロトコルによって提供される GET、POST、PUT、および DELETE メソッドに正確に対応します。

したがって、要求および要求のプロセスは、より柔軟な http プロトコルに従うだけで済みます。

Spring Cloud の Feign は、Rest スタイルの呼び出しメソッドです。

2)RPC

リモートプロシージャコール、リモートプロシージャコールとは、リモートメソッドをローカルメソッドのように呼び出すことです。
RPC は通常、次のことを決定する必要があります。

  • データ送信方法: ほとんどの RPC フレームワークは、よりパフォーマンスの高い TCP を送信プロトコルとして選択します。
  • データ送信内容:要求元は呼び出す関数の名前やパラメータなどを通知する必要があります。
  • シリアル化方法: クライアントとサーバーが対話するとき、パラメーターまたは結果はネットワークで送信するためにバイト ストリームに変換され、その後、データをバイト ストリームに変換するか、バイト ストリームを読み取り可能な固定形式に変換する必要があります。そして逆シリアル化

シリアル化と逆シリアル化が必要なため、データ伝送形式には厳格な要件があり、HTTP ほど柔軟ではありません。

Dubbo プロトコルは RPC の代表的なプロトコルです。

Dubbo プロトコルと Feign コールの違いを見てみましょう。

ダボ フェイン (HTTP コール)
転送プロトコル TCP TCP
開発言語 ジャワ 無制限
パフォーマンス 良い 一般的に
柔軟性 一般的に 良い

3. エウレカとズーキーパー登録センターの違い

SpringCloud と Dubbo は両方とも複数のレジストリをサポートしていますが、現在 SpringCloud は Eureka をより多く使用し、Dubbo は主に Zookeeper を使用します。両者には大きな違いがあります。

  • クラスター設計の観点から: Eureka クラスター内のすべてのノードは同等であり、マスターとスレーブの関係がないため、データの不整合が発生する可能性があります。一貫性を満たすために、ZK にはマスターとスレーブの関係、つまり 1 つのマスターと多数のスレーブが含まれている必要があります。クラスターに所有者がいない場合、クラスターは外部サービスを提供しません
  • CAP 原則の観点: Eureka は AP 原則を満たし、サービス全体の可用性を確保するためにクラスター データの一貫性を犠牲にします。Zookeeper は CP 原則を満たし、データの一貫性を確保するためにサービス全体の可用性を犠牲にします。各ノードの。
  • サービス プル方法に関して: Eureka はアクティブなサービス プル戦略を採用しています。消費者は Eureka にアクセスして固定頻度 (デフォルト 30 秒) でサービスをプルし、ローカルにキャッシュします。ZK の消費者はまず ZK にアクセスして、必要なサービスをサブスクライブします。情報をローカルにキャッシュします。その後、サービス リストの変更を監視し、ZK は将来的にサービスの変更を消費者にプッシュします。

4. Spring Cloud の共通コンポーネントは何ですか?

Spring Cloud には多くのサブプロジェクトがあり、より一般的なのは Netflix オープンソース コンポーネントです。

  • Spring Cloud Config は
    集中構成管理ツールであり、分散システムにおける統合された外部構成管理であり、デフォルトで Git を使用して構成を保存し、クライアント構成の更新、暗号化、復号化操作をサポートできます。

  • Spring Cloud Netflix
    Netflix OSS オープンソース コンポーネントの統合 (Eureka、Hystrix、Ribbon、Feign、Zuul、その他のコア コンポーネントを含む)。

    • Eureka: サーバー側のレジストリとクライアント側のサービス検出メカニズムを含むサービス ガバナンス コンポーネント。
    • リボン: 複数の負荷分散呼び出し戦略を備えた負荷分散サービス呼び出しコンポーネント。
    • Hystrix: サービス フォールト トレラント コンポーネント。サーキット ブレーカー モードを実装し、依存するサービスのエラーや遅延に対するフォールト トレランスを提供します。
    • Feign: リボンと Hystrix に基づく宣言型サービス呼び出しコンポーネント。
    • Zuul: API ゲートウェイ コンポーネント。リクエストのルーティングおよびフィルター機能を提供します。
  • Spring Cloud Bus は、
    分散システム内のノードをリンクする軽量のメッセージ エージェントを使用して、クラスターの状態変更を伝播するために使用されるメッセージ バスです。これを使用して、クラスター内のサービス構成を動的に更新できます。

  • Spring Cloud Consul は
    、Hashicorp Consul のサービス ガバナンス コンポーネントに基づいています。

  • Spring Cloud Security
    セキュリティ ツールキットは、Zuul プロキシでの負荷分散 OAuth2 クライアントとログイン認証をサポートしています。

  • Spring Cloud Sleuth
    Spring Cloud アプリケーションの分散リクエスト リンク トレース。Zipkin、HTrace、ログベース (ELK など) を使用したトレースをサポートします。

  • Spring Cloud Stream の
    軽量のイベント駆動型マイクロサービス フレームワークは、主に Apache Kafka および RabbitMQ として実装される、単純な宣言モデルを使用してメッセージを送受信できます。

  • Spring Cloud Task は、
    機能的および非機能的な機能をアプリケーションに追加するための、有効期間が短く限定されたデータ処理タスクを迅速に構築するためのマイクロサービス フレームワークです。

  • Spring Cloud Zookeeper は
    、Apache Zookeeper のサービス ガバナンス コンポーネントに基づいています。

  • Spring Cloud Gateway
    API ゲートウェイ コンポーネントは、リクエストのルーティングおよびフィルター機能を提供します。

  • Spring Cloud OpenFeign
    は、サービス呼び出し用の Spring MVC アノテーションベースのインターフェイス実装を動的に作成できる、Ribbon および Hystrix の宣言型サービス呼び出しコンポーネントに基づいており、Spring Cloud 2.0 の第一級市民として Feign に代わっています。

5. マイクロサービス呼び出し間の関係は複雑ですが、どのように監視してトラブルシューティングを行うのですか?

企業には、APM と呼ばれるマイクロサービス監視用のツール セットがあります。例: SpringCloudSeluth+Zipkin、Pinpoint、Skywalking。パフォーマンス監視、リンク追跡 (特定のコード、特定の SQL に対して正確)、CPU 動作ステータス、および時間のかかるリンク動作を実現できます。

もちろん、分散ログ管理システムを使用することもできます。プロジェクト操作のログを収集し、統計レポートを作成し、それらを elasticsearch に入力すると、簡単に検索して表示できるようになります。例: ELK テクノロジー スタック、GrayLog

6. Hystix の機能は何ですか?

Hystix は、Netflix がオープンソース化した遅延およびフォールトトレラントなライブラリであり、リモート サービスやサードパーティ ライブラリへのアクセスを分離して連鎖的な障害を防ぐために使用されます。より一般的に使用される方法は、スレッド分離とサービス融合です。

おすすめ

転載: blog.csdn.net/qq_36256590/article/details/132166451