文档章节

RPC和异步消息传送

柳哥
 柳哥
发布于 2014/03/31 14:30
字数 1128
阅读 1823
收藏 7
JMS

RPC(Remote Procedure Call,远程过程调用)是通常用于描述分布式计算模型的术语,现在 Java 和 .NET这两种平台都在使用这个术语。对于许多应用程序来说,基于RPC的技术已经是,并且将来继续是切实可行的解决办法。不过,企业消息传送模型在特定类型的分布式应用程序中表现更为出色。下面我们将讨论每种模型的优缺点。

紧密耦合的RPC

在调用一个远程过程时,调用者将被阻塞,直到该过程完成并将控制权返回给调用者。从开发者的角度看,这种同步模型使得该系统就好像运行在一个进程当中。这些工作会依次完成,同时确保以预定顺序完成。RPC同步的本质特性,将客户端和服务端二者紧密耦合在一起。因为客户端已被阻塞,所以它无法继续进行工作,直到服务器做出响应为止。RPC紧密耦合的本质特性导致出现了相互高度依赖的系统,其中一个系统的失效会对其它系统产生立竿见影的弱化影响。虽然RPC在许多场景中表现优秀,但是在系统对系统(system-to-system)的处理过程当中,它的同步、紧耦合等本质特性却是一个严重的缺陷,因为“系统对系统”有很多垂直的应用程序集成在一起。在系统对系统场景中,垂直系统之间的通信线路不仅数量众多,而且方向也是错综复杂的。如图:

让我们设想一下使用紧密耦合的RPC机制实现这种基础设施所面临的挑战。这些系统之间的连接管理是多对多的问题。当你向混合系统中加入另一个应用程序时,你不得不回过头来让其余所有的系统都知道它,而且,这些系统也会崩溃。正是RPC系统的同步、紧密耦合、相互依赖等本质特性,使得子系统中出现的故障最终会导致整个系统的失效。就像在“系统对系统”场景中那样,当RPC紧密耦合的本质特性不再适用时,消息传送机制为此提供了另一种选择方案。

企业消息传送

消息传送机制的一个基本思想就是:规定应用程序之间的通信应该采用异步方式。将各部分连接在一起的代码会假定这是一条单向消息,它不需要立即从另一个应用程序那里得到响应。换句话说,也就是没有出现阻塞现象。一旦一条消息被发出,消息传送客户端就能够转向其它任务,它不必等待对这条消息的响应。这是RPC和异步消息传送之间的主要区别,而且,它对于理解消息传送系统的优点来说至关重要。

在一个异步消息传送系统当中,每个子系统都不存在和其他系统的耦合。如下图,它们通过消息传送服务器进行通信,因此,某个子系统出现故障,并不会妨碍其它子系统的运行。

在网络化系统中会出现局部故障,这是一个不可避免的事实。其中的一个系统可能会在其连续运行期间的某个时刻发生不可预测的故障,或者需要停机。这种现象可能会由于内部系统和合作系统地理上的分散而被进一步放大。考虑到这个因素,JMS提供了保证传送(guaranteed delivery)方式它可以确保即便发生了局部故障,预定消费者最终也会接收到这条消息保证传送使用的是一种“保存并转发(store-and-forward)”的机制,这就意味着,如果预定消费者当前并不可用,底层消息服务器会将输入的消息写到一个持久存储器之中。随后,当该接收应用程序变为可用时,“保存并转发”机制会把预定消费者在不可用时错过的所有消息传送给它们。

© 著作权归作者所有

柳哥
粉丝 207
博文 405
码字总数 347782
作品 0
杭州
技术主管
私信 提问
加载中

评论(2)

柳哥
柳哥 博主

引用来自“alwaysmile”的评论

截图的是什么书呢?
java消息服务
小楼听雨中
小楼听雨中
截图的是什么书呢?
《BlazeDS开发指南》学习笔记(一):概述

一、概述    BlazeDS是Adobe公司发布的免费开源产品,是该公司另一个收费产品LCDS的简化开源版本,BlazeDS使用Java语言在服务端提供如下功能:   1、提供客户端(Flex、AIR)通过AMF协议...

序写人生
2010/05/31
1K
0
Hadoop实战-中高级部分 之 Hadoop RPC

Hadoop RestFul Hadoop HDFS原理1 Hadoop HDFS原理2 Hadoop作业调优参数调整及原理 Hadoop HA Hadoop MapReduce高级编程 Hadoop IO Hadoop MapReduce工作原理 Hadoop 管理 Hadoop 集群安装 ...

2k10
2015/03/23
63
0
远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)

RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集,通常形成“classname.methodname”形式...

edeis2011
2016/03/25
153
0
远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)

RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集,通常形成“classname.methodname”形式...

八戒_o
2016/02/16
241
1
基于hessian和netty的RPC框架设计和实现

一:概述 对系统进行服务化改造,或者构建一个分布式系统,RPC是核心的组件,目前主流的RPC框架有hessianthrift avro等,如果不考虑跨语言的话thrift avro使用起来稍显复杂,要写IDL序列化配置...

wangjie2016
2016/08/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

oracle ORA-39700: database must be opened with UPGRADE option

ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00704: bootstrap process failure ORA-39700: database must be opened with UPGRADE option 进程 ID: 3650 会话 ID: 29......

Tank_shu
今天
1
0
分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
聊聊DubboDefaultPropertiesEnvironmentPostProcessor

序 本文主要研究一下DubboDefaultPropertiesEnvironmentPostProcessor DubboDefaultPropertiesEnvironmentPostProcessor dubbo-spring-boot-project-2.7.3/dubbo-spring-boot-compatible/au......

go4it
昨天
1
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部