应用容器云:接过Java EE的枪

主要大纲: 一、回顾Java EE的发展

二、揭露Java EE的根本性缺陷

三、从Java EE的角度看应用容器云

四、对未来的展望

老实说,今天的观点如果放在一年前,我不大敢讲,会比较有争议。最近看到有人也提出类似观点,所以我也整理了一下,拿出来分享。相信争议还是会有,希望能与大家共同探讨,也能进一步完善我的想法。

一、回顾Java EE的发展

开始之前,首先需要明确下什么是Java EE,我直接引用了官方说明,不做翻译。

这里面有几组关键词,第一组是Platform、API and runtime,说明Java EE是远比Java语言范畴广泛的东西,今天所谈的Java EE的问题,基本上也和Java语言无关;第二组是large-scale、multi-tiered、scalable、distributed,这是Java EE的主攻方向,今天谈的问题主要也出在这里;第三组是modular components running on an applciation server,说明了Java EE的实现形态是应用服务器和一组运行在应用服务器上的组件。

下面看下Java EE的技术标准:

Java EE由一系列技术标准组成,这里面有我们熟悉的用于定位和访问资源的JNDI、用于描述Web Service的WSDL、用于安全方面的JAAS、用于消息传递的JMS等等。这里不展开讲,后面会看到这些Java EE技术标准,或者说是Java EE的API和“子系统”,在应用容器云里,会以基础服务的形式体呈现。

下一页是Java EE的一组实现,其实就是一系列应用服务器。

这个图来自IBM的竞争分析资料,稍微有一点美化自家产品WebSphere的味道,不过总体来说还算客观。

WebSphere确实在技术上最完整的实现了Java EE标准,在架构上可以支持最大的系统规模,就像图中所示,hundreds of servers,虽然很少见到上百个节点的WebSphere集群,但是WebSphere在架构设计上确实考虑到了这么大的规模。

既然WebSphere这么强,那我们就来打开看下WebSphere。

首先看下WebSphere的架构图,可以看到,Java EE的API作为一系列子系统运行在WebSphere中。

再看一下WebSphere的概念图。

WebSphere的主要概念有:

  • Application Server:即一个应用服务器实例
  • Node:一个操作系统实例,里面可以运行多个Application Server
  • System:可以认为是一个物理机,通过虚拟化,上面可以运行多个操作系统实例,即多个Node
  • Cell:一组执行相似任务的Node,作为一个管理域统一管理

这样的概念层次可以支持大规模的应用服务器集群,考虑的确实比同类产品要全面。

接下来看一下WebSphere如何管理large-scale multi-tiered系统。

只需要通过管理节点上传你的应用EAR,WebSphere就会帮你把应用部署到集群中所有Application Server实例上,可以在单一入口管理整个集群,还可以帮你管理前端的Web Server和后端的数据库。

看起来很美好,不是吗?然而事实上不是这样。

二、揭露Java EE的根本性缺陷

我们来看一下Java EE,或者说Java EE的技术实现 —— 应用服务器的四大问题。

第一个问题,资源隔离

应用服务器实例运行在单一JVM上面,而JVM无法隔离CPU、内存、IO等资源,所以一个应用有问题、或者是应用的某个模块有问题,都会造成应用服务器上的所有应用无法正常运行,有时候还会影响同一操作系统上的其他应用服务器。所以现状往往是,一个操作系统内只运行一个应用服务器,一个应用服务器上只运行一个应用,失去了应用服务器作为基础架构和资源池的意义。

第二个问题,依赖管理

应用服务器一般只能管理三层或者四层系统,对图中这种分布式系统无能为力,还记得最开始讲的Java EE的主攻方向里有distributed系统吗?实际上好像不是这么回事,或者说现在的分布式系统比起当年已经出现了根本性的变化。

第三个问题,与应用紧耦合

如图所示,应用服务器实际上已经变成了应用的一部分,而不是应用的基础设施。

第四个问题,CI/CD不友好

Java EE应用服务器过于庞大,很难纳入CI/CD流程。为什么要把应用服务器纳入CI/CD流程呢?前面说了,应用服务器实际上是应用的一部分,如果不纳入CI/CD流程,就会经常出现“在我这里能用,在你那里就不能用了”等看似琐碎、却影响很大的问题。

CI/CD都做不好,那怎么做DevOps呢!

这里可能有同学会说,可以用Tomcat、Jetty或者Spring Boot嘛。是这样,不过这些已经不是Java EE应用服务器了,使用嵌入式应用服务器是个很好的选择,但是这个时候,应用服务器就完全不具备large-scale、multi-tiered、scalable、distributed系统的管理能力了,后面可以看到,这些能力将由应用容器云提供。

三、从Java EE的角度看应用容器云

上述这些Java EE意图解决却没有解决好的问题,应用容器云都可以很好的解决,所以才有了本次分享的题目:应用容器云,接过Java EE的枪。

使用容器技术配合微服务模式,Java EE的那些“子系统”以进程的方式运行在容器之中,可以做到很好的资源隔离并根据负载进行扩展。应用容器云标配的服务注册能力,可以比Java EE更好的解决当今分布式系统的依赖问题,应用容器和运行环境的耦合性很低,应用容器镜像高内聚而且体积适中,可以很容易的纳入CI/CD流程,Java EE的四大问题迎刃而解。

对比Java EE,应用容器镜像就像是更广义的“WAR”或者“EAR”,如果运行Java应用,镜像里可以包含应用本身、嵌入式应用服务器和应用在操作系统层面的各种依赖。

应用容器云就像是更广义的Java EE Platform,或者说是更广义的“应用服务器”,可以为各种语言和类型的应用提供Runtime并很好的将它们管理起来。

Java EE的“子系统”

在应用容器云中以基础服务的形式提供。

这些基础服务提供和Java EE API相似的能力,并且可以做的更好。

四、对未来的展望

普元的数字化企业云平台正在紧张的开发之中,在此我对我司的产品和应用容器云这一产品形态做个展望。

应用容器云将完成Java EE未竟的事业。

最后我们来看一下Gartner的一个说法。

和我们的感受一样,与基于虚拟化的云平台,主要由运维人员参与的状况完全不同,这一波基于容器的云平台热潮由开发者推动,我个人也非常希望更多的开发者能够参与到这次变革之中。

关于作者:

宋潇男

EAII-企业架构创新研究院 专家委员

现任普元云计算架构师,曾在华为负责云计算产品与解决方案的规划和管理工作。曾负责国家电网第一代云资源管理平台以及中国银联基于OpenStack的金融云的技术方案、架构设计和技术原型工作。

原文发布于微信公众号 - EAWorld(eaworld)

原文发表时间:2016-12-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

面向服务架构(SOA)和企业服务总线(ESB)

学习和研究在企业中实施面向服务架构(SOA),简单回顾SOA和ESB,重点关注微软在SOA领域的相关指导和.NET社区的相关开源的解决方案,和大家一起来探讨如何...

46280
来自专栏华章科技

100%代码覆盖率的悲剧

本文Daniel Lebrero在大数据团队担任IG的技术架构师。拥有超过15年的Java经验和4年的Clojure经验,他现在是函数式编程的大力倡导者。 以下...

7820
来自专栏DevOps时代的专栏

轻量化 Jenkins 最佳实践

前言 今天分享主题主要分成三个部分: 第一部分,Jenkins跟持续交付; 第二部分,Jenkins轻量化思路; 第三部分,Jenkins高可用实践。 一、Je...

1.5K80
来自专栏纯洁的微笑

微服务(Microservice)那点事

摘要: 微服务架构被提出很短的时间内,就被越来越多的开发人员推崇,简单来说其主要的目的是有效的拆分应用,实现敏捷开发和部署 。本分享即尝试介绍微服务架构的一些实...

31360
来自专栏CSDN技术头条

StatsD!次世代系统监控的核心

在互联网业务蒸蒸日上的今时今日,系统架构日渐复杂,随着软件产品和工程团队的变革,许多开源的监控工具应运而生,其中有一些相当出名,比如 Zabbix、Nagios...

30980
来自专栏JackieZheng

开发人员看测试之TDD和BDD

前言:   已经数月没有来社区了,写博客贵在坚持,一旦松懈了,断掉了,就很难再拾起来。但是每每看到自己博客里的博文的浏览量每天都在增加,都在无形当中给了我继续写...

45260
来自专栏Java技术栈

高级Java必看的10本书

1、深入理解Java虚拟机:JVM高级特性与最佳实践 本书共分为五大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的...

413130
来自专栏养码场

万人技术互动 | 微服务实战中,如何对网关(API Gateway)进行技术选型?

继上次Spring For All 社区改版后,大家思量着,如何将大家的Spring 知识得到真正的分享与碰撞,以此同时,也能结交到更多志同道合的技术人?

17210
来自专栏Albert陈凯

2018-10-16 let-netty-easylet-netty-easy

11120
来自专栏Java架构

Java程序员如何面试拿到月薪3万, 这些成功秘籍你知道吗?

前言:想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以...

15680

扫码关注云+社区

领取腾讯云代金券