獨家!阿里開源自用OpenJDK版本,Java社群迎來中國力量

weixin_34127717發表於2019-03-18

InfoQ記者獨家獲悉:阿里巴巴宣佈重磅開源OpenJDK長期支援版本Alibaba Dragonwell。眾所周知,Oracle對Java 的策略已經發生系列轉變,由於Java 使用者群體龐大,導致此事在很長一段時間內都是開發者的討論焦點。作為世界上最大的Java使用者之一,阿里巴巴此時選擇開源OpenJDK長期支援版本Alibaba Dragonwell是出於哪些考量呢?

Oracle撒手,宣佈對個人使用者 (Personal Users) , Java 8 官方支援時間持續到 2020 年 12 月;對商業使用者(Commercial Users),2019 年 1 月之後不再提供免費更新。

紅帽喊話,計劃在2023年之前繼續提供對 OpenJDK 8 的支援。

AWS加入,正式推出 OpenJDK 長期支援版本 Amazon Corretto。

如今,阿里巴巴也宣佈重磅開源OpenJDK長期支援版本Alibaba Dragonwell。

這不禁讓人感嘆:Java生態圈碎片化趨勢越來越明顯。對開發者而言,既不希望冒風險即刻更換,又希望可以使用具有持續安全更新和完備功能的JDK。此時,阿里巴巴宣佈開源OpenJDK長期支援版本,出於哪些考慮?這是否可以打動堅守的Java 8群體並解決其燃眉之急?未來,阿里巴巴打算如何處理這一專案與OpenJDK的關係?這家Java程式碼量上億(billion lines of Java code )的公司如何看待Java的未來?

針對上述問題,InfoQ記者獨家專訪阿里雲智慧基礎產品事業部資深技術專家李三紅、阿里雲智慧基礎產品事業部研究員Kingsum Chow (周經森),聽他們如何看待Alibaba Dragonwell與Java歸途。

Alibaba Dragonwell

Java生態圈內的不少開發者想必對AWS開源的OpenJDK長期支援版本Corretto專案名字的來歷有所耳聞,Corretto由Caffe Corttto演變而來,這是一種義大利飲料,指含有少量白酒的濃縮咖啡。無獨有偶,Alibaba Dragonwell的命名也與飲料頗有淵源。周經森在採訪中透露:

“Dragonwell”中文譯為龍井,象徵著中國的茶文化,又恰好是杭州特色(阿里巴巴總部所在地);“well”一詞通常被描述為水源匯聚在一起供大家享用,我們希望可以集合所有開發者的力量不斷完善該專案並最終貢獻給所有使用者。

為何此時開源?

在很大程度上,Java由Oracle長期主導。自2017年底,Oracle就開始陸續轉變Java策略,逐漸將Oracle JDK中的商業功能開源給社群,並宣佈不再提供免費商業版本更新,不提供安全更新和漏洞修復支援。

這對開發者而言意味著什麼?如果你是Oracle JDK 8的使用者,原License尚可免費使用,但之後若希望得到持續安全更新則需要為此付費。如今,在Oracle主導下的Java大環境已經發生變化。作為最大的Java的使用者之一,阿里巴巴幾乎擁有世界最大規模的Java應用叢集,肯定需要為此採取一些行動。

在採訪中,李三紅表示,Oracle的系列轉變傳遞出一個重要訊息:

如果希望繼續免費使用Java並獲得持續更新,那之後可能就需要轉換到社群版本。

基於此,阿里巴巴決定開源OpenJDK長期支援版本Alibaba Dragonwell,一是因為其自身擁有大量Java客戶和業務需求,阿里巴巴希望他們可以繼續免費享受到JDK的所有功能;二是考慮到不少開發者可能會做出新的選擇,阿里巴巴決定開源該專案,為開發者提供一個新的參考。

重要特性

Alibaba Dragonwell是一款免費的 OpenJDK 發行版,其提供長期支援,包括效能增強和安全修復,這部分其實對應於Oracle收費部分的功能。李三紅透露,Alibaba Dragonwell目前支援x86-64/Linux平臺,主要針對的場景是資料中心大規模Java應用部署情況下,Java應用穩定性、效率以及效能的優化與提高。

此次釋出的Alibaba Dragonwell 8預覽版本對應OpenJDK 8版本,與Java SE標準相容。值得重點關注的三大特性如下:

  • 移植上游 Java 11 的 Java Flight Recorder (JFR) 功能。眾所周知,JFR功能是Oracle JDK的商業收費功能,需要付費才可使用,雖然後期通過OpenJDK 11開源,但Java 8的使用者群體仍然十分龐大,因此阿里巴巴決定將該功能移植到Alibaba Dragonwell 8中供開發者使用。Java 開發人員可以通過 JFR 收集 JVM 執行過程中的詳細profiling資訊,配合 Java Mission Control (JMC), 提高 Java 應用的問題診斷及效能優化效率;

  • 整合 JWarmup 技術。Warmup問題一直是Java應用的最大難點之一,雖然阿里內部很早就有應對之法,但外部使用者很難觸達這一方案。如今,JWarmup 已作為 Java Enhancement Proposal(JEP) 在 OpenJDK 立項,未來有望加入 Java 標準發行版。JWarmup 允許使用者在資料中心結合應用流量排程時機,動態提前預編譯Java 程式碼,從而有效減少由於傳統Just-in-Time預熱 (Warmup) 導致的 CPULoad 過高,Response Time 超時等問題;

  • 提供GC問題診斷等Serviceability方面的提高。

想必有心的開發者已經發現,目前Alibaba Dragonwell僅支援Linux平臺,這也是大部分資料中心所使用的作業系統。為防止開發者出現誤解,此處需要特別說明:這並不影響Java的跨平臺特性。因為,跨平臺指的是Java應用本身,JDK(包括JVM)只是一個軟體,不同平臺有不同的版本,只要在對應平臺安裝好對應的JDK。開發者可以在任意系統上開發Java應用,再部署到相應平臺執行位元組碼檔案即可。(開源後,阿里巴巴會提供詳細的中英文使用文件說明)

後續規劃

未來,阿里巴巴希望每個季度進行一次版本迭代,下一階段也就是3個月後預計會發布GA版本。除此之外,阿里JDK技術團隊會對該專案進行持續維護和更新,並將緊密與OpenJDK社群合作,促進Java技術的發展。

此外,考慮到使用者實際需求以及Java 8群體的龐大性,阿里巴巴後續也會考慮繼續將OpenJDK 後續版本中的優秀功能移植到Alibaba Dragonwell中,類似於上文提到的Java Flight Recorder功能,供開發者在生產環境中提前使用。

阿里巴巴與Java

2018年,阿里巴巴獲邀加入JCP最高執行委員會,任期兩年,這也是第一家加入JCP的中國企業。JCP是一個開放的國際組織,是Java最高執行委員會,由Java開發者以及被授權者組成,主要職能是發展和更新Java技術規範,這意味著阿里巴巴在Java標準規範制定中具有一定話語權,並可以參與Java生態重大事件的決策。

據調查,阿里巴巴是全球最大的Java使用者之一,其內部擁有數量非常龐大的Java開發人員和伺服器,這也是其業務發展使然。提到阿里巴巴,最容易想到的標籤就是“雙十一”。2018年,天貓雙十一的總交易額最終定格在2135億,不到2小時就破了千億大關,支撐系統高效執行背後的最大功臣莫過於Java。

隨著體量增長和業務需求複雜性的提升,阿里巴巴在2004年決定從PHP語言全面轉向Java,並急需更高效的方式來解決生產環境中的問題, 這逼著阿里巴巴不得不基於開源技術自我構建解決方案,指導Java開發人員快速定位並解決問題。
 
網際網路企業的節奏非常快,一週內甚至需要迭代很多版本,這其中就會出現很多問題,如果全部依靠官方更新來解決,整個戰線瞬間被拉長,業務根本等不起。這也是很多網際網路企業選擇基於開源版本的一個非常重要原因:自主可控,快速構建匹配業務發展的解決方案。
 
最早於2010年,阿里開始基於OpenJDK 6進行JVM定製優化,這是國內第一個優化、定製且開源的伺服器版Java虛擬機器。之後,阿里內部多個團隊陸續都開始參與了JDK研發(沒錯,最開始確實是多個團隊都在做),隨後,阿里巴巴考慮到JDK作為一項重要的基礎設施,幾乎覆蓋了物流、金融、電商、新零售和菜鳥等所有業務場景,長期分開研發肯定是不行的,便將所有JDK團隊合併為一個。
 
2015年,統一後的阿里JVM團隊開始著手基於OpenJDK 8進行優化和定製工作,並推出瞭如今眾所周知的定製版AJDK (Alibaba/AlipayJDK) ,這幾乎承載了淘寶、天貓,螞蟻,菜鳥的所有核心應用,並經受住了多次雙十一考驗。
 
那麼,如今開源的Alibaba Dragonwell與阿里內部使用的AJDK是一個東西嗎?
 
通過阿里的業務執行情況來看,AJDK的功能和效能確實不錯,但本次開源的Alibaba Dragonwell與AJDK還是有差異的。李三紅表示,Alibaba Dragonwell是AJDK的開源版本,AJDK技術的繼承者。目前開源的版本並未包含AJDK的所有功能,比如多租戶,Wisp協程,ZenGC等,主要是因為開源一個技術會涉及到比較長時間的準備。
 
就目前公開的Alibaba Dragonwell 8預覽版本,阿里內部其實也進行過很多次討論,反覆準備、測試、溝通,確定後又耗費了半年時間才最終將該預覽版本開源,之後,阿里會考慮將AJDK的功能逐漸過渡到Alibaba Dragonwell。顯然,這一工作需要時間。

各家JDK火熱,OpenJDK咋辦?

不同於Oracle JDK,OpenJDK 是基於 GPL v2/a Classpath Exception的開源專案,從Java 7開始就是Java SE的官方參考實現。曾有OpenJDK Committer在接受採訪時表示,OpenJDK 有一個約定成俗的做法,經過多年免費支援後,Oracle JDK版本的生命週期就進入結束期,之後由社群接手並主導後續更新。在此之前,Oracle已經為JDK 8免費提供了五年支援,也是時候進入社群維護階段了。
 
如今,國際不少主流廠商都在使用OpenJDK,比如Google、Twitter、Amazon和阿里巴巴,並研發了基於此構建的JDK版本,這讓不少生態圈內的開發者出現擔憂:在不少使用者開始考慮選擇OpenJDK的時候,這些大廠是否還有心思參與整個社群的維護?

從阿里巴巴層面來看,李三紅在採訪中反覆強調一個觀點:

Alibaba Dragonwell一定是OpenJDK的下游,每個Alibaba Dragonwell發行版都會同步上游最新更新,並經過阿里巴巴內部大規模的應用叢集測試。同時,阿里巴巴也會積極將AJDK上的技術積累貢獻到OpenJDK,積極參與社群的專案更新和維護。

AWS方面與這一觀點也頗為類似,AWS首席開源技術專家Arun Gupta曾在 AWS 開源部落格上釋出公告稱:

我們期待與 OpenJDK 社群密切合作,共同開發 OpenJDK 8 和 11 的未來增強功能。

就筆者看來,這一狀態下,各大廠商推出的JDK勢必會與OpenJDK存在些許差異,這很容易理解:客戶生產環境所遇到的實際問題未必適合OpenJDK的改進;面對同一問題,OpenJDK的解決方案未必與各大廠商的想法一致,這就需要多方進行友好協商,並逐漸形成良性機制,現在只是邁出了推動OpenJDK的第一步。

Java歸途

選擇多了,生態似乎更“碎”了,堅守Java 8的開發者未來有意願向OpenJDK遷移嗎?

堅守的Java 8群體

既然Java 8和Oracle JDK 8存在這樣那樣的問題,為什麼開發者不大規模遷移至更新的版本呢?為什麼Alibaba Dragonwell依舊從基於OpenJDK 8開始呢?這個問題的答案很簡單:

Java 8 是目前最被廣泛使用的版本,並且其群體非常堅守!

在Java圈內,你會發現一個很有趣的現象:無論新版本給出的更新多麼誘惑,大部分Java開發者似乎並不感興趣,依舊堅持自己的選擇。確實,Java 8是一個非常成功的版本,以至於很多開發者並不認為需要更新其他版本,這可能與長期養成的習慣和固有信任有關係。
 
對此,李三紅認為,Java這麼多年發展過來,大多數開發者已經習慣信任官方Oracle JDK,對社群OpenJDK版本關注不夠,所以從Oracle JDK到OpenJDK的切換需要一個過程。但隨著這些國際科技大廠的努力,OpenJDK的生態一定會越來越完善,功能也會更加齊備,面對持續的安全更新和眾多大廠的深度參與,這個專案應該會成為Java生態中的重要公共資源。

越來越“碎”的生態

很早之前,Java生態就開始出現碎片化趨勢,這在Oracle收費之後似乎得到了加劇。此前,為了減少對碎片化問題的潛在擔憂,AdoptOpenJDK曾強烈鼓勵所有OpenJDK提供商將補丁提交給OpenJDK。
 
對此,周經森認為,就開發者而言,目前的選擇越來越多,這不見得一定是件壞事。並且,不同版本之間的相容性其實非常高,遷移成本幾乎為零,這不會給使用者使用造成額外負擔。不同的版本在效能優化、平臺支援等方面確實存在些許差異,開發者可以根據需要進行選擇,但阿里巴巴正在努力將這些技術推向上游,也就是整個OpenJDK生態,這一問題應該會在未來得到緩解。

3月21日,阿里巴巴將宣佈開源Alibaba Dragonwell。屆時,開發者可通過阿里雲開發者中心及Github社群下載使用。

相關文章