javascript
Spring Cloud 2020.0.0 正式发布,对开发者来说意味着什么?
作者 |
YourBatman 在線教育領(lǐng)域資深架構(gòu)師,Spring Framework 開源貢獻(xiàn)者
冷冷 云集架構(gòu)師、開源項(xiàng)目 pig 負(fù)責(zé)人、Spring Cloud Alibaba Committer
來源|阿里巴巴云原生公眾號
北京時間 2020 年 12 月 22 日深夜,Spring Cloud 2020.0.0 版本正式發(fā)布。2020.0.0 是第一個使用新版本命名方案的發(fā)命名的 Spring Cloud 發(fā)行版本。除了肉眼可見的更開發(fā)者友好的命名方式,這次發(fā)布全面拋棄了 Netflix 技術(shù)棧,并且是一個長期維護(hù)的主要版本。這對開發(fā)者來說意味著什么呢?今天我們邀請到開源社區(qū)活躍作者 YourBatman 和 Spring Cloud Alibaba committer 冷冷來和大家解讀下這次發(fā)版的重要變化,更重要的是和大家聊聊我們作為開發(fā)者后續(xù)應(yīng)該如何應(yīng)對。
Spring Cloud 版本管理
在 Spring Cloud 2020.0.0 正式發(fā)布之前,Spring Cloud 的 Release Train 名稱采用的是倫敦地鐵站名稱來命名的,并以字母表順序排列,如:Hoxton、Greenwich、Ilford 等,這種命名方式存在兩個致命問題:
-
對非英語母語國家,比如中國就非常不友好,無法快速理清版本號關(guān)系
-
英文字母就 26 個,倘若版本號到了 Z 以后呢?如何繼續(xù)發(fā)展?
Spring Cloud 遵循 Pivotal OSS support policy 協(xié)議對主要版本提供三年的支持。此外,在 Spring Cloud 的主要或次要版本發(fā)布后,若存在嚴(yán)重的 bug 和安全問題,就會再維護(hù)一段時間(6-12 個月不等)。參考以下表格:
核心變化解讀
Spring Cloud 2020.0.0 作為一個主要版本,帶來了眾多顯著的變化,其中進(jìn)行了一些阻斷式更新(不向下兼容)是本文最大看點(diǎn),來吧上菜。
核心變化一:再見了,Netflix
早在 2018 年,Spring Cloud 在其 Roadmap 里就宣布將要終結(jié)的一些庫/版本,其中最重要的就是指 Spring Cloud Netflix 項(xiàng)目進(jìn)入維護(hù)模式,然后計劃在 2020 年完全移除。
Spring Cloud 做出這樣的決定其實(shí)也是不見得是主動的。我們知道 Spring Cloud 一直以來把 Netflix OSS 套件作為其官方默認(rèn)的一站式解決方案,那時的 Netflix OSS 套件恨不得可以跟 Spring Cloud 劃等號。而 Netflix 公司在 2018 年前后宣布其核心組件 Hystrix、Ribbon、Zuul、Archaius 等均進(jìn)入維護(hù)狀態(tài)。
時至今日,Spring Cloud 2020.0 正式發(fā)布,在這個主要版本里,按既定計劃終于對 spring-cloud-netflix 動刀了。我?guī)湍惝嬃朔?spring-cloud-netflix-dependencies 的 xml 文件前后版本主要差異的對比圖,一目了然:
- 舊版本的 spring-cloud-netflix-dependencies 管理著 Netflix 所有組件,包括 Hystrix、Ribbon、Zuul、Eureka 等。而自 2020.0 版本起它有且只管理 Eureka(包括 Server 和 Client)。
核心變化二:繼續(xù)業(yè)界標(biāo)準(zhǔn)制定,完善抽象定義
可能對于大部分 Spring Cloud 應(yīng)用開發(fā)者, 對于 spring-cloud-commons 模塊大概很陌生。此模塊作為 Spring Cloud 技術(shù)棧的核心,提供了整套解決方案最重要的服務(wù)注冊與發(fā)現(xiàn)、負(fù)載均衡、上下文管理等的統(tǒng)一抽象。spring cloud alibaba 等全家桶實(shí)現(xiàn)都是 spring-cloud-commons 的具體實(shí)現(xiàn)。此版本對上文下啟動器的默認(rèn)啟動行文、負(fù)載均衡器的核心代碼進(jìn)行相關(guān)的跳轉(zhuǎn)。
spring-cloud-commons├── actuator├── circuitbreaker├── discovery├── hypermedia├── loadbalancer└── serviceregistry核心變化三:強(qiáng)推 reactive 異步體系
reactor 是 reactive(反應(yīng)式編程)的實(shí)現(xiàn)框架,也是 Pivotal 團(tuán)隊(duì)的作品。
無論是 Spring Cloud Gateway 還是 Spring Cloud Loadbalancer 這些都是構(gòu)建在 reactor 編程之上。
另外 Spring 官方布道師 Josh Long 最近出版一本 《Reactive Spring》,如果想深入了解 reactor ,不妨深入閱讀。
核心變化四:更好的擁抱云原生能力
Spring Cloud 2020 構(gòu)建在 Spring Boot 2.4 之上,擁有更強(qiáng)的配置文件處理機(jī)制可以非常好的適配云原生 (例如可以直接應(yīng)用 kubernetes 的 configMap )配置;內(nèi)置 Docker 鏡像構(gòu)建和分層分析優(yōu)化能力。
如果團(tuán)隊(duì)正在使用 kubernetes,那么 spring-cloud-kubernetes 也將是 Netflix 的不錯替代方案。
組件替代方案
Spring Cloud 既然把 Netflix 套件大刀闊斧的砍掉了,那總歸得有替代方案吧。那是必然的,Spring Cloud 團(tuán)隊(duì)給我們推薦了用于替代的組件:
Spring Cloud LoadBalancer
以上替代品中,你可能最陌生、最好奇的是 Spring Cloud Loadbalancer,它一度只是 Spring Cloud 孵化器里的一個小項(xiàng)目,并且一度擱淺。后再經(jīng)過重啟,發(fā)展,現(xiàn)行使其偉大使命,正式用于完全替換 Ribbon,成為 Spring Cloud 負(fù)載均衡器唯一實(shí)現(xiàn)。
如圖,負(fù)載均衡抽象 LoadBalancerClient 接口有兩個實(shí)現(xiàn),而到了 Spring Cloud 2020.0 版本后,BlockingLoadBalancerClient 就是唯一實(shí)現(xiàn)了。
Spring Cloud LoadBalancer 目前僅支持輪詢負(fù)載均衡策略,相對于 Ribbon 多種高可用策略還是過于簡單。
Spring Cloud Circuit Breaker
Circuit Breaker 提供兼容多個斷路器組件實(shí)現(xiàn)的抽象,允許開發(fā)人員選擇最熟悉的斷路器組件進(jìn)行業(yè)務(wù)開發(fā)。
這里主要介紹一下 Sentinel、Resilience4j , Sentinel 作為 Spring Cloud Alibaba 重要組件,通過引入 spring-cloud-starter-alibaba-sentinel 即可擁有熔斷降級、流控等能力,提供圖形化控制臺,作為同類組件 Resilience4j 是基于函數(shù)式設(shè)計的輕量級容錯庫,提供熔斷、限流、隔離等能力,不過官方提供的 spring-cloud-starter-circuitbreaker-resilience4j 插件能力有限且不能直接使用控制臺管理(若需監(jiān)控需要額外的 Micrometer 服務(wù))。
Spring Cloud Alibaba 適配
- 由于對 Ribbon 組件的依賴,目前最新的 Spring Cloud Alibaba 2.2.3 并不能完全兼容 Spring Cloud 2020,僅需要微調(diào)即可。
- 增加 spring cloud loadbalancer 依賴。
- 涉及加載配置中心的服務(wù)需要 啟動 bootstrap (2020 默認(rèn)關(guān)閉)。
- 以上調(diào)整可以參考 兼容適配 Spring Cloud 2020 示例。
開發(fā)者如何面對和擁抱變化
正如上文所述 Spring Cloud 提供了強(qiáng)大的封裝和抽象能力,例如 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");} }-
通過此類抽象底層實(shí)現(xiàn)組件的變化 ,對于上層使用 Spring Cloud 全家桶的用戶其實(shí)影響不大(例如《Spring Cloud Alibaba 遷移指南:零代碼從 Eureka 遷移到 Nacos》)。
-
關(guān)于學(xué)習(xí) spring-cloud-commns 筆者不建議直接閱讀源碼(部分 reactor 代碼容易勸退),建議 DEBUG 具體實(shí)現(xiàn)的形式進(jìn)行調(diào)試(例如 NacosDiscoveryClient),最核心的代碼不過百行。
- 所以對于開發(fā)者來說無論是之前 Netflix 還是選擇 Alibaba 技術(shù)棧,最核心的還是把握 spring-cloud-commons 抽象,掌握 Spring Cloud 標(biāo)準(zhǔn)尤為重要。
總結(jié)
Spring Cloud 2020.0.0 是 Spring Cloud 的主要版本,是非常重要的存在,升級、改變也是巨大的。特別體現(xiàn)在 Netflix 模塊的全部移除、Spring Cloud 啟動方式變了等等。伴隨著 Spring Boot 2.4.x 以及 Spring Cloud 2020.0 的發(fā)布,并且棄用 Netflix OSS 套件后,必將走入一個新的深度編程體驗(yàn),滿懷驚喜,很是期待。
當(dāng)然我們還是非常推薦大家使用 Spring Cloud Alibaba 全家桶的,目前 Spring Cloud Alibaba 開源兩年時間,已經(jīng)從官方畢業(yè),不僅在關(guān)注度、活躍上表現(xiàn)搶眼,更通過發(fā)布知行動手實(shí)驗(yàn)室 start.aliyun.com 提供沙箱和 Java 工程腳手架、Arthas 代碼診斷工具等成為工具鏈最完善的 Spring Cloud 實(shí)現(xiàn)。
數(shù)據(jù)來源:http://www.gharchive.org/ 近2年GitHub開發(fā)者行為數(shù)據(jù)
活躍度計算公式:https://github.com/X-lab2017/github-analysis-report-2019/blob/master/REPORT.md
推薦閱讀
-
如何平滑將注冊中心從 Eureka 遷移到 Nacos?
-
Spring Cloud Alibaba 遷移指南1:零代碼從 Eureka 遷移到 Nacos
-
注冊中心 Consul 遷移到 Nacos
-
掌門教育微服務(wù)體系 Solar 第 3 彈:Nacos 企業(yè)級落地上篇
-
Sentinel 與 Hystrix 的對比
-
Guideline: 從 Hystrix 遷移到 Sentinel
總結(jié)
以上是生活随笔為你收集整理的Spring Cloud 2020.0.0 正式发布,对开发者来说意味着什么?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你真的会学习吗?从结构化思维说起
- 下一篇: RocketMQ-Spring 毕业两周