RPC、ORB、MOM三类中间件比较

标签: rpc orb mom | 发表时间:2013-12-20 18:06 | 作者:sharkbb
出处:http://www.iteye.com

网上漫无目的的爬文档看,发现Oracle一篇《面向消息的中间件 (Message-Oriented Middleware, MOM)

》讲得不错,摘部分内容出来,大家分享,我也留个备份。

 

 中间件可以划分为以下几类:

  • 基于远程过程调用 (Remote Procedure Call, RPC) 的中间件,允许一个应用程序中的过程调用远程应用程序中的过程,就好像它们是本地调用一样。该中间件实现一个查找远程过程的链接机制并使调用方能够以透明方式使用这些过程。以前,这种类型的中间件处理基于过程的程序;现在,它还包括基于对象的组件。

  • 基于对象请求代理 (Object Request Broker, ORB) 的中间件,使应用程序的对象能够在异类网络之间分布和共享。

  • 面向消息的中间件或基于 MOM 的中间件,使分布式应用程序可以通过发送和接收消息来进行通信和交换数据。

所有这些模型都使一个软件组件可以通过网络影响另一个组件的行为。它们的区别在于基于 RPC 和 ORB 的中间件会创建紧密耦合组件系统,而基于 MOM 的系统允许组件进行更松散的耦合。在基于 RPC 或 ORB 的系统中,一个过程调用另一个过程时,必须等待调用的过程返回才能执行其他操作。正如前面所提到的,在这些模型中,中间件在一定程度上充当超级链接程序,在网络上查找被调用过程,并使用网络服务将函数或方法参数传递到被调用过程,然后返回查找结果。

基于 MOM 的系统允许通过异步交换消息来进行通信,如 图 1–2 所示。

图 1–2 基于 MOM 的系统


MOM 系统的元素:使用 API 借助于消息传送提供者交换消息的客户端。该图用文本进行说明。

 

面向消息的中间件使用消息传送提供者来协调消息传送操作。MOM 系统的基本元素是客户端、消息和 MOM 提供者,后者包括 API 和管理工具。MOM 提供者使用不同的体系结构路由和传送消息:它可以使用集中式消息服务器,也可以将路由和传送功能分布在每个客户端上。某些 MOM 产品结合了这两个方法。

使用 MOM 系统,客户端可以进行 API 调用,以便将消息发送到由提供者管理的目的地。该调用会调用提供者服务以路由和传送消息。在发送消息之后,客户端会继续执行其他工作,并确信在接收方客户端检索该消息之前,提供者一直保留该消息。基于消息的模型与提供者的协调耦合在一起,使得创建松散耦合的组件系统成为可能。这样的系统可以继续可靠地工作,即使在有个别组件或连接失败时也不会停机。

由消息传送提供者协调客户端之间的消息传送的另一个优点是:通过添加管理界面,可以监视和调整性能。这样,客户端应用程序便不必关心发送、接收和处理消息之外的任何问题。对于互操作性、可靠性、安全性、可伸缩性和性能之类的问题,应当由管理员通过编码实现 MOM 系统来解决。

至此,我们已经介绍了使用面向消息的中间件连接分布式组件的很多优点。下面将介绍其缺点。缺点之一源自松散耦合本身。在 RPC 系统中,只有在被调用函数完成任务之后,才能返回调用函数。在异步系统中,调用方客户端会继续为接收方装入工作,直到处理装入工作所需的资源耗尽且被调用组件发生故障。当然,可以通过监视性能和调整消息流来尽量减少或避免这些情况,但对于 RPC 系统却不必这样做。有一点很重要,那就是了解每种系统的优缺点。每种系统所适合执行的任务都不同。有时,您需要结合两种系统才能完全获得所需的行为。

图 1–3 显示 MOM 系统如何使两个基于 RPC 的系统进行通信。该图的左侧显示在不同的网络节点上分布客户端、服务器和数据存储库组件以提高性能的应用程序。这是一个折扣机票预定系统:最终用户为使用此服务支付一定的费用,使用该服务可以找到特定目的地和时间的最低费用。数据存储库保存有关注册用户和参与此折扣计划的航空公司的信息。服务器上的逻辑功能根据用户的请求在所参与的航空公司中查询价格、对信息进行排序并向用户提供三个最低报价。该图的右侧展示了基于 RPC 的系统,表示所参与的任一航空公司的机票/预定系统。该图的右侧将为折扣系统所连接到的任意多个航空公司进行复制。对于每个这样的航空公司,数据存储库都将保存有关可用航班的信息(座位、飞行时间和价格)。服务器组件将更新这些信息以响应最终用户输入的数据。航空公司的服务器还订阅 MOM 服务,接收折扣预定系统的信息请求,并返回座位和价格信息。如果用户决定购买 PanWorld 航空公司的折扣机票,则该系统的服务器组件将更新数据存储库中的信息,然后为请求者生成机票或者向折扣服务发送一条消息以生成机票。

图 1–3 结合 RPC 和 MOM 系统


该图显示两个基于 RPC 的系统通过 MOM 系统进行通信。该图用文本进行说明。

 

此示例说明 RPC 和 MOM 系统之间的一些区别。前面已经提到了其中一个区别就是分布式组件耦合的方式。另一个区别是,RPC 系统通常用于分布和连接客户端与服务器组件(在这些组件中,客户端通常是最终用户),而在 MOM 系统中,客户端通常是只能通过消息传送进行交互操作的异构软件组件。

MOM 系统较为严重的问题是 MOM 作为专用产品来实现。如果您的公司依赖于 SuperMOM-X,但最近收购了一家使用 SuperMOM-Y 的公司,会出现什么情况?要解决此问题,需要一个标准的消息传送接口。如果 SuperMOM-X 和 SuperMOM-Y 均实现了此接口,则针对一个系统开发的应用程序也可以运行在另一个系统上。这样的接口应该易于学习,同时提供足够的功能来支持复杂的消息传送应用程序。1998 年推出的 Java 消息服务 (Java Message Service, JMS) 规范就是为了实现这样的目的。下一节将介绍 JMS 的基本功能,并说明包含现有专用 MOM 产品的通用元素的标准是如何制订的。这些标准既允许差异存在,又使得进一步发展成为可能。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [rpc orb mom] 推荐:

RPC、ORB、MOM三类中间件比较

- - 互联网 - ITeye博客
网上漫无目的的爬文档看,发现Oracle一篇《面向消息的中间件 (Message-Oriented Middleware, MOM). 》讲得不错,摘部分内容出来,大家分享,我也留个备份.  中间件可以划分为以下几类:. 基于远程过程调用 (Remote Procedure Call, RPC) 的中间件,允许一个应用程序中的过程调用远程应用程序中的过程,就好像它们是本地调用一样.

什么是ORB

- 肥山 - 增强视觉 | 计算机视觉 增强现实
ORB是是ORiented Brief的简称. Ethan Rublee and Vincent Rabaud and Kurt Konolige and Gary Bradski, ORB: an efficient alternative to SIFT or SURF, ICCV 2011. 没有加上链接是因为作者确实还没有放出论文,不过OpenCV2.3RC中已经有了实现,WillowGarage有一个talk也提到了这个算法,因此我不揣浅陋,在这里总结一下.

Hadoop RPC机制

- - 企业架构 - ITeye博客
RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. Hadoop底层的交互都是通过 rpc进行的. 例如:datanode和namenode 、tasktracker和jobtracker、secondary namenode和namenode之间的通信都是通过rpc实现的.

JAVA RPC 通讯框架

- - 经验沉淀 知识结晶
Bison 是一个JAVA 程间的通信框架,基于apache mina 实现,对mina进行了byteBuffer 缓冲区重用以及半包出处时减少拷贝. 客户端(bison-client) 功能点. 2 支持高用性:高可用的一个基本原则,可以接受快速的失败,但不能接受长时间的等待. Githup地址:https://github.com/gavenpeng/Bison.

Avro RPC 对比测试

- - 行业应用 - ITeye博客
J2EE平台常采用多层分布式的架构体系. 分布式服务节点之间需要通讯和交互(业务节点和资源节点之间),服务端和客户端需要交互(终端客户端需要调用服务端的远程服务,客户端有C实现的,也有Java等其他语言实现的). 因此基础平台需要提供一个稳定、高效的、可伸缩的RPC服务性组件. 稳定,高性能;作为一个基础性的骨架组件,高可用性和高性能是必备的;传输层希望是面向连接的TCP通信.

RPC原理详解 - 永志

- - 博客园_首页
RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性.  为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用. 下面我们将具体细化 stub 结构的实现. 客户方等待调用执行完成并返回结果. 客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果.

zmq-rpc:基于zeromq网络层编写的protobuf RPC框架

- Shengbin - codedump
阅读过zmq的代码之后,感觉这个网络层是我目前见过最高效的–线程之间使用lockfree的消息队列保存消息,可以启动多个I/O线程分担压力等等特性.于是决定基于它写一个protobuf RPC的框架.. 另外,这里使用的protobuf是旧版本2.3.0,新版本2.4.1的生成的RPC service接口跟原来不太一致,暂时还没有去研究它.BTW,升级版本之后导致原来的接口发生变化这是一个很操蛋的事情..

【RPC框架HttpInvoker一】HttpInvoker:Spring自带RPC框架

- - 开源软件 - ITeye博客
HttpInvoker是Spring原生的RPC调用框架,HttpInvoker同Burlap和Hessian一样,提供了一致的服务Exporter以及客户端的服务代理工厂Bean,这篇文章主要是复制粘贴了Hessian与Spring集成一文,. 【RPC框架Hessian四】Hessian与Spring集成.

集成libevent,google protobuf的RPC框架

- goodman - C++博客-那谁的技术博客
chenshuo的evproto同样也是集成libevent与google protobuf的RPC框架,不过在对libevent的使用上,这里的做法与他不尽相同:. 1) 他使用了libevent自带的RPC功能, 而这里只使用到libevent对网络I/O进行的封装的最基本的功能.. eventrpc项目目前是avidya下的一个子项目,avidya项目的定位是实现一些分布式的玩具系统(比如google已经公开论文的chubby,mapreduce,GFS等),也许以后不一定能被用上,但是也要实践做一把.由于有一个好用的RPC框架是做分布式的必需品,所有首先实现eventrpc这个子项目了,以后也许还会实现其他语言的版本,如python,java..

NFS-RPC框架优化过程

- EricSheng - BlueDavy之技术blog
NFS-RPC框架从编写之初,到现在为止(应该还会有些提升,不过估计不大),每秒支撑的请求数上升了好几倍,测试结果的演变为:. 以上测试结果为在100并发、100 request byte、100 response byte以及单连接下的背景下得出的,在这篇blog中来分享下这个框架所做的一些优化动作,希望能给编写rpc框架或使用mina/netty/grizzly的同学们一点点帮助,也希望得到高手们更多的指点.