任何項目都有其生命周期,Spring Could Netflix也不例外,官宣已進入維護模式,如果在新項目開始考慮技術選型時要考慮到這點風險,並考慮繞道的可能性。
原創: itmuch IT牧場
這兩天看到一則新聞:https://spring.io/blog/2018/12/12/spring-cloud-greenwich-rc1-available-now#spring-cloud-netflix-projects-entering-maintenance-mode。
其中說到:
Spring Cloud Netflix Projects Entering Maintenance Mode
Recently, Netflix announced that Hystrix is entering maintenance mode. Ribbon has been in a similar state since 2016. Although Hystrix and Ribbon are now in maintenance mode, they are still deployed at scale at Netflix.
The Hystrix Dashboard and Turbine have been superseded by Atlas. The last commits to these project are 2 years and 4 years ago respectively. Zuul 1 and Archaius 1 have both been superseded by later versions that are not backward compatible.
The following Spring Cloud Netflix modules and corresponding starters will be placed into maintenance mode:
spring-cloud-netflix-archaius
spring-cloud-netflix-hystrix-contract
spring-cloud-netflix-hystrix-dashboard
spring-cloud-netflix-hystrix-stream
spring-cloud-netflix-hystrix
spring-cloud-netflix-ribbon
spring-cloud-netflix-turbine-stream
spring-cloud-netflix-turbine
spring-cloud-netflix-zuul
This does not include the Eureka or concurrency-limits modules.
What is Maintenance Mode?
Placing a module in maintenance mode means that the Spring Cloud team will no longer be adding new features to the module. We will fix blocker bugs and security issues, and we will also consider and review small pull requests from the community.
We intend to continue to support these modules for a period of at least a year from the general availability of the Greenwich release train.
簡單翻譯一下:
Spring Cloud Netflix項目進入維護模式
最近,Netflix 宣布 Hystrix正在進入維護模式。自2016年以來,Ribbon已處於類似狀態。雖然Hystrix和Ribbon現已處於維護模式,但它們仍然在Netflix大規模部署。
Hystrix Dashboard和Turbine已被Atlas取代。這些項目的最后一次提交別是2年和4年前。Zuul 1和Archaius 1都被后來不兼容的版本所取代。
以下Spring Cloud Netflix模塊和相應的Starter將進入維護模式:
spring-cloud-netflix-archaius
spring-cloud-netflix-hystrix-contract
spring-cloud-netflix-hystrix-dashboard
spring-cloud-netflix-hystrix-stream
spring-cloud-netflix-hystrix
spring-cloud-netflix-ribbon
spring-cloud-netflix-turbine-stream
spring-cloud-netflix-turbine
spring-cloud-netflix-zuul
這不包括Eureka或並發限制模塊。
什么是維護模式?
將模塊置於維護模式,意味着Spring Cloud團隊將不會再向模塊添加新功能。我們將修復block級別的bug以及安全問題,我們也會考慮並審查社區的小型pull request。
我們打算繼續支持這些模塊,直到 Greenwich版本 被普遍采用至少一年。
解讀
從上文可知,由於Netflix對Zuul 1、Ribbon、Archaius等的維護不利,Spring Cloud決定在Greenwich中將如上項目都進入“維護模式”——
基本上,除了 spring-cloud-netflix-eureka-*
以及 spring-cloud-netflix-concurrency-limits
,其他模塊都進入“維護模式了”。
TIPS:
考慮到
spring-cloud-netflix-concurrency-limits
可能很多童鞋沒有見過。簡單介紹一下,concurrency-limits
是Netflix開源的限流器項目,Spring Cloud在Greenwich版本中引入。
Netflix Concurrency Limits的GitHub:https://github.com/Netflix/concurrency-limits
進入維護模式意味着,再也不會有功能的變化了,不過呢,Spring Cloud承諾會維護嚴重的Bug & 接受社區的pull request。
何去何從?
這應該是大家最關注的問題,目前業界對Spring Cloud使用最廣的就是Spring Cloud Netflix了。這TM一下80%都進入“維護模式”,再也沒有新功能福利了,讓人如何是好啊!就目前來看,繼續使用Sprng Cloud Netflix問題不大,但長期來看,顯然是不合適的。
官方建議的替代項目如下表所示:
當前 | 替代項目 |
---|---|
Hystrix | Resilience4j |
Hystrix Dashboard / Turbine | Micrometer + Monitoring System |
Ribbon | Spring Cloud Loadbalancer |
Zuul 1 | Spring Cloud Gateway |
Archaius 1 | Spring Boot external config + Spring Cloud Config |
替代項目的孵化進度
目前:
1 Hystrix的替代Resilience4j:目前在https://github.com/spring-cloud-incubator/spring-cloud-circuitbreaker 中孵化。該項目原名叫 spring-cloud-r4j
,最近改名為 spring-cloud-circuitbreaker
。
TIPS:這么做, 筆者猜想:Spring是要抽象一個斷路器的統一規范,讓不同的斷路器實現去實現,從而實現相同的注解(例如
EnableCircuitBreaker
,然后不同的實現,諸如Hystrix、Resilience4j、Sentinel等想要接入只需更換不同的starter依賴,使用則完全一樣),不過由於尚未孵化完畢,代碼也比較新,暫時只是猜想。
2 Hystrix Dashboard /Turbine的替代:由於官方建議用Resilience4j替代Hystrix,所以你再也不需要Hystrix的那一堆監控輪子了!Resilience4j自帶整合了Micrometer!這其實是一個個人比較喜歡的福利。
TIPS:
曾記否,你為了Hystrix的監控,得搞Hystrix Dashboard;為了監控微服務集群實例,又得搭Turbine;微服務整合Turbine又有HTTP方式&MQ方式,兩種方式還不能共存,不能兼容……無比蛋疼!
Micrometer是Pivotal公司(也就是Spring所在的公司)開源的監控門面,類似於監控世界的Slf4j;它可以和各種監控系統/監控畫板/時序數據庫配合使用,諸如:Graphite、Influx、Ganglia、Prometheus等等。
Micrometer官網:http://micrometer.io/
Spring Boot 2中的Spring Boot Actuator底層用的就是Micrometer——這意味着,如果你用Resilience4j,監控的體驗和Actuator是一致的!
3 Ribbon的替代 SpringCloudLoadbalancer
:之前 spring-cloud-loadbalancer
在 spring-cloud-loadbalancer
項目(https://github.com/spring-cloud-incubator/spring-cloud-loadbalancer)中孵化,現在,該項目已經成為 spring-cloud-commons
的子項目了。使用上, spring-cloud-loadbalancer
和Ribbon區別不大。
4 Zuul 1的替代Spring Cloud Gateway:這個基本玩Spring Cloud的都知道。由於Zuul持續跳票1年多,Spring Cloud索性開發了Spring Cloud Gateway。在這里,有Spring Cloud Gateway和Zuul 1.x的性能對比:http://www.itmuch.com/spring-cloud-sum/performance-zuul-and-gateway-linkerd/
5 Archaius 1的替代Spring Boot external config + Spring Cloud Config:我太喜歡這個改變了!眾所周知,Spring Cloud有N多組件,N多N多配置屬性(1000+),其中很多配置是不給提示的。原因在於Spring Boot/Cloud的配置需要借助 spring-boot-configuration-processor
讀取代碼的注釋,並生成metadata.json文件才能有提示。而Netflix開源的組件(例如Ribbon/Hystrix等)都沒有使用Spring Boot的規范,而是自己用Archaius管理配置(那代碼風格,個人很不喜歡),根本沒有metadata.json文件,於是這部分配置IDE無法給你提示。以后全面廢棄Archaius,統一使用Spring Boot external config + Spring Cloud Config,這意味着未來Spring Boot的編程體驗更加統一的同時,配置提示還杠杠的。
未來&其他的候選者
我相信未來Spring Cloud的生態會越來越好。事實上Spring Cloud生態中還有其他的替換項目&更多選擇:
作用 | 業界用得最多 | 已孵化成功的替代項目 | 孵化中的替代項目 |
---|---|---|---|
服務發現 | Eureka | Consul、Zookeeper | Alibaba Nacos |
負載均衡器 | Ribbon | - | Spring Cloud Loadbalancer |
斷路器 | Hystrix | - | Resilience4j、Alibaba Sentinel |
聲明式HTTP客戶端 | Feign | - | Retrofit |
API網關 | Zuul 1 | Spring Cloud | - |
配置管理 | Spring Cloud Config | Consul、Zookeeper | Alibaba Nacos |