前言
如果以20年的時間為限,讓我們選出一個影響力最大的程式語言,我的答案應該只有一個 – 那就是 Java。這個1995年誕生的全新的計算機語言,以“一次編寫,到處執行”的跨平臺特性以及物件導向、泛型程式設計等現代語言的特性迅速成為了企業級應用乃至移動應用開發的首選。
伴隨著 Java 的普及,用以開發並提供 JVM 支援的 Java Development Kit (JDK) 就成為了最重要的一個開發工具包。歷史上曾經出現過許多 JDK 的發行版,例如 IceTea、Blackdown、JRockit、Apache Harmony 等等至今都已成為歷史。
Java 是全球應用最廣泛的語言技術棧。據統計,全球 Java 開發工程師超過1000萬名。而 JDK 作為 Java 語言的軟體開發工具包,是整個 Java 應用的核心。當前,在 JDK 全球市場份額中,Oracle JDK 佔 70%、OpenJDK 約佔 21%。但2019年1月之後,Oracle 不再提供 Oracle JDK 8 免費商業版本更新。
亞馬遜雲科技開發者社群為開發者們提供全球的開發技術資源。這裡有技術文件、開發案例、技術專欄、培訓影片、活動與競賽等。幫助中國開發者對接世界最前沿技術,觀點,和專案,並將中國優秀開發者或技術推薦給全球雲社群。如果你還沒有關注/收藏,看到這裡請一定不要匆匆劃過,點這裡讓它成為你的技術寶庫!
Amazon Corretto 是開放 Java 開發工具包 (OpenJDK) 的免費、多平臺、生產就緒型發行版。Corretto 提供長期支援,其中包括效能增強和安全修復。亞馬遜在內部的數千種生產服務上執行 Corretto,並且 Corretto 已被證明能夠相容 Java SE 標準。藉助 Corretto,您可以在常用作業系統(包括 Linux、Windows 和 macOS)上開發和執行 Java 應用程式。
今天,當我們面對 OpenJDK、Azul、Oracle Java SE 等許多 JDK 的選項的時候,我們又該如何取捨呢?
什麼是 Amazon Corretto ?
咖啡愛好者都知道,Correto 是一種義大利濃縮咖啡摻入類似白蘭地的烈酒調和而成的咖啡。抿上一口,酒與咖啡共飲帶來的刺激口感和濃郁氣氛使人沉醉。
Amazon Corretto 就是一個,讓你僅使用一次,就會沉醉其中的 OpenJDK,下面的內容帶你一品它的特色:
Amazon Corretto 支援多種平臺,使您能夠在雲端計算環境、私有資料中心、本地的機器或者容器中執行。
與 OpenJDK 相對應的 Corretto 現在可以用於:
Linux x64
https://docs.aws.amazon.com/zh_cn/corretto/latest/corretto-8-...
Linux aarch64
https://docs.aws.amazon.com/zh_cn/corretto/latest/corretto-8-...
Windows x64
https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/win...
Windows x86
https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/win...
macOS x64
https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/mac...
Amazon Linux 2 x64
https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/ama...
Amazon Linux 2 aarch64
https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/ama...
等多個平臺或者作業系統以及雲端計算環境之上。目前釋出的版本有與 Open JDK 8 相對應的 Corretto 8 以及與 OpenJDK 11 對應的 Corretto 11。
為確保與 Java SE 平臺的相容性,對於每個 Corretto 版本上執行技術相容性工具包(TCK),以確保 Corretto 可作為所有 Java SE 發行版的完全替代,除非您使用的是 OpenJDK 中不可用的特性 (例如,Java Flight Recorder)。Corretto 安裝完畢以執行 Java 應用程式現有的 Java 命令列選項、調優引數、監控和其他任操作都將可以繼續工作。
作為一家成功的以技術驅動的企業,Amazon 在其25年的歷史中構建起來了一套龐大的 IT 系統。數以千計的生產服務都是基於 Java 語言而開發的,而執行這些應用的基礎就是 JDK。這個過程,使得 Amazon 積累了豐富的 JDK 應用的經驗。在知識問答網站Quora 曾經有這樣一個問題,
我統計了一下答案,被提到的最多的開發語言大概就是 Java 了。在這裡我想引用 James Gosling 的一句評價。眾所周知,James Gosling 是 Java 語言的奠基人,也是我非常尊敬的前輩。他目前在亞馬遜雲科技擔任 Distinguished Engineer ,因工作之便我得以有幸曾與他共進晚餐,聽他聊起當年的八卦,這大概也算是一種福利吧。
“Amazon has a long and deep history with Java. I’m thrilled to see the work of our internal mission-critical Java team being made available to the rest of the world”
— James Gosling hljs-right
這句話翻譯出來就是“亞馬遜在 Java 方面有著悠久而深厚的歷史。我很高興看到我們的內部關鍵任務 Java 團隊的工作可以提供給世界其他地方。
為什麼需要 Amazon Corretto ?
回答這個問題需要回顧過去幾年圍繞著 Java 發生的一系列動盪。
熟悉 Java 的開發者都應該知道 Java SE。我們熟悉的 Java SE 定義了一系列通用的 Java API,還包括了 Java 語言的規範和 Java 虛擬機器 (JVM) 的規範。Java SE 最著名的實現之一就是:Oracle Corporation’s Java Development Kit (JDK)。
以往,Java SE 規範受 JCP (Java Community Process https://jcp.org/?trk=cndc-detail) 管理。JCP 決定了哪些新的規範可以加入,哪些需要刪除。原則上任何人都可以去實現 Java 的語言規範。如果這個實現透過了 TCK(測試相容性套件),則通常被認為是相容的 JDK。但是,因為兩件事的發生,圍繞著 JDK 的爭吵與混亂開始了 –
Java 開始每六個月釋出一個新的主要版本
Oracle 更改了其對 Java 的支援模型。簡單說來,Oracle 現在分發兩個JDK構建:Oracle JDK 和 Oracle OpenJDK。Oracle JDK免費提供開發和測試,但如果在生產中使用它,則必須付費。Oracle的OpenJDK在任何環境下都是免費的。
為了給這個混亂火上澆油,Oracle 宣佈 Java SE 8 將在2019年1月結束 Java SE 8 的公共更新:
https://blogs.oracle.com/java-platform-group/end-of-public-up...
按照我的理解,這個變化很大程度上與 Oracle 的商業策略有關。但是,每個 Java 使用者、社群、企業等都對未來 Java 是否免費使用感到困惑。我相信,大部分 Java 的使用者都沒有打算為此而付費。此外,儘管 JDK 11 已日趨成熟,JDK 12 正緊鑼密鼓的開發中。但現實世界中的大部分Java 應用,尤其是強調穩定性、可靠性的企業應用目前還是建立在 JDK 8 之山。更有許多企業,至今仍將 JDK 8 作為首選的 Java 環境。
這張圖是2019年初的一個統計資料,讓我們得以瞭解市場中各個不同版本的現狀,由其凸顯了當下 Java 8 的重要性。
來源:https://aspiresoftware.in/blog/wp-content/uploads/2019/01/108...
儘管 OpenJDK 將保持免費狀態並且可以在生產中使用,但是 Oracle 僅承諾在發行後六個月內支援和更新 Oracle Java 11 OpenJDK。所有後續支援和更新都歸於開源社群。但眾所周知,OpenJDK 社群的響應速度、更新頻度等並不能夠很好的滿足企業關鍵業務支援的需要。
關於這個看法,我想引用 Micah Silverman ,一個擁有24年 Java 開發經驗的 Java 老兵的一段話 –
“OpenJDK 構建給我帶來的最大痛苦是,他們悲慘地落後於 Oracle JDK的 TLS 密碼套件和 TLS 版本(1.1、1.2)的實現。但是,我從事的開源專案有一個大量暴露於各種加密演算法和反向代理型別的工作負載,這些工作負載充分利用了這些東西,因此很可能無法代表其他人在嘗試OpenJDK 時可能遇到的標準 Web 應用程式或微服務所遇到的問題型別,尤其是在 OpenJDK 11 和後來的版本更符合 Oracle JDK 版本。”
來源:https://developer.okta.com/blog/2019/01/16/which-java-sdk?trk...
於是,在這樣的局面之下 Amazon Corretto 應需而生。一方面是Amazon 自身對於數量巨大的 Java 應用的需要。在 Amazon 的系統框架之下,數千種生產服務上執行著 Corretto。這就要求 Corretto 的補丁程式和改進功能夠滿足 Amazon 解決大規模的、現實環境中的服務問題,從而滿足強大的效能和可擴充套件性的需求。
此外也可以透過這個開源專案回饋給開源社群以及為數眾多的 Java 開發者。Amazon 透過免費且長期的支援為使用者提供這些功能,並每個季度更新一次,包括了錯誤修復和安全補丁。亞馬遜雲科技甚至還承諾在季度計劃之外向客戶提供緊急的修復。需要強調的是,Correto 承諾是長期支援(Long-term support,LTS)。這個長期支援包括了 Amazon 承諾至少在相關發行版本的指定日期(例如 Corretto 8 的承諾是2023年6月)之前免費提供效能增強和安全更新。
許多 Java 的使用者已經表示出了對 Corretto 的極大興趣,並有許多已經開始了遷移之旅。例如 FICO,這是一家位於加州聖荷西的資料分析公司,專注於信用評分服務。它的 FICO score,衡量消費者信貸風險的指標,已經成為美國消費者貸款的一個固定指標。他的的工程副總裁 Jeet Kaul 就這樣表示過 –
“在 FICO,我們已經在很多服務中使用了 OpenJDK。有了 Amazon Corretto,我們不僅可以為雲部署 Java,還可以跨所有部署和多個作業系統部署 Java,因為我們知道 Amazon 和社群支援 OpenJDK。我們從預覽版開始就一直在評估 Corretto,並無縫地替換了我們的 Java 執行時。”
Amazon Corretto 啟動
啟動 Amazon Corretto 的最簡單方法是在選擇所需要平臺並下載安裝軟體包。要注意 Java 的版本,Java 8 或者 Java 11:
Amazon Corretto 官網
https://aws.amazon.com/cn/corretto/?trk=cndc-detail
Amazon Corretto 8 的下載
https://docs.aws.amazon.com/zh_cn/corretto/latest/corretto-8-...
Amazon Corretto 11 的下載
https://docs.aws.amazon.com/zh_cn/corretto/latest/corretto-11...
Amazon Corretto 8 原始碼
https://github.com/corretto/corretto-8?trk=cndc-detail
Amazon Corretto 11 原始碼
https://github.com/corretto/corretto-11?trk=cndc-detail
java -version
openjdk version “11.0.3” 2019-04-16 LTS
OpenJDK Runtime Environment Corretto-11.0.3.7.1 (build 11.0.3+7-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.3.7.1 (build 11.0.3+7-LTS, mixed mode)
Amazon Corretto 和 Open JDK 的合作
Amazon 在以往已經為 OpenJDK 8 做出了許多的貢獻,並將在今後會與 OpenJDK 社群進行更緊密的合作,以實現 OpenJDK 8 和11的完善與增強。
如果針對 JDK 的修補程式在上游專案不能獲得批准、延遲或不適合於 OpenJDK 專案,Amazon 將在提供增值服務的前提下將其提供給Corretto 的使用者。如果在 OpenJDK 中以其他方式解決了此類問題,Amazon 也將在安全的前提下儘快解決該問題。
至於亞馬遜雲科技,在2019年已經讓 Corretto 成為 Amazon Linux 上的預設 JDK。
結語
最後,總結一下 Amazon Corretto 的特性-
- 免費,開源,多平臺和可用於生產的JDK (GPL-2.0)
- OpenJDK的下游發行版本
- 免費長期支援 (LTS)
- 至少每季度釋出一次更新
- 直接替換(直接替換現有的OpenJDK)
- 多平臺— Linux、Windows、macOS、Docker
- 啟用了技術相容性套件(TCK),以確保與 Java SE 平臺的相容性
我們鼓勵您使用 Corretto 來執行 Java 應用程式。預祝各位的 Amazon Corretto 體驗愉快!
本篇作者:費良宏
費良宏,亞馬遜雲科技 Principal Developer Advocate。在過去的20多年一直從事軟體架構、程式開發以及技術推廣等領域的工作。他經常在各類技術會議上發表演講進行分享,他還是多個技術社群的熱心參與者。他擅長 Web 領域應用、移動應用以及機器學習等的開發,也從事過多個大型軟體專案的設計、開發與專案管理。目前他專注與雲端計算以及網際網路等技術領域,致力於幫助中國的 開發者構建基於雲端計算的新一代的網際網路應用.
文章來源:https://dev.amazoncloud.cn/column/article/62b5200829f7d21bb15...