速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

JBoss Messaging 羽翼渐丰 支持集群和透明故障转移

  • 2007-03-31
  • 本文字数:4268 字

    阅读完需:约 14 分钟

数周以前 JBoss(已被 Red Hat 收购)发布了其 JMS 产品的最新版本, JBoss Messaging 1.2 。这个产品的面世已经有些时日了,它产生的目的是为了替代日近迟暮的 JBossMQ。这个发布版最终加入了产品级消息传送系统所需要的集群(Clustering)和透明故障转移(Transparent Failover)功能,因此对于 Red Hat 来说,这是一个非常重要的里程碑。

透明故障转移功能允许在连接的节点出现故障时,透明地将连接或者 Session 转移到另一个正常节点,而无须让应用程序显式地处理连接异常。另一个被加入的特性是分布式消息接收站(Distributed Destinations)。与 JBoss 的某些竞争者不同,JBoss Messaging 逻辑上完全支持在集群内部分布的队列(Queue)和主题(Topic)。

InfoQ 采访了 JBoss Messaging 项目领导人(Ovidiu Feodorov)和技术领导人(Tim Fox),深入了解这个最新发布版以及他们对 JMS 和 SOA 的总体看法。

InfoQ:首先祝贺 1.2.0 版本的发布。请二位向大家简单介绍一下自己,以及你们在 JBoss Messaging 团队里面承担的角色好吗?

Ovidiu:谢谢。我叫 Ovidiu Feodorov,是这个项目的创始人和领导人。自从 2004 年项目诞生以来,我一直在领导这个项目。这些年来,我们项目的代码行数从一无所有增长到接近 30 万行,并且经历了两次主要的通用版本(General Availability)发布。

我们是一个小型团队,到这次采访为止我们只有 3 个人,所以我认为我们并不能算一个合理“分层”的团队,拥有非常明确而不重合的角色和责任。整个团队看起来更像一个起步公司,所有人都在为推动项目前进而努力。因此,我参与代码编写,组织并参加设计会议,撰写文档,回答讨论组中的提问和支持请求,维护 Wiki,进行授课讲解,在必要时进行站上咨询,在用户会议和技术大会上推广 Messaging,做任何这么一个小团队需要我去做的事情。在这些角色中,最让我乐在其中的事情就是保证整个团队紧密配合,专注于我们的“使命”,也就是编写出全球最优秀的消息传送系统。

Tim:我的名字叫做 Tim Fox,加入 JBoss 约有 18 个月。在此期间,我把所有的精力都投入到了 Messaging 上。在加入 JBoss 以前,我是开源 JAIN SLEE 1.0(Telco 应用服务器)第一个实现的共同作者之一。目前我是项目的技术领导人,就是说我的责任是引导项目技术方向。本质上说,这意味着我需要去肩负审视技术实质的技术架构、设计和其他问题的责任。

InfoQ:你们认为这个发布版和以前的 JBoss Messaging 在可靠性和性能方面相比感觉如何?

Tim:大部分 1.2 版 codebase 是基于 1.0 版 codebase 开发的,因此我们是在一个已经于全世界许多生产系统中广泛使用的基础架构之上进行构建的。对于可靠性,我们一贯采取十分谨慎的态度,但我们在 JBM 1.2 中与 JBoss Transactions 的整合更进了一步,所以现在使用 JBM 进行任何 XA 事务性操作都会具有很高的持久性。也就是说,我们着重实现了 ACID 的“D” 属性(Durability,持久性)。

在性能方面,我们使用一个性能测试框架,它可以对所有与 JMS 1.1 兼容的系统进行测试。结果表明,JBM 的性能几乎在每一个方面都将 JBossMQ 远远甩在身后。

Ovidiu:1.2.0 GA 是“带集群的版本”。1.0.0(以及随后的 1.0.x 系列)是一个完全和 JMS 1.1 兼容、不支持集群的消息代理,而 1.2 超越了 JMS 规范,并加入诸如容错和负载均衡等企业级能力,并保持其完整的 JMS 1.1 兼容性。

新的 1.2 消息传送代理包含完全分布式的消息接收站、动态负载均衡和透明故障转移功能、零单点故障和零单点瓶颈、完善且完全可配置的消息过期处理,以及 XA 事务恢复等机制。

此外,1.2 提供对可插拔传输层(Pluggable Transports)支持,也就是 HTTP 和 HTTPS。从技术角度准确说来,其实在 1.0.x 系列已经这项功能已经存在。不过直到 1.2 我们才完全激活和测试了 HTTP 与 HTTPS 支持,还加入一个新的性能“Bisocket”传输层来简化管理,并使我们处理防火墙更加容易。

回顾起来,现在我认为这个发布版更应定为 2.0,因为我们已经为它引入了很多新的功能。

InfoQ:你们认为这个发布版和以前的 JBoss Messaging 在可靠性和性能方面相比感觉如何?

Ovidiu:这个发布版其中一个主要改进是,它支持横向扩展性:我们可以无缝地为集群加入更多节点,使得消息的处理拓展到更多物理节点之上。在和单节点性能相关的部分,最初的 1.0 代码中进行过几次重构。我们从根本上改变了包含主要消息传递路径的核心通道机制。尽管 1.2.0 在性能方面可圈可点,它仍然存在许多优化的余地。这也是后续的 1.2.1、1 .2.2、2.0、3.0 等等所要做到的事情。

对于我们的性能框架,还有我们计划用于追踪跨版本性能度量改进的“性能测试”概念,我们相当引以为豪。功能测试所采用的是同一种方式,可以告诉你 API 的实现存在问题。如果我们破坏了实现,使它的性能低于比原来版本,那么性能测试将触发警钟。如果你希望了解我们测试框架背后的概念以及如何使用它,请看这里

在可靠性方面,这个“集群”版本 和1.0.x 系列存在根本性区别。对于1.0.x 代理,故障对于管理员来说意味着他必须重启服务器实例,然后客户端代码监测故障,查找新的连接工厂(Connection Factory),重新建立连接等等。在1.2 里就不同了,故障被透明地处理,客户端甚至觉察不到连接发生故障(除非客户端注册一个特殊监听器)并且被转移到另外一个备用节点上。

InfoQ:提到 JMS 和 JBoss(或者应该叫 Red Hat?),大多数人会想到 JBossMQ。尽管它很流行,但存在一些广为人知的缺陷,因此许多人不得不专向其它方案。这是不是 JBoss Messaging 诞生的原因?

Ovidiu:是的。回到 2004 年 4 月,JBoss Messaging 诞生以前,我在奥提汀参见了一个设计会议。会上我、JBoss 首席科学家 Adrian Brock、JGroup 创始人 Bela Ban 和 Ivelin Ivanov 讨论了“消息传送的局势”,并试图确定到底是为现有的 JBossMQ 打补丁,还是将其弃之一隅,并从头打造一个全新的实现。当时我在 JBoss 还算新人,“拍照设计(design by photography)”的火候还不到家,所以那次会议我没有留下记录。不过我可以让你看看另外一些好东西——2004 年 12 月在奥斯汀拍摄的设计图表,当时和 Adrian Brock 一起,我们对新设计进行了第一次评审。从以下地址可以找到这些照片: http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossMessagingDesingMeeting20041203 。有兴趣的人可以通过这个地址了解到关于 JBoss Messaging 设计会议颇为完整的历史记录: http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossMessagingDevelopmentMeetings

回到原来 JBossMQ 对 Messaging 的问题上来,我们总结出,JBossMQ 存在两个最基本的局限性。其中之一就是,高可用性对于 JBossMQ 只是事后追想。SynderMQ 是 JBossMQ 所基于开源项目,本质上这是一个不支持集群的代理。另外一个局限与非集群代理本身的线程模型和总体设计有关,这也导致在某型高负载使用场景中的性能缺陷。

那时候,我们认为解决这些根本性问题或者给它们打补丁,要比一切从头开始麻烦得多,正是这个决定导致了 JBoss Messaging 的诞生。现在,整整三年过去了,我们经历了两次主要的 Messaging 发布。到底这个决定正确与否,还要由我们的用户来检验。

InfoQ:JBoss Messaging 和 JBossMQ 相比如何?

Ovidiu:JBoss Messaging 是一个从头开始设计的 JMS 代理,在设计之初就考虑了企业特性。最开始我们是基于这样一个假设来设计 Messaging 的:它是一个完全支持集群、负载平衡且高度有效的代理。如我前面所说,JBossMQ 从一开始就是个不支持集群的 JMS 代理,它的 HA 功能实际上是以 HA 单例机制(HA Singleton Mechanism)的形式“拧上”的。

一个 JBoss Messaging 接收站(不管是队列还是主题)可以存在于不同的地址空间,散步到多个虚拟机和物理主机上,提供无缝负载分布和透明故障转移,而所有的 JBossMQ 接收站都被装载同一个 VM 上。如果这个 VM 出现故障,HA 单例机制会在集群的另一个节点启动一个新的 JBossMQ 实例(每个集群只有一个),并重新在那个节点上重新创建所有接收站。这样客户端享受不到透明故障转移所带来的好处,它们必须自己侦测故障,然后重新建立连接。

从本质而言,JBossMQ 是一个“单点故障”,但由于代理可以从故障恢复而在一定程度得到缓和,同时它也是一个“单点瓶颈”,而 JBoss Messaging 则没有这些局限性。

InfoQ:你们认为 JMS 与 SOA 有多大的联系?特别在人们看起来更愿意选择 Web 服务作为部署平台的情况下?

Ovidiu:MOM(Message Oriented Middleware,面向消息的中间件)作为整合松耦合系统的方式,问世已经有很长一段时间了。从历史角度上说,存在文件传输、数据库、RPC 系统和 MOM 几种方式。近年来,Web 服务出现,加入了这支队伍。所有这些方案都有它们的优势和不足,要决定使用它们中一种或者几种方案的组合,常常需要周密细致的权衡。

在标准级别的互操作性,是 Web 服务所具备但消息传送系统所缺乏的。作为标准,JMS 所欠缺的是对互操作性的考虑。JMS 规范尚未规定到消息传输格式这个程度,因此,每个供应商可以自由地引入自定义格式,并按照自己认为最合适的方式来优化实现。这当然不是说我们不能去编写桥接程序,但问题在于它们不能现拿现用。尽管如此,在这个地平线上还存在一丝曙光。AMQP,一个由 Red Hat 和其它公司一起推动的全新消息传送协议,正是面向互操作性问题而来的。让我们拭目以待吧。

这就是说,Web 服务和 MOM 都有各自最为合适的使用场合和具体的应用领域。

InfoQ:你们刚才提到 Red Hat 参与的另一个消息传送协议,高级消息队列协议(Advanced Message Queuing Protocol,AMQP)。它和 JBoss Messaging 之间存不存在一定重合呢?

Ovidiu:JBoss Messaging 是消息传送代理的一个实现,而 AMPQ 是规范。如果哪个实现具有重要意义,那它最终总是会被扩展成规范的。在仔细考察了 AMQP 规范之后,我只能这么评价:规范引入的服务端模型和 JBoss Messaging 内部架构完全吻合。我们差不多可以这么说,JBoss Messaging 打算在 AMQP 最终定案之后(目前版本号还是 0.9)将其实现,并能和其它 AMQP 实现进行良好的互操作。

Tim:AMQP 的确是个非常有意思的新协议。毫无疑问,我们将不断关注它的进展。我相信它的根本原则是值得信赖的,在目前 JMS 解决方案间尚不存在传输格式兼容性的问题上尤为如此。目前规范仍然处于完善阶段,尚未涵盖 XA 事务,也缺乏 JMS 和 AMQP 之间的明确映射,来确保在 AMQP 基础上开发的 JMS 解决方案间的互操作性。但我相信这些问题都在解决之中。我认为,AMQP 进入黄金期还为时尚早,但几乎可以肯定,大约一年之后它将大放异彩。

2007-03-31 23:301406
用户头像

发布了 117 篇内容, 共 15.9 次阅读, 收获喜欢 0 次。

关注

评论

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

寻找AI时代的关键拼图,从美国橡树岭国家实验室读懂AI存力信标

脑极体

存储

Koordinator 协同 containerd NRI 增强容器 QoS,提升应用性能

阿里巴巴云原生

阿里云 云原生 Koordinator

《云原生 AI 工程化实践训练营-先锋系列》开营啦!

阿里巴巴云原生

阿里云 AI 云原生

云原生场景下高可用架构的最佳实践

阿里巴巴云原生

阿里云 高可用 云原生

阿尔比特(ARBT)DAPP质押挖矿系统开发丨源码技术搭建

l8l259l3365

dapp丨defi丨nft丨lp单双币流动性挖矿系统开发

V\TG【ch3nguang】

代码标准之信达雅

agnostic

代码质量

Linux该如何学习,给你支招

梦笔生花

工赋开发者社区 | 工业机器人产业链及主要配套厂商

工赋开发者社区

马蹄链MATIC系统开发代码Polygon智能合约质押流动性挖矿

V\TG【ch3nguang】

基于 Kubernetes 的 Serverless PaaS 稳定性建设万字总结

阿里巴巴云原生

阿里云 Kubernetes 云原生

阿里云云原生开放日:云原生火力全开| KubeCon 热点速递 DAY1

阿里巴巴云原生

阿里云 Kubernetes 容器 云原生

公平,而非平等

俞凡

管理 组织架构

工赋开发者社区 | 精益与MES融合下的数字化转型

工赋开发者社区

深势科技基于 Serverless 容器为科研人员打造高效的开发平台

阿里巴巴云原生

阿里云 Kubernetes 云原生 Kubernetes Serverless

蓝易云:T-Pot安装教程。

百度搜索:蓝易云

云计算 Linux 云服务器 Pot honeypot

【有奖体验】轻点鼠标,让古籍数字化“重生”

阿里巴巴云原生

阿里云 云原生 函数计算

CeresDAO借贷合约/DAO质押挖矿系统开发技术丨python技术语言

V\TG【ch3nguang】

目前最流行的DeFi流动性挖矿系统开发技术说明

V\TG【ch3nguang】

Bridge 2024 (br2024) for Mac v14.0.0.102完整激活版

mac

苹果mac Windows软件 Bridge 2024

从VSCode迁移到Neovim的体验

SkyFire

vim vscode neovim

阿里云在云原生领域喜获多项 OSCAR 开源尖峰案例奖

阿里巴巴云原生

阿里云 开源 云原生

以生产力为中心:超宽带的跨时代之舞

脑极体

超宽带

阿里云易立:以云原生之力,实现大模型时代基础设施能力跃升 | KubeCon 主论坛分享

阿里巴巴云原生

阿里云 Kubernetes 云原生 KubeCON

蓝易云:Containerd+Kubernetes搭建k8s集群教程。

百度搜索:蓝易云

云计算 Linux Kubernetes 云服务器 Containerd

Downie 4 for Mac(最好用的视频下载软件) 4.6.31中文激活版

mac

Downie4 苹果mac Windows软件 网站视频下载

CSS小技巧之单标签loader

南城FE

CSS css3 前端 Loader

JBoss Messaging羽翼渐丰 支持集群和透明故障转移_Java_Floyd Marinescu_InfoQ精选文章