javascript
Spring Cloud Netflix项目进入维护模式之我见
這兩天看到一則新聞: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 |
總結
以上是生活随笔為你收集整理的Spring Cloud Netflix项目进入维护模式之我见的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 当面试官问我Mybatis初始化原理时,
- 下一篇: 简述Linux虚拟内存管理