Spring Cloud 2020.0.0が正式にリリースされましたが、開発者にとってはどういう意味ですか?

ヘッドpicture.png

著者| 
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に達した場合はどうなりますか?開発を続けるには?

1.png

Spring Cloudは、Pivotal OSSサポートポリシー 契約に従って メインバージョンに3年間のサポート提供ます。さらに、Spring Cloudのメジャーバージョンまたはマイナーバージョンがリリースされた後、重大なバグやセキュリティの問題がある場合は、一定期間(6〜12か月)維持されます。次の表を参照してください。

2.jpg

3.jpg

コア変更の解釈

メジャーバージョンとして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ファイルの前後の主な違いの比較チャートを描くのを手伝いました。 これは一目でわかります。

4.jpg

  • 古いバージョン 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:プッシュリアクティブ非同期システム

リアクターはリアクティブ(リアクティブプログラミング)の実装フレームワークあり、Pivo​​talチームの作業です。

Spring CloudGatewayとSpringCloud Loadbalancerはどちらも、リアクタープログラミングに基づいて構築されています。

5.png

また、春の公式伝道者であるジョシュ・ロングが最近「リアクティブ・スプリング」という本を出版しました。リアクターについてもっと知りたい方は、ぜひ読んでみてください。

コアの変更4:クラウドネイティブ機能の採用の改善

Spring Cloud2020はSpringBoot 2.4上に構築されており、クラウドネイティブ(たとえば、kubernetes configMapを直接適用できます)構成に非常によく適合できる強力な構成ファイル処理メカニズム、組み込みのDockerイメージ構築、階層分析および最適化機能を備えています。

チームがkubernetesを使用している場合は、  spring-cloud-kubernetes Netflixの代替としても適しています。

6.jpg

コンポーネントの代替

Spring CloudはNetflixスイートを大幅に遮断したため、代替手段が必要です。それは避けられないことです。SpringCloudチームは、交換用のコンポーネントを推奨しました。

7.jpg

Spring Cloud LoadBalancer

上記の選択肢の中で、あなたは最も奇妙で最も奇妙なことかもしれませんが Spring Cloud Loadbalancer、それはかつてSpring Cloudインキュベーターの小さなプロジェクトであり、かつては取り残されていたということです。再起動して開発した後、それは大きな使命になりました。Ribbon完全に置き換え、SpringCloudロードバランサーの唯一の実装になるために正式に使用されています

8.png

図に示すように、負荷分散抽象 LoadBalancerClient インターフェースには2つの実装があり、Spring Cloud 2020.0バージョン以降BlockingLoadBalancerClient は、これが唯一の実装です。

Spring Cloud LoadBalancerは現在、ポーリング負荷分散戦略のみをサポートしています。これは、Ribbonの複数の高可用性戦略と比較して単純すぎます。

SpringCloudサーキットブレーカー

Circuit Breakerは、複数のCircuit Breakerコンポーネントの実装と互換性のある抽象化を提供し、開発者がビジネス開発に最も馴染みのあるCircuitBreakerコンポーネントを選択できるようにします。

9.png

ここでは主に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 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行です。

10.png

  • したがって、開発者にとって、テクノロジースタックの前であろうと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実装になります。

11.png

データソース:http://www.gharchive.org/過去2年間のGitHub開発者行動データ
活動計算式:https://github.com/X-lab2017/github-analysis-report-2019/blob/master/REPORT.md

推奨読書

おすすめ

転載: blog.51cto.com/13778063/2577188