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