什么是间接通讯?
间接通讯被定义为在分布式系统中实体经过中介者进行通讯,没有发送者和接收者之间的耦合。编程
间接通讯具备两个特性:
(1)空间解耦:发送者不须要知道接收者是谁。
(2)时间解耦:发送者和接收者能够有独立的生命周期。安全
间接通讯的范型
1.组通讯分布式
(1)概念
组通讯实现了组播通讯,经过一个操做,消息被发送到组内的全部成员,与系统中的全部成员通讯。组通讯的一个重要特征就是一个进程事项发起一个组播操做,而不是发起多个发送操做到每一个进程。spa
(2)分类
a.封闭组和开放组
封闭组:对封闭组的组成员来讲,只有组成员才能组播给它。
开发组:对开放组的组成员来讲,组外的成员也能组播给它。设计
b.重叠组和非重叠组
重叠组:实体(对象或进程)能够成为多个组的成员。
非重叠组:实体(对象或进程)至多只能属于一个组。3d
(3)实现对象
JGroups等。blog
2.发布-订阅系统生命周期
(1)概念队列
在发布-订阅系统中,发布者发布事件到事件服务中,订阅者经过订阅表示对特定事件感兴趣。发布-订阅系统的任务是把订阅和发布的事件匹配,保证事件通知正确传递。一个给定的事件会传递给多个订阅者,因此发布-订阅系统是一个一对多的通讯范型。
(2)订阅模型
a.基于渠道
发布者发布事件到命名的渠道,订阅者订阅其中一个已命名的渠道,并接收全部发送到那个渠道的事件。
b.基于主题
每一个事件通知能够定义多个主题,订阅者根据本身感兴趣的主题订阅。
c.基于内容
基于内容的订阅是基于主题订阅的通常化。
d.基于类型
在基于对象的方法中,对象有指定的类型。在基于类型的方法中,订阅根据事件类型来定义,根据给定的事件类型或者子类型来定义。
(3)发布-订阅系统的体系结构
3.消息队列
(1)概念
生产者进程发送消息到特定队列,消费者进程从队列中接收消息。有如下三种接收方式:
a.堵塞接收:保持堵塞直到有合适的消息可用。
b.非堵塞接收(轮询):检查队列的标志,返回可用的消息,或是一个不可用的指示。
c.通知操做:当队列中有可用的消息时,向消费者发送事件通知。
(2)JMS(Java消息服务)
4.分布式共享内存
(1)概念
分布式共享内存(DSM)是一种抽象,用于给不共享内存的物理机共享数据。分布式共享内存使得不一样计算机的进程能访问不一样进程的数据,就像访问本身进程的数据同样。
(2)与消息传递的比较
比较内容 | 分布式共享内存 | 消息传递 |
---|---|---|
序列化 | 相关进程直接共享变量,不须要序列化。 | 变量在发送进程序列化,在接收进程反序列化。 |
安全性 | 共享分布式内存的进程可能错误的变动数据而致使其余进程失效。 | 支持消息传递的进程由于拥有各自的私有地址空间而获得保护。 |
持久性 | 经过DSM通讯的进程能够在非重叠生命周期进行。 | 经过消息传递的进程须要在同一时刻进行消息传递。 |
同步 | 经过共享内存编程的常规组成成分,例如锁和信号量实现的。 | 经过消息原语进行进程之间的同步。 |
(3)实现
Apollo Domain文件系统等。
5.元组空间
(1)概念
进程经过在元组空间放置元组间接进行通讯,其余进程能够从元组空间中读或者删除元组。元组由一个或多个带类型的数据域组成。
(2)实现
JavaSpaces等等。
间接通讯风格总结
比较内容 | 组 | 发布-订阅系统 | 消息队列 | 分布式共享内存 | 空间组通讯 |
---|---|---|---|---|---|
空间解耦 | 是 | 是 | 是 | 是 | 是 |
时间解耦 | 可能 | 可能 | 是 | 是 | 是 |
服务风格 | 基于通讯的 | 基于通讯的 | 基于通讯的 | 基于状态的 | 基于状态的 |
通讯模式 | 一对多 | 一对多 | 一对一 | 一对多 | 一对一或一对多 |
主要目的 | 可靠的分布式计算 | 信息分发或EAI;移动和无处不在系统 | 信息分发或EAI;商业事务处理 | 并行和分布式计算 | 并行和分布式计算;移动和无处不在系统 |
可伸缩性 | 有限的 | 有限的 | 可能 | 可能 | 有限的 |
关联性 | 无 | 基于内容的发布-订阅 | 无 | 无 | 有 |
《分布式系统概念与设计》