著者|
YourBatman、オンライン教育の分野でのシニアアーキテクト、
レンレン、開い春フレームワーク、ソースの貢献Yunjiの建築家、オープンソースプロジェクトの豚のリーダー、春クラウドアリババコミッタ
ソース|アリババクラウドネイティブの公式アカウント
このSpring Cloud 2020.0.0
バージョンは、2020年12月22日の北京時間の深夜に正式にリリースされました。2020.0.0は、新しいバージョンの命名スキームを使用した最初のSpringCloudリリースです。肉眼で見えるより開発者に優しい命名方法に加えて、このリリースはNetflixテクノロジースタックを完全に放棄し、長期メンテナンスのメジャーバージョンです。これは開発者にとってどういう意味ですか?本日、オープンソースコミュニティのアクティブな作成者であるYourBatmanとSpring Cloud Alibabaのコミッショナーを招待して、このリリースの重要な変更について冷静に説明し、さらに重要なことに、将来の開発者としてどのように対応すべきかについてお話しします。
SpringCloudバージョン管理
Spring Cloud 2020.0.0の公式リリース以前は、SpringCloudのReleaseTrain名は、ロンドン地下鉄駅名にちなんで名付けられ、Hoxton、Greenwich、Ilfordなどのアルファベット順に並べられていました。このような命名方法は2つあります。致命的な問題:
-
中国などの英語を話さない国には非常に不親切であり、バージョン番号間の関係をすばやく分類することはできません。
- 英語の文字は26文字しかありませんが、バージョン番号がZに達した場合はどうなりますか?開発を続けるには?
Spring Cloudは、Pivotal OSSサポートポリシー 契約に従って 、メインバージョンに3年間のサポートを提供します。さらに、Spring Cloudのメジャーバージョンまたはマイナーバージョンがリリースされた後、重大なバグやセキュリティの問題がある場合は、一定期間(6〜12か月)維持されます。次の表を参照してください。
コア変更の解釈
メジャーバージョンとして、Spring Cloud 2020.0.0は多くの重要な変更をもたらしました。その中で、いくつかのブロッキング更新(下位互換性はありません)がこの記事の最大のハイライトです。ぜひご利用ください。
コアの変更1:さようなら、Netflix
早ければ2018年に、Spring Cloudはロードマップで終了するいくつかのライブラリ/バージョンを発表しました。その中で最も重要なのは、Spring Cloud Netflixプロジェクトがメンテナンスモードに入り、2020年に完全に削除することです。
そのような決定を下すというSpringCloudの決定は、必ずしも積極的ではありません。Spring Cloudは、このNetflix OSS
パッケージを常に公式のデフォルトのワンストップソリューションと見なしてきました 。当時、NetflixOSSパッケージはSpringCloudと同等になるのを待ちきれませんでした。また、Netflixは、2018年頃に、コアコンポーネントであるHystrix、Ribbon、Zuul、Archaiusなどがすべてメンテナンスステータスに入ったことを発表しました。
本日、Spring Cloud 2020.0が正式にリリースされました。このメジャーバージョンでは、計画はようやく spring-cloud-netflix
準備が整いました。spring-cloud-netflix-dependencies
xmlファイルの前後の主な違いの比較チャートを描くのを手伝いました。 これは一目でわかります。
- 古いバージョン
spring-cloud-netflix-dependencies
は、Hystrix、Ribbon、Zuul、Eurekaなどを含むすべてのNetflixコンポーネントを管理していました。バージョン2020.0以降、Eureka(サーバーとクライアントを含む)のみを管理します。
主要な変更2:業界標準の策定を継続し、抽象的な定義を改善する
ほとんどのSpringCloudアプリケーション開発者はspring-cloud-commons
モジュールに非常に慣れていない可能性があり ます。Spring Cloudテクノロジースタックのコアとして、このモジュールは、ソリューション全体の最も重要なサービスの登録と検出、負荷分散、およびコンテキスト管理の統合された抽象化を提供します。spring cloud alibaba
家族全員のバケットの実装は spring-cloud-commons
具体的な実現です。このバージョンでは、上記のランチャーのデフォルトの起動言語とロードバランサーのコアコードにジャンプします。
spring-cloud-commons
├── actuator
├── circuitbreaker
├── discovery
├── hypermedia
├── loadbalancer
└── serviceregistry
コア変更3:プッシュリアクティブ非同期システム
リアクターは、リアクティブ(リアクティブプログラミング)の実装フレームワークであり、Pivotalチームの作業です。
Spring CloudGatewayとSpringCloud Loadbalancerはどちらも、リアクタープログラミングに基づいて構築されています。
また、春の公式伝道者であるジョシュ・ロングが最近「リアクティブ・スプリング」という本を出版しました。リアクターについてもっと知りたい方は、ぜひ読んでみてください。
コアの変更4:クラウドネイティブ機能の採用の改善
Spring Cloud2020はSpringBoot 2.4上に構築されており、クラウドネイティブ(たとえば、kubernetes configMapを直接適用できます)構成に非常によく適合できる強力な構成ファイル処理メカニズム、組み込みのDockerイメージ構築、階層分析および最適化機能を備えています。
チームがkubernetesを使用している場合は、 spring-cloud-kubernetes
Netflixの代替としても適しています。
コンポーネントの代替
Spring CloudはNetflixスイートを大幅に遮断したため、代替手段が必要です。それは避けられないことです。SpringCloudチームは、交換用のコンポーネントを推奨しました。
Spring Cloud LoadBalancer
上記の選択肢の中で、あなたは最も奇妙で最も奇妙なことかもしれませんが Spring Cloud Loadbalancer
、それはかつてはSpring Cloudインキュベーターの小さなプロジェクトであり、かつては取り残されていたということです。再起動して開発した後、それは大きな使命になりました。Ribbonを完全に置き換え、SpringCloudロードバランサーの唯一の実装になるために正式に使用されています。
図に示すように、負荷分散抽象 LoadBalancerClient
インターフェースには2つの実装があり、Spring Cloud 2020.0バージョン以降BlockingLoadBalancerClient
は、これが唯一の実装です。
Spring Cloud LoadBalancerは現在、ポーリング負荷分散戦略のみをサポートしています。これは、Ribbonの複数の高可用性戦略と比較して単純すぎます。
SpringCloudサーキットブレーカー
Circuit Breakerは、複数のCircuit Breakerコンポーネントの実装と互換性のある抽象化を提供し、開発者がビジネス開発に最も馴染みのあるCircuitBreakerコンポーネントを選択できるようにします。
ここでは主にSentinelとResilience4jを紹介します。SentinelはSpringCloudAlibabaの重要なコンポーネントです。spring-cloud-starter-alibaba-sentinelを導入 することで、ダウングレードとフロー制御を融合し、グラフィカルコンソールを提供できます。同様のコンポーネントとして、Resilience4jはに基づいています。機能的に設計された軽量のフォールトトレラントライブラリは、融合、電流制限、および分離機能を提供します。ただし、公式のspring-cloud-starter-circuitbreaker-resilience4jプラグインは機能が制限されており、コンソールで直接管理することはできません(監視が必要な場合は追加マイクロメータサービス)。
春の雲アリババ適応
- リボンコンポーネントに依存しているため、最新のSpring Cloud Alibaba2.2.3はSpringCloud 2020と完全には互換性がなく、微調整するだけで済みます。
// 排除 Ribbon (当然也可以排查 maven 依赖)
@EnableAutoConfiguration(excludeName =
"org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration")
- スプリングクラウドロードバランサーの依存関係を増やします。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
- 構成センターのロードに関連するサービスは、ブートストラップを開始する必要があります(2020はデフォルトで閉じられています)。
<!--增加此依赖即可完成启动-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
- Spring Cloud2020互換の例に適合した上記の調整を参照できます。
開発者が変化に直面し、受け入れる方法
前述のように、Spring Cloudはspring-cloud-circuit-breaker
、一般的なフォールトトレラントコンポーネントのカプセル化など、強力なカプセル化および抽象化機能を提供し、 使用中に@hystrixcommand``@SentinelResource
コンポーネントのネイティブアノテーションを考慮する必要はありません 。
public static class DemoControllerService {
private RestTemplate rest;
private CircuitBreakerFactory cbFactory;
public String slow() {
return cbFactory.create("slow").run(() -> rest.getForObject("/slow", String.class), throwable -> "fallback");
}
}
-
このような抽象的な最下層を介してコンポーネントの変更を実装しても、上位レベルでSpring Cloud Family Bucketを使用するユーザーにはほとんど影響がありません(たとえば、「Spring Cloud Alibaba移行ガイド:EurekaからNacosへのゼロコード移行」)。
- 学習について
spring-cloud-commns
ソースコードを直接読むことはお勧めしません(コードはパーツリアクターを落胆させるのは簡単です)。特定の形式のDEBUGデバッグ(たとえばNacosDiscoveryClient
)、コアコードを実現することをお勧めしますが、100行です。
- したがって、開発者にとって、テクノロジースタックの前であろうと
Netflix
選択であろうAlibaba
と、コアまたは把握のspring-cloud-commons
抽象的なマスターSpringCloud標準は特に重要です。
総括する
Spring Cloud2020.0.0はSpringCloudのメインバージョンであり、非常に重要な存在であり、アップグレードと変更は膨大です。これは、すべてのNetflixモジュールの削除、SpringCloud起動モードの変更などに特に反映されます。Spring Boot2.4.xとSpringCloud 2020.0のリリース、およびNetflix OSSスイートの廃止により、驚きに満ちた新しい詳細なプログラミングエクスペリエンスを確実に開始し、それを楽しみにしています。
もちろん、Spring CloudAlibabaファミリーバケットを使用することを強くお勧めします。現在、Spring CloudAlibabaは2年間オープンソースであり、公式を卒業しています。注目と活動の面で目を引くだけでなく、Know Action Labstart.aliyun.comのリリースを通じても目を引くものです。サンドボックスとJavaエンジニアリングの足場、Arthasコード診断ツールなどを提供して、ツールチェーンの最も完全なSpringCloud実装になります。
データソース:http://www.gharchive.org/過去2年間のGitHub開発者行動データ
活動計算式:https://github.com/X-lab2017/github-analysis-report-2019/blob/master/REPORT.md