写点什么

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:1911742

评论

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

Autogen4j: the Java version of Microsoft AutoGen

HamaWhite

agent openai LLM

阿里云 ARMS 应用监控重磅支持 Java 21

阿里巴巴云原生

Java 阿里云 云原生

云工作流 CloudFlow 重磅发布,流程式开发让云上应用构建更简单

阿里巴巴云原生

阿里云 云原生

慢调用链诊断利器-ARMS 代码热点

阿里巴巴云原生

阿里云 云原生 可观测

全球首款容器计算产品重磅发布,激活上云用云新范式

阿里巴巴云原生

阿里云 云原生 ACS

拼多多新店玩直通车(拼多多新店直通车拉爆流量)

tbapi

拼多多 拼多多商品详情数据接口 拼多多直通车 拼多多API

拼多多数据宝贝(掌握拼多多数据分析方法)

tbapi

拼多多 拼多多商品详情接口 拼多多API接口 拼多多商品采集方法

C 语言中布尔值的用法和案例解析

小万哥

程序人生 编程语言 软件工程 C/C++ 后端开发

测试开发 | PyTorch:深度学习的艺术之选

测吧(北京)科技有限公司

测试

一款外置MOS开关降压型 LED 恒流控制器应用方案

芯动大师

Sobit:将BRC20资产桥接到Solana ,加速铭文市场的火热

石头财经

面对大促场景来临,如何从容进行性能测试

阿里巴巴云原生

阿里云 云原生 压测

通过 Higress Wasm 插件 3 倍性能实现 Spring-cloud-gateway 功能

阿里巴巴云原生

阿里云 云原生

作息时间提醒软件推荐:MacBreakZ 5免激活最新版

胖墩儿不胖y

Mac软件 休息提醒工具

质量核心

玄兴梦影

质量 质量指标

软件开发

Geek_8da502

Koordinator 支持 K8s 与 YARN 混部,小红书在离线混部实践分享

阿里巴巴云原生

阿里云 开源 云原生

测试开发 | TensorFlow:深度学习的引擎

测吧(北京)科技有限公司

测试

Sobit:将BRC20资产桥接到Solana ,加速铭文市场的火热

鳄鱼视界

零代码助力服装行业数字化转型

明道云

Sobit:将BRC20资产桥接到Solana ,加速铭文市场的火热

BlockChain先知

Hago 的 Spark on ACK 实践

阿里巴巴云原生

阿里云 云原生

Confluent 与阿里云将携手拓展亚太市场,提供消息流平台服务

阿里巴巴云原生

阿里云 云原生

淘宝API接口:助力电商应用快速开发

tbapi

淘宝商品详情数据接口 淘宝商品列表数据接口 淘宝API 关键词搜索淘宝商品列表 关键词搜索淘宝商品接口

测试开发 | 自然语言处理基础:从文本到智能

测吧(北京)科技有限公司

测试

测试开发 | 命名实体识别(NER):解锁文本中的信息宝藏

测吧(北京)科技有限公司

测试

EDAS 让 Spring Cloud Gateway 生产可用的二三策

阿里巴巴云原生

阿里云 云原生 EDAS

SAE 2.0,让容器化应用开发更简单

阿里巴巴云原生

阿里云 Serverless 云原生

测试开发 | 词嵌入(Word Embeddings):赋予语言以向量的魔力

测吧(北京)科技有限公司

测试

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