Netflix Eureka 2.0.0正式發布:借尸還魂還是虛晃一槍?
本文之所以聊一聊Eureka,是因為它還是有一定話題度的。換句話講,在Spring Cloud的加持下,Eureka作為注冊中心的市場占有率蠻高的,大概率還是第一名(非官方數據,筆者個人直覺而已)。
真的or假的?
這,雖然有點難以置信,但,一圖勝千言:
結論:真的,毋庸置疑?。。?/p>
誰在提交代碼?
繼續看圖:
一直提交代碼的竟是Spring Cloud的作者,并非奈飛的工程師?
其實不然,Spencer Gibb確實有過不少的commit,但他絕非唯一。但他的源動力是很足的,作為Spring Cloud項目的負責人之一,也得負責將Release Train上的組件整合進來嘛。說到底,還是誰最痛,誰去推!
PS:代碼肯定不會是他一個人來寫(commit也有不少奈飛的工程師),但主要推手之一一定有他
為什么還在維護Eureka?
既然Netflix官方都不愿去繼續發展Eureka了,為何還在持續迭代升級呢?
這其中非常重要的一個原因是:Eureka作為配置中心組件,足夠優秀?。。?/p>
整體設計、表現、性能、代碼水平...都屬非常優秀級別
無明顯短板:性能可能算一個,但只要不是超大規模集群就不成問題
這里祭出各個注冊中心對比圖,感受下Eureka的“強悍”:
乍一看Nacos貌似完勝?但“國產軟件”想要走向世界,還有一段路要走。這不體現在它是否實現的功能,而體現在實現的非功能(如文檔、宣傳、設計、代碼水平等)。
這次更新的目的是啥
結合Spring Framework、Spring Boot、Spirng Cloud的發布節點,以及上面截圖中 Spring Cloud作者一直提交代碼的跡象來看,本次升級的目的就顯而易見了:繼續擁抱Spring Cloud。這不,最新的Spring Cloud 2022已經“擁抱”它了:
本次升級的目的,Release Note上也做了說明:這個2.0.0版本是一項新的工作,和2.x-archive分支是完完全全的兩碼事,從代碼分支里也能看出來:
本次升級,Eureka Server的Http API接口和數據結構沒有任何改變。言外之意:協議層面,100%向下兼容,兼容1.x的Client客戶端。所以本次升級的目的主要是:Spring Framework 6.0和Spring Boot 3.0兼容,并且擁抱Jakarta EE 9。
what’s new(新特性)
既然升級已成事實,并非虛晃一槍。那就看看新版本帶來了哪些新特性唄。
雖然是大版本號的升級,但在功能上并不會有多少改變,簡要看一看。
最低版本要求
JDK 8(跑測試的話要求JDK 11及以上,因為測試依賴基于Jakarta EE 9的Jetty)
解釋:原生Eureka Client&Server的代碼,使用JDK 8可以正常構建、使用
Spring Boot 3.0.0
Spring Cloud 2022.0.0
原生Eureka估計沒人會直接使用,一般都會結合Spring Cloud一起,這也是“官方推薦”。
其它改變
眾所周知,Eureka是CS模式,分為Client端和Server端。上面提到:本次升級協議層面完全沒變,但這并不代表代碼層面沒有變化。
2.0.0版本Java客戶端API不向后兼容1.x。言外之意:接口協議雖不變,但實現接口的代碼API變了,不兼容1.x了。我們知道Eureka發送Http請求使用的是glassfish的Jersey客戶端,版本變強便是本次不兼容的主要原因:Eureka 1.x版本默認使用Jersey 1.x(可選支持Jersey 2.x),而Eureka 2.0.0版本使用的是jersey 3.x。
從Jar包層面可以看出,除了?javax.*? -> jakarta.*,改變得并不多,官方描述的是2.0.0大部分Java客戶端API保持不變。
另外,eureka-server這個模塊現在并不能直接打成一個WAR包部署,因為“官方”(這里主要指的Spring官方)覺得沒有必要,畢竟你不太可能單獨去裸跑它。推薦的使用方式是作為Spring Cloud Netflix的一部分跑在Spring Boot應用上,非常方便。
使用兼容性示例
大版本號升級了,并且還存在一定阻斷式,但官方又一直強調改變得不多,那么到底如何呢?保險起見,筆者跑了幾個典型case看看:
eureka-server:下圖可看到1.x和2.x的后臺頁面一毛一樣
服務注冊。筆者啟了一個基于Spring Cloud 2021版本(基于1.x的eureka-client)的應用,分別進行注冊到1.x和2.x的eureka-server,情況為:完全兼容,無任何違和感,符合官方說的協議層面100%兼容
集群模式。1.x和2.x可以無縫的組成集群模式,筆者親測!這里就不貼圖了,留給你自己玩一玩哈
聲明:本文的case只做簡單的現象、效果測試,不對最終生產環境負責,請酌情參考
總結?
本次大版本號升級,雖然不是虛晃一槍但也僅屬小打小鬧。對你之前學習過的Eureka知識、源碼并不構成沖擊,基本沒什么變動,也算一件好事。