AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

Java 应用服务器前途堪忧?

  • 2014-05-21
  • 本文字数:2055 字

    阅读完需:约 7 分钟

Java 应用服务器曾经是企业级中间件市场中重要的组成部分,但是随着轻量级微服务理念的发展以及云计算的快速普及,Java 应用服务器正在遭遇前所未有的挑战。近日,来自 adesso AG 技术咨询委员会的 Eberhard Wolff分享了一份 slide ,提出了应用服务器已死的观点,Eberhard 此前曾经在 SpringSource 担任首席技术专家,而 RedHat 的 Mark Little 也在博客上撰文,阐述了未来中间件平台该如何发展。

在 Eberhard Wolff 的 slide 中,首先分析了传统的应用服务器所面临的问题,然后介绍了新的技术发展趋势,如持续交付和微服务,对应用服务器所带来的冲击。在 Eberhard Wolff 看来,传统应用服务器的作用主要包括以下四点:

  • 多个应用的容器;
  • 基础设施;
  • 部署;
  • 监控。

但是,在这四个方面,应用服务器在提供强大支撑功能的同时,也有许多的不足。

具体来讲,如果在服务器中部署多个应用,那么这些应用会通过 ClassLoader 机制实现隔离,但这还是不够的,而且很容易导致难以解决的问题。因为操作系统是以进程为单位进行资源分配的,所以应用服务器无法实现针对应用进行内存、CPU 以及文件系统的隔离。应用之间在运行期还是会互相影响,除非 Java 的虚拟机变成操作系统,否则难以实现完美的隔离。所以,理想的方案是使应用服务器作为单个应用的容器,而不是同时运行多个应用。

在基础设施方面,应用服务器提供了两阶段提交、网络 / 线程以及 API 等功能。不过,作者认为两阶段提交会降低应用的效率,并且不能保证一定会成功。在分布式系统中,应该限制使用,因为会影响到可扩展性。应用服务器一般还会提供网络以及线程的基础设施,支持线程池和连接池,不过这些可以在应用内部来实现。作为基础设施所提供的 API,如 EJB、CDI、JPA 以及 JSF 等,在带来便利的同时,往往会导致与应用服务器的版本关联在一起,应用会依赖于应用服务器,在新的服务器推出之前,我们无法使用新的 API,除此之外,还可能会出现版本的冲突。应用有时还会将其依赖的库置于应用服务器之中,这样的话,就形成了应用与服务器之间的循环依赖,如下图所示。可以说服务器变成了应用的一部分。

在部署方面,应用服务器支持多种部署格式,如 WAR、EAR 以及 JAR 等等,但是这些格式都无法定义应用的外部依赖,如应用服务器的版本、数据库等。通常在这个过程中,会使用到 deb 或 RPM 这样完全不同的工具。应用服务器的配置甚至比应用本身的配置还复杂,相对于使用 Puppet/Chef 编写的自动化脚本,应用服务器的配置过于繁琐。对于持续交付来讲,我们必须要有大量的部署过程,因此需要简化部署,并且要使用更为通用的工具。

应用服务器的监控功能一般是通过 JMX 提供的,可以使用 SNMP 等协议进行集成,但是问题同样在于完全不同的工具链(tool chain)。在这个方面出现了一些新的技术和趋势,如 Logs+Logstash/Kibana 或 Splunk、基于 REST 或编写脚本实现监控的功能。

作者稍后提到了微服务的理念,基于这种理念所构建的软件是由服务组成的,服务会具有一定的业务含义,服务的(重)部署可以独立进行,而不是作为一个庞大的整体来进行,服务之间可以通过像 REST 这样的方式来进行交互。服务可能会有不同的非功能性需求,所以会需要不同的基础设施,如异步、传统的 Servlet、Batches、Map/Reduce 等,而应用服务器只能提供一种基础设施。

基于这种模式,应用能够以 JAR 文件的方式进行创建,在这个 JAR 中包含一个 Main 类,我们可以自定义基础设施,如 HTTP 服务器或 Batch。在监控和部署方面,它依赖于标准的部署和监控工具,提供基于 REST 的监控 URL,并且会分析评估日志文件。这种方式能够带来一系列的好处,因为它只是一个 JAR 包,所以更易于部署,我们可以在 IDE 中调试运行,验收测试会更为容易,并且可以确保基础设施与应用是兼容的。作者最后提到了相关的技术,如 Spring Boot Dropwizard

其实,关于应用服务器已死的观点,在云理念刚刚普及的时代就曾经出现过,如来自 Forrester 的首席分析师 Mike Gualtieri 在 2011 年就曾经撰文表示应用服务器的泡沫会破灭并建议不要再将金钱花费在 WebLogic、WebSphere 以及 JBoss Application Servers 上面了。当时,RedHat 的 Mark Little 曾经专门就这种观点进行过反驳。最近,Mark Little 恰好写了一篇文章阐述中间件平台的未来趋势,在这篇文章中,作者认为我们需要新的框架和模型来构建应用,可适应的中间件平台应该具有的特性包括:

  • 能适应环境的变化,自动监控和管理;
  • 灵活的线程模型;
  • 所有的应用和服务可以根据需要动态添加;
  • 组件库;
  • 跟踪对象和服务的依赖,以便于迁移时,相关的服务和对象能够保持兼容。

Mark Little 和 Eberhard Wolff 都提到了新的编程和部署模式, Parallel Universe 公司的博客上,最近也连续发表了三篇文章介绍 Java 的发展趋势,其中有一篇专门介绍现代 Java Web 应用的开发与部署,作者也提及了这种新的部署理念。

现在就说应用服务器已死可能为时尚早,但是服务化、分布式是应用的发展方向,这会对传统应用服务器的部署、监控等功能提出挑战。关于这一问题,如果您有新的见解,欢迎与我们分享。

2014-05-21 21:1911622

评论

发布
暂无评论
发现更多内容

filecoin全网有效算力突破10EiB?Filecoin挖矿现在还有机会入场吗?

区块链 分布式存储 IPFS filecoin挖矿 filecoin矿机

天津赛誉食品有限公司与小王庄黄金梨携手 助推文旅产业化联盟销售

InfoQ 天津

Paxos理论介绍(3): Master选举

OpenIM

托管班用什么管理系统?染书CRMA,自带营销工具提升续班率

亿欧之

在线考试系统有哪些?快考题|企考云,高频互动的培训功能免费用

亿欧之

ipfs最新官网通知?ipfs是一场技术革命?

区块链 分布式存储 IPFS Filecoin ipfs挖矿

有道词典 Flutter 架构与应用

有道技术团队

大前端 客户端 网易有道

如何创建网上试卷?快考题|企考云,专项练习降低人工阅卷失误率

亿欧之

从芯片到云全链路高效设计 一文了解YoC基础软件平台

Roy夹馍

物联网 risc-v 嵌入式开发

springboot elementui vue商城微信小程序源码(毕设)

清风

小程序 Vue 毕业设计 毕设

1-7中HashMap死循环分析,透彻解析

欢喜学安卓

Java 程序员 后端

2020全网最新SQL优化面试专题及答案,一步搞定你疑惑的数据结构与算法系列

欢喜学安卓

Java 程序员 后端

RVB2601开发板快速上手教程

Roy夹馍

MCU risc-v 嵌入式开发

数字人民币与智能合约

CECBC

2020年五面蚂蚁,分布式架构+RPC+kafka+多线程

欢喜学安卓

Java 程序员 后端

2021年1月8号,这些新技术你们都知道吗

欢喜学安卓

Java 程序员 后端

30G上亿数据的超大文件,如何快速导入生产环境,全网疯传

Geek_f90455

Java 程序员 后端

人工智能是下一个“新生代农民工”吗?

澳鹏Appen

人工智能 大数据 AI 数据标注 训练数据

解析金融服务如何在区块链中建立信任?

CECBC

财经大课:看懂价格信号

石云升

财经思维 9月日更

2021 Java开发 最全笔记 建议收藏!,搞定kafka看这一篇就够了

欢喜学安卓

Java 程序员 后端

如何建立微信考试?快考题|企考云,轻松拥有HR在线测评系统

亿欧之

EMQ X VS RabbitMQ:两大消息服务器 MQTT 性能对比全解(上)

EMQ映云科技

RabbitMQ 物联网 IoT mqtt emq

平头哥玄铁CPU调试系统介绍

Roy夹馍

cpu risc-v 嵌入式开发 调试系统

平头哥剑池CDK 更新重磅来袭!三大亮点速看!

Roy夹馍

物联网 risc-v 嵌入式开发 软件模拟

低代码和无代码的区别

低代码小观

低代码 开发工具 无代码 低代码与无代码区别

澳鹏Appen收购Quadrant:移动定位数据业务进一步增强

澳鹏Appen

人工智能 大数据 企业 收购

Vector向量计算技术与SIMD技术的对比

Roy夹馍

cpu IoT 芯片 risc-v

RVB2601开发板用户指南

Roy夹馍

IoT risc-v 嵌入式开发

一款神器自助帮你换背景,超强实时人像扣图算法开源啦!

百度开发者中心

最佳实践 图像处理 开源技术

服务网格在百度核心业务大规模落地实践

百度开发者中心

最佳实践 方法论 Service Mesh 服务网格

Java应用服务器前途堪忧?_Java_张卫滨_InfoQ精选文章