JavaEE死了

当java出世时,那些大玩家像IBM、BEA、Oracle等看到了一个非常好的赚钱机会,因为Java是一个伟大的Web编程语言。但在编程语言上怎么能挣大钱呢?答案是置于其上建立服务器并使其复杂化,这样大公司才会花大价钱购买。这就是为什么我们有JEE的JSR规范,WebLogic,WebSphere和其他服务器。

大型应用程序包部署在这些服务器上会跑得太慢了,太多内存损耗。在一个容器内进行开发和调试是一个噩梦。

由于资源使用率太高,你无法用一个合理的价格找到公共主机托管公司来长时间支持java运行。你想用java构建网站,你必须花大价钱租用主机甚至你可能用aServlet容器。

2003,Rod Johnson发布了Spring框架,无需EJB就可以使用Ioc和POJO开发。由此带来生产力的增长是巨大的,很多开发者开始使用Sring,并将J2EE EJB抛出窗外。应用服务器厂商看到这种趋势,他们在设计JEE5时就注意提高生产力和减轻使用者的痛。不幸的是,今天的Spring框架还是像JEE容器那样基于JEE 的servlet容器的设计,这是一个十年前没有考虑到多核和NIO的设计。

在这段时间内,PHP飞速发展。它使用较少的内存和资源,被众多主机托管公司支持。一些建立在PHP的CMS平台 如wordpress,Drupal等把很多开源开发者变为PHP程序员。尽管php仍然是最流行的语言,它还是有它的缺点。它性能慢且很难使它具有可扩展性。

2009年Ryan Dahl引入了Node.js支持异步,非堵塞事件驱动I/O提高响应率,相比JEE集群有效利用了单个服务器的吞吐能力。js是一个很好的设计,但也有其局限性。很难规模化,很难与现有的遗留系统的集成。

2014年一个新的成员Undertow来到城里,它是基于非阻塞java服务器。从techempower.com测试看出,它在8000美元的戴尔服务器中支持每秒几百万请求,而使用相同的测试用例,谷歌在集群下也只能支持一百万个请求。Undertow有轻量级的核心,1mb大小,简单的嵌入式服务器,使用少于4MB的堆空间。

使用新的Undertow为核心,我们已经建立了轻量java框架,以容器化微服务为目标。它支持OpenAPI设计驱动,提供运行期间的安全和验证。

JEE供应商
几年前,Oracle和IBM花了数十亿美元开发应用服务器,这些服务器(WebLogic、WebSphere)以数百万美金出售给大公司,现在变得很难卖了,随着微服务发展,应用服务器更难卖了,这些服务器主要用于单片整体型应用,难以管理。我工作过的一个应用有数以百计的ejb,每次稍有变化,就会花费45分钟来构建和部署到WebLogic。

从客户的角度来看,不值得购买这些服务器的,你不得不花钱去升级你的应用服务器旧版本。这些升级成本数百万美元,加上新的应用服务器的成本。

一些聪明的人开始疑问:为什么我们需要部署到应用服务器?为什么我们需要包装我们的应用为ear或war,而不是jar?为什么我们不能打破大应用变成规模更小的独立部署。

问题的答案是微服务。维基百科定义:“…一个软件体系结构风格,复杂的应用程序都是由小而使用语言无关的API互相通信的独立过程组成1。这些服务都很小,高度解耦和重点是实现小的任务,便于系统构建模块化。”

而精卫越来越流行,很多厂商都试图重新构建Web服务到微服务,这样产品才能卖得出去。

大公司正在分解他们的大应用程序为较小的碎片,能够单独部署和更换。这些小的服务部署在云上的Docker容器。在过去的几年里我一直为我的客户在做这方面的工作。

jee is dead

[该贴被banq于2016-11-11 18:07修改过]