天天看點

Spring Cloud 2020.0.0 正式釋出,對開發者來說意味着什麼?Spring Cloud 版本管理核心變化解讀元件替代方案Spring Cloud Alibaba 适配開發者如何面對和擁抱變化總結活動推薦

Spring Cloud 2020.0.0 正式釋出,對開發者來說意味着什麼?Spring Cloud 版本管理核心變化解讀元件替代方案Spring Cloud Alibaba 适配開發者如何面對和擁抱變化總結活動推薦

作者 | 

YourBatman  線上教育領域資深架構師,Spring Framework 開源貢獻者

冷冷  雲集架構師、開源項目 pig 負責人、Spring Cloud Alibaba Committer

來源|

阿裡巴巴雲原生公衆号

中原標準時間 2020 年 12 月 22 日深夜,

Spring Cloud 2020.0.0

 版本正式釋出。2020.0.0 是第一個使用新版本命名方案的發命名的 Spring Cloud 發行版本。除了肉眼可見的更開發者友好的命名方式,這次釋出全面抛棄了 Netflix 技術棧,并且是一個長期維護的主要版本。這對開發者來說意味着什麼呢?今天我們邀請到開源社群活躍作者 YourBatman 和 Spring Cloud Alibaba committer 冷冷來和大家解讀下這次發版的重要變化,更重要的是和大家聊聊我們作為開發者後續應該如何應對。

Spring Cloud 版本管理

在 Spring Cloud 2020.0.0 正式釋出之前,Spring Cloud 的 Release Train 名稱采用的是倫敦地鐵站名稱來命名的,并以字母表順序排列,如:Hoxton、Greenwich、Ilford 等,這種命名方式存在兩個緻命問題:

  • 對非英語母語國家,比如中國就非常不友好,無法快速理清版本号關系
  • 英文字母就 26 個,倘若版本号到了 Z 以後呢?如何繼續發展?
Spring Cloud 2020.0.0 正式釋出,對開發者來說意味着什麼?Spring Cloud 版本管理核心變化解讀元件替代方案Spring Cloud Alibaba 适配開發者如何面對和擁抱變化總結活動推薦

Spring Cloud 遵循 Pivotal OSS support policy 協定對主要版本提供三年的支援。此外,在 Spring Cloud 的主要或次要版本釋出後,若存在嚴重的 bug 和安全問題,就會再維護一段時間(6-12 個月不等)。參考以下表格:

Spring Cloud 2020.0.0 正式釋出,對開發者來說意味着什麼?Spring Cloud 版本管理核心變化解讀元件替代方案Spring Cloud Alibaba 适配開發者如何面對和擁抱變化總結活動推薦
Spring Cloud 2020.0.0 正式釋出,對開發者來說意味着什麼?Spring Cloud 版本管理核心變化解讀元件替代方案Spring Cloud Alibaba 适配開發者如何面對和擁抱變化總結活動推薦

核心變化解讀

Spring Cloud 2020.0.0 作為一個主要版本,帶來了衆多顯著的變化,其中進行了一些阻斷式更新(不向下相容)是本文最大看點,來吧上菜。

核心變化一:再見了,Netflix

早在 2018 年,Spring Cloud 在其 Roadmap 裡就宣布将要終結的一些庫/版本,其中最重要的就是指 Spring Cloud Netflix 項目進入維護模式,然後計劃在 2020 年完全移除。

Spring Cloud 做出這樣的決定其實也是不見得是主動的。我們知道 Spring Cloud 一直以來把 

Netflix OSS

 套件作為其官方預設的一站式解決方案,那時的 Netflix OSS 套件恨不得可以跟 Spring Cloud 劃等号。而 Netflix 公司在 2018 年前後宣布其核心元件 Hystrix、Ribbon、Zuul、Archaius 等均進入維護狀态。

時至今日,Spring Cloud 2020.0 正式釋出,在這個主要版本裡,按既定計劃終于對 

spring-cloud-netflix

 動刀了。我幫你畫了幅 

spring-cloud-netflix-dependencies

 的 xml 檔案前後版本主要差異的對比圖,一目了然:

Spring Cloud 2020.0.0 正式釋出,對開發者來說意味着什麼?Spring Cloud 版本管理核心變化解讀元件替代方案Spring Cloud Alibaba 适配開發者如何面對和擁抱變化總結活動推薦
  • 舊版本的 

    spring-cloud-netflix-dependencies

     管理着 Netflix 所有元件,包括 Hystrix、Ribbon、Zuul、Eureka 等。而自 2020.0 版本起它有且隻管理 Eureka(包括 Server 和 Client)。

核心變化二:繼續業界标準制定,完善抽象定義

可能對于大部分 Spring Cloud 應用開發者, 對于 

spring-cloud-commons

 子產品大概很陌生。此子產品作為 Spring Cloud 技術棧的核心,提供了整套解決方案最重要的服務注冊與發現、負載均衡、上下文管理等的統一抽象。

spring cloud alibaba

 等全家桶實作都是 

spring-cloud-commons

 的具體實作。此版本對上文下啟動器的預設啟動行文、負載均衡器的核心代碼進行相關的跳轉。

spring-cloud-commons
  ├── actuator
  ├── circuitbreaker
  ├── discovery
  ├── hypermedia
  ├── loadbalancer
  └── serviceregistry           

核心變化三:強推 reactive 異步體系

reactor 是 reactive(反應式程式設計)的實作架構,也是 Pivotal 團隊的作品。

無論是 Spring Cloud Gateway 還是 Spring Cloud Loadbalancer 這些都是建構在 reactor 程式設計之上。

Spring Cloud 2020.0.0 正式釋出,對開發者來說意味着什麼?Spring Cloud 版本管理核心變化解讀元件替代方案Spring Cloud Alibaba 适配開發者如何面對和擁抱變化總結活動推薦

另外 Spring 官方布道師 Josh Long 最近出版一本 《Reactive Spring》,如果想深入了解 reactor ,不妨深入閱讀。

核心變化四:更好的擁抱雲原生能力

Spring Cloud 2020 建構在 Spring Boot 2.4 之上,擁有更強的配置檔案處理機制可以非常好的适配雲原生 (例如可以直接應用 kubernetes 的 configMap )配置;内置 Docker 鏡像建構和分層分析優化能力。

如果團隊正在使用 kubernetes,那麼 

spring-cloud-kubernetes

 也将是 Netflix 的不錯替代方案。

Spring Cloud 2020.0.0 正式釋出,對開發者來說意味着什麼?Spring Cloud 版本管理核心變化解讀元件替代方案Spring Cloud Alibaba 适配開發者如何面對和擁抱變化總結活動推薦

元件替代方案

Spring Cloud 既然把 Netflix 套件大刀闊斧的砍掉了,那總歸得有替代方案吧。那是必然的,Spring Cloud 團隊給我們推薦了用于替代的元件:

Spring Cloud 2020.0.0 正式釋出,對開發者來說意味着什麼?Spring Cloud 版本管理核心變化解讀元件替代方案Spring Cloud Alibaba 适配開發者如何面對和擁抱變化總結活動推薦

Spring Cloud LoadBalancer

以上替代品中,你可能最陌生、最好奇的是 

Spring Cloud Loadbalancer

,它一度隻是 Spring Cloud 孵化器裡的一個小項目,并且一度擱淺。後再經過重新開機,發展,現行使其偉大使命,正式用于完全替換 Ribbon,成為 Spring Cloud 負載均衡器唯一實作。

Spring Cloud 2020.0.0 正式釋出,對開發者來說意味着什麼?Spring Cloud 版本管理核心變化解讀元件替代方案Spring Cloud Alibaba 适配開發者如何面對和擁抱變化總結活動推薦

如圖,負載均衡抽象 

LoadBalancerClient

 接口有兩個實作,而到了 Spring Cloud 2020.0 版本後,

BlockingLoadBalancerClient

 就是唯一實作了。

Spring Cloud LoadBalancer 目前僅支援輪詢負載均衡政策,相對于 Ribbon 多種高可用政策還是過于簡單。

Spring Cloud Circuit Breaker

Circuit Breaker 提供相容多個斷路器元件實作的抽象,允許開發人員選擇最熟悉的斷路器元件進行業務開發。

Spring Cloud 2020.0.0 正式釋出,對開發者來說意味着什麼?Spring Cloud 版本管理核心變化解讀元件替代方案Spring Cloud Alibaba 适配開發者如何面對和擁抱變化總結活動推薦

這裡主要介紹一下 Sentinel、Resilience4j ,  Sentinel  作為 Spring Cloud Alibaba 重要元件,通過引入 spring-cloud-starter-alibaba-sentinel  即可擁有熔斷降級、流控等能力,提供圖形化控制台,作為同類元件 Resilience4j 是基于函數式設計的輕量級容錯庫,提供熔斷、限流、隔離等能力,不過官方提供的 spring-cloud-starter-circuitbreaker-resilience4j 插件能力有限且不能直接使用控制台管理(若需監控需要額外的 Micrometer 服務)。

Spring Cloud Alibaba 适配

  • 由于對 Ribbon 元件的依賴,目前最新的 Spring Cloud Alibaba 2.2.3 并不能完全相容 Spring Cloud 2020,僅需要微調即可。
// 排除 Ribbon (當然也可以排查 maven 依賴)
@EnableAutoConfiguration(excludeName = 
"org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration")           
  • 增加 spring cloud loadbalancer 依賴。
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>           
  • 涉及加載配置中心的服務需要 啟動 bootstrap (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 全家桶的使用者其實影響不大(例如《Spring Cloud Alibaba 遷移指南:零代碼從 Eureka 遷移到 Nacos》)。
  • 關于學習

    spring-cloud-commns

    筆者不建議直接閱讀源碼(部分 reactor 代碼容易勸退),建議 DEBUG 具體實作的形式進行調試(例如

    NacosDiscoveryClient

    ),最核心的代碼不過百行。
Spring Cloud 2020.0.0 正式釋出,對開發者來說意味着什麼?Spring Cloud 版本管理核心變化解讀元件替代方案Spring Cloud Alibaba 适配開發者如何面對和擁抱變化總結活動推薦
  • 是以對于開發者來說無論是之前

    Netflix

    還是選擇

    Alibaba

    技術棧,最核心的還是把握

    spring-cloud-commons

    抽象,掌握 Spring Cloud 标準尤為重要。

總結

Spring Cloud 2020.0.0 是 Spring Cloud 的主要版本,是非常重要的存在,更新、改變也是巨大的。特别展現在 Netflix 子產品的全部移除、Spring Cloud 啟動方式變了等等。伴随着 Spring Boot 2.4.x 以及 Spring Cloud 2020.0 的釋出,并且棄用 Netflix OSS 套件後,必将走入一個新的深度程式設計體驗,滿懷驚喜,很是期待。

當然我們還是非常推薦大家使用 Spring Cloud Alibaba 全家桶的,目前 Spring Cloud Alibaba 開源兩年時間,已經從官方畢業,不僅在關注度、活躍上表現搶眼,更通過釋出

知行動手實驗室 start.aliyun.com

提供沙箱和

Java 工程腳手架

Arthas 代碼診斷工具

等成為工具鍊最完善的 Spring Cloud 實作。

Spring Cloud 2020.0.0 正式釋出,對開發者來說意味着什麼?Spring Cloud 版本管理核心變化解讀元件替代方案Spring Cloud Alibaba 适配開發者如何面對和擁抱變化總結活動推薦

資料來源:

http://www.gharchive.org/

近2年GitHub開發者行為資料

活躍度計算公式:

https://github.com/X-lab2017/github-analysis-report-2019/blob/master/REPORT.md

推薦閱讀

活動推薦

Spring Cloud 2020.0.0 正式釋出,對開發者來說意味着什麼?Spring Cloud 版本管理核心變化解讀元件替代方案Spring Cloud Alibaba 适配開發者如何面對和擁抱變化總結活動推薦

2021 年的首場 Spring Cloud Alibaba Meetup 城市站,我們邀請到了阿裡中間件分布式事務團隊負責人季敏、《深入了解 Spring Cloud 與實戰》作者方劍、Apache Dubbo PMC 方銀城、Nepxion 開源社群創始人任浩軍、知名網際網路公司中間件架構師童子龍 、七牛雲技術經理姜智,一起暢聊 Go 語言、Spring 生态發展趨勢,深度分享知名網際網路教育公司微服務實戰!

點選此處

即可報名參與~