前IT業餘買手談JDK的選擇和採購
前言:姜江是一名開源愛好者,有很深的技術功力,也是我的一位好友。本文為姜江原創。本文中,大衛進行了排版、錯別字修正、並增加了圖片。本文已獲得作者授權發表。
本文僅代表原作者的個人觀點,僅供參考。
正文
前日和幾個圈內朋友討論分別討論了JDK選擇的事情,感覺還是挺有指導意義的,就此做了記錄。
1 JDK 和JRE是什麼?
Java Runtime Environment (JRE)
JRE 是java程序得運行環境, 提供 java程序運行所需的庫,虛擬機和其他各種部件。 JRE簡單說是一個運行環境、並不包含用於開發java程序的編譯器和調試器。
Java Development Kit (JDK)
JDK 是 Java程序的開發環境, 除了JRE提供的所有內容外,還包括編譯器、調試器等
區別請參考:
2 Open JDK、Oracle JDK、IBM JDK
OracleJDK 就是正統的Sun JDK的延續,大多數java程序都用oracleJDK.
Open JDK是2006年由SUN開源的,但是很多組件當時沒有開源,因此Open JDK並不100%兼容SUN JDK, 當時SUN還有計劃繼續開源剩下的組件, 但隨著SUN被Oracle收購,Oracle開始全球java版權大維權。自此Open JDK的就更加得到重視,包括IBM,Apple和SAP。 目前OpenJDK的主要維護者是Redhat。
IBM發展了自己的JDK,用於其特殊的硬體和操作系統中,比如 java for AS400 等。所有在IBM機器上必須跑IBM JDK。
另外還有Azul 的zing 和 zulu ,zulu是 azul和微軟維護的openjdk版本, 在微軟的Azure雲中提供應用。 Zing是Azul維護的特殊優化的JDK,採用自有的編譯器和GC演算法。
3 我應該選擇哪個JDK?
請先考慮以下幾個問題:
(1)你需要是否需要保留JAVA5,JAVA6 時代的應用?
(2)你需要在IBM的小型機上跑JAVA應用嗎?
(3)你需要在windows上跑JAVA應用嗎?
(4)你所在的企業是否剛剛開始IT建設?從零開始?
(5)你是否有大規模的cassandra 或者kafka?
(6)你是否在金融行業?
(7)是否有OS和JDK不匹配的情況?如OS用CentOS系統,運行OracleJDK?
接下來,針對以上的七個問題,我們給出建議:
(1) 你需要是否需要保留JAVA5,JAVA6 時代的應用?
因為大部分的JAVA遺留應用都是sun 時代的產物, 所以在這種情況下,只能選擇oracle JDK。
(2) 你需要在IBM的小型機上跑JAVA應用嗎?
IBM AIX 或者Linux on power上的首選是 IBM JDK;
運行WAS等IBM的中間件,那也只能選擇IBM JDK;
AS400 環境, 那就只能選擇 JAVA for 400;
(3) 你需要在windows上跑JAVA應用嗎?
Windows上首選的也是 Oracle JDK,如果你是自己開發的應用,自己組織能100%的控制自己的應用,可以考慮Open JDK。
(4)你所在的企業是否剛剛開始IT建設?從零開始?
如果是初創企業, 互聯網企業等,我相信強大一點的互聯網企業肯定都是自己構建JDK了。
一般的互聯網企業,推薦使用Open JDK 。從一開始就選擇OpenJDK 能避免很多麻煩,特別是發展壯大後必然面臨Oracle的許可問題 。 當然還是要確保開發引用的框架、jar包不依賴於Oracle JDK 開發的,即使有依賴情況,也可以找到替換的方案,因此不必擔心。Open JDK 能幫你省掉很多錢。
(5)你是否有大規模的Cassandra 或者Kafka?
如果有可以考慮 Azul 的 Zing,不過是需要100%花錢買的。如果不想花錢還是推薦Open JDK。
(6)你是否在金融行業?
如果你在金融行業, 還是老實使用Oracle JDK吧。
原因有三:
穩定性:金融行業穩定是第一考慮, Oracle JDK對bug的修復還是很快的,自身也相當穩定。
兼容性:OracleJDK 在兼容性上也是最好的,特別對於歷史遺留應用。另外金融行業外包,外採購嚴重,很難100%控制外包商或產品供應商。因此最大兼容性是第一考慮。金融使用的中間件多數為weblogic,在和中間件的配合度上oracle JDK可以說是唯一選擇(用openjdk跑weblogic,oracle是不提供支持服務的)。
成本:金融行業這點小錢還是花的起的
當然金融行業也有選擇OpenJDK的, 比如你是紅帽的客戶,或者跑JBOSS ,Drools,BPM 等,首選Open JDK。
(7)我們用CentOS系統,運行著Oracle JDK。
大多數中小互聯網公司都是CentOS, 一般都會選擇Open JDK。 但是, 確實也有各種原因選擇Oracle JDK的。
那麼這種情況下,如果安全防護做的好,又沒有遇到什麼Bug的化就保持現狀吧。
但是,如果有安全要求,並且確實遇到了問題的話,有以下三種方案選擇:
方案1:買Oracle JDK補丁支持
方案2:買紅帽企業級Linux訂閱(RHEL) ,改CentOS為RHEL
方案3:全部遷移到OpenJDK
第一方案:花錢多,但是省事。
第二方案:花錢少,但是要改操作系統。
第三方案:不花錢,但是最費工。
4 JDK也要花錢買嗎?
理論上說JDK可以免費使用。 比如你可以輕易的從Oracle網站上下載JAVA 8 或 9。
但是請考慮一下JAVA 6, 7 甚至5呢? 雖然還是能從oracle網站上下載,但是這些版本由於過了維護期因此不再被維護。
問題來了, 你家的應用難道都能跟著oracle一起升級嗎?
另外,想一想外包開發的,買來的應用,你的供應商都能給你升級嗎?100%的回答是:不!
因此你就不得不維持你的JDK大版本, 比如JAVA 6 的就一直再JAVA6上跑。但是隨著時間的推移,可能會有新的bug和安全漏洞出現,那麼這些跑再老JAVA可怎麼辦。
這時要花錢買的東西出現了, JDK 延續支持補丁。
比如 Oracle JDK 7 現在的版本是多少? 你見過網上提供 7u151的下載嗎?
JavaSE 7_x86:update151patch(equivalenttoJDK7u151)那在網上能找到的版本呢?
JavaSE Development Kit 7u80沒錯, 要花錢買的正是補丁!
5重點:如何省錢的獲得Oracle JDK補丁?
那麼有沒有一家公司,同時提供Oracle JDK補丁 和Open JDK的補丁呢?
我偷偷的告訴你:有一家可以給你同時提供 OracleJDK 和 OpenJDK.
那就是 Redhat購買紅帽的linux訂閱:
用如下命令檢查訂閱RHEL, 你看到了什麼? ---- Oracle JAVA。
#subscription-manager list --available --all
Subscription Name:
Red Hat Enterprise Linux Server, Premium (1-2sockets) (Up to1guest) (L3-only) Provides:
Red Hat Beta Oracle Java (for RHEL Server)
Red Hat Enterprise Linux Server
Red Hat Software CollectionsBeta(for RHEL Server)
只要你是紅帽linux的訂閱用戶, 你就能在你的yum庫中發現這個倉庫:
subscription-manager repos --list grep oracle
在不同版本對應的名稱如下:
rhel-5-server-thirdparty-oracle-java-rpms
rhel-6-server-thirdparty-oracle-java-rpms
rhel-7-server-thirdparty-oracle-java-rpms
從這個repo可以下載最新的oracle JDK 補丁!
激活repo rhel6
subscription-manager repos--list grep oracle
subscription-manager repos--enable=rhel-6-server-thirdparty-oracle-java-rpms
yum install java-1.7.0-oracle -y
# 安裝Oracle JDK
yum update java-1.8.0-oracle-y
# 升級打補丁激活 rhel7
subscription-manager repos--enable=rhel-6-server-thirdparty-oracle-java-rpms-rhel5
# 傳統方式
rhn-channel --add --channel rhel-x86_64-server-5-thirdparty-oracle-java
# 一般用這個:
subscription-manager repos --enable rhel-5-server-thirdparty-oracle-java-rpms5
5.附錄:算算賬(價格都是列表價,僅供參考)
幾家公司:
Oracle (Oracle JDK)
Redhat (Open JDK 和Oracle JDK)
Azul (Open JDK和 Zing )
IBM (IBM JDK)
這裡就不討論IBM了, 本身買了ibm機器又有維保的都能下載。
6.成本對比:
供應商預估報價說明
Oracle:十幾萬/台 按機器core數報價不同,每年服務費成交價的N%,如果是weblogic用戶JDK補丁就免費送了。
Redhat: 萬元左右/台/年 紅帽Linux訂閱按年付費 , 按照機器數買,其實是Linux的補丁附贈JDK補丁。
【大衛註:具體價格取決於訂閱是白金還是普通版。原作者此處列的是白金版。具體價格請聯繫紅帽銷售諮詢】
Azul: 20萬/150台/年 網站報價,不太准,也是訂閱,按年付費
以上內容,僅供參考。
TAG:大衛分享 |