前IT业余买手来谈谈JDK选择和采购
前言: 前日和几个圈内朋友分别讨论了JDK选择的事情,感觉还是挺有知道意义的,就此做了记录。
1 JDK 和JRE
Java Runtime Environment (JRE)
JRE 是java程序得运行环境, 提供 java程序运行所需得库,虚拟机和其他各种部件。 JRE简单说是一个运行环境并不包含用于开发java程序的编译器和调试器。Java Development Kit (JDK)
JDK 是 Java程序的开发环境, 除了JRE提供的所有东东外,还包括编译器、调试器等区别请参考:
https://stackoverflow.com/questions/11547458/what-is-the-difference-between-jvm-jdk-jre-openjdk
2 OpenJDK、OracleJDK、IBMJDK
OracleJDK 就是正统的SunJDK的延续,大多数java程序都用oracleJDK.
OpenJDK是2006年由SUN开源的,但是很多组件当时没有开源,因此openjdk并不100%兼容sun jdk, 当时sun还有计划继续开源剩下的组件, 但随着sun被oracle收购,oracle开始全球java版权大维权。自此OpenJDK的就更加得到重视,包括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
请先考虑以下几个问题:
- 你需要是否需要保留JAVA5,JAVA6 时代的应用?
- 你需要在IBM的小型机上跑JAVA应用吗?
- 你需要在windows上跑JAVA应用吗?
- 你所在的企业是否刚刚开始IT建设?从零开始?
- 你是否有大规模的cassandra 或者kafka?
- 你是否在金融行业?
- 我们用centos系统,却跑的OracleJDK。。
3.1 你是否需要保留JAVA5,JAVA6 时代的应用?
因为大部分的JAVA遗留应用都是sun 时代的产物, 可以说只能选择oracle JDK
3.2 你需要在IBM的小型机上跑JAVA应用吗?
IBM AIX 或者 linux on power 上的首选是 IBM JDK , IBM 机器上只能用IBMJDK。 如果是跑WAS等IBM的中间件,那只能选择IBMjdk。 如果是AS400 环境, 那就只能选择 JAVA for 400 。 反正上了IBM的船,跟着走就是了。
3.3 你需要在windows上跑JAVA应用吗?
虽然很蛋疼, 但是确认有大量这样的情况, windows上首选的也是 Oracle JDK
当然如果你是自己开发的应用,自己组织能100%的控制自己的应用,可以考虑Open JDK
Windows的Open JDK 可以从以下三家获得:
- azul ZULU https://www.azul.com/downloads/zulu/
- RedHat https://developers.redhat.com/products/openjdk/overview/
- 社区维护版本(ojdkbuild) https://github.com/ojdkbuild/ojdkbuild
3.4 你所在的企业是否刚刚开始IT建设?从零开始?
如果是初创企业, 互联网企业等,我相信强大一点的互联网企业肯定都是自己构建JDK了。
一般的互联网企业,推荐使用OpenJDK 。 从一开始就选择OpenJDK 能避免很多麻烦,特别是发展壮大后必然面临oracle的许可问题 。 当然还是要确保开发引用的框架、jar包不依赖于Oracle JDK 开发的,即使有依赖情况,也可以找到替换的方案,因此不必担心。OpenJDK 能帮你省掉很多钱,后面再说。
3.5 你是否有大规模的cassandra 或者kafka?
如果有可以考虑 Azul 的 Zing,不过是需要100%花钱买的。如果不想花钱还是推荐OpenJDK。
3.6 你是否在金融行业?
如果你在金融行业, 还是老实使用oracle JDK吧。 原因有三:
- 稳定性:金融行业稳定是第一考虑, OracleJDK对bug的修复还是很快的,自身也相当稳定。
- 兼容性:OracleJDK 在兼容性上也是最好的,特别对于历史遗留应用。另外i金融行业外包,外采购严重,很难100%控制外包商或产品供应商。因此最大兼容性是第一考虑。金融使用的中间件多数为weblogic,在和中间件的配合度上oracle JDK可以说是唯一选择(用openjdk跑weblogic,oracle是不提供支持服务的)。
- 成本: 金融行业这点小钱还是花的起的 :D
当然金融行业也有选择OpenJDK的, 比如你是红帽的客户,或者跑JBOSS ,Drools,jBPM 等,首选OpenJDK。
3.7 我们用centos系统,却跑的OracleJDK。。。
这种情况还挺多的, 确实有点拧巴。。
大多数中小互联网公司都是centos, 一般都会选择OpenJDK。 但是, 确实也有各种原因选择OracleJDK的。
那么这种情况下,如果安全防护做的好,又没有遇到什么Bug的化就保持现状吧。
但是,如果有安全要求,并且确实遇到了问题的话,有以下三种方案选择:
- 买Oracle JDK补丁支持
- 买红帽linux(rhel) ,改centos为RHEL
- 全部迁移到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: update 151 patch (equivalent to JDK 7u151)
那在网上能找到的版本呢?
Java SE Development Kit 7u80
没错, 要花钱买的正是补丁!
4 重点:如何省钱的获得Oracle JDK补丁?
那么有没有一家公司,同时提供oracle jdk 补丁 和 open jdk的补丁呢?
作为一个兼任采购的IT,这点小聪明还是有的。
我偷偷的告诉你: 只要你不蛋疼的在windows上跑JAVA,有一家可以给你同时提供 OracleJDK 和 OpenJDK.
那就是 Redhat
购买红帽的linux订阅,理论上淘宝上买一台机器的订阅就可以了。然后我再教你如何挖红帽的墙角(下期写一写挖墙脚的方法)。
用如下命令检查订阅, 你看到了什么? 呵呵 Oracle JAVA
subscription-manager list --available --all
+-------------------------------------------+
Available Subscriptions
+-------------------------------------------+
Subscription Name: Red Hat Enterprise Linux Server, Premium (1-2 sockets) (Up to 1 guest) (L3-only)
Provides: Red Hat Beta
Oracle Java (for RHEL Server)
Red Hat Enterprise Linux Server
Red Hat Software Collections Beta (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 # 安装oraclejdk
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-rpms
5 附录:算算账(价格都是列表价,仅供参考)
几家公司:
- Oracle (oracle jdk)
- Redhat (open jdk 和 oracle jdk)
- Azul ( open jdk 和 Zing )
- IBM (IBM JDK)
这里就不讨论IBM了, 本身买了ibm机器又有维保的都能下载。
成本对比:
供应商 | 预估报价 | 说明 |
---|---|---|
oracle | 十几万/台 | 按机器core数报价不同,每年服务费成交价的N%,如果是weblogic用户JDK补丁就免费送了 |
Redhat | 1万元/台/年 | linux 红帽订阅按年付费 , 按照机器数买,其实是linux的补丁附赠JDK补丁 |
Azul | 20万/150台/年 | 网站报价,不太准,也是订阅,按年付费 |
经供参考。