共计 1492 个字符,预计需要花费 4 分钟才能阅读完成。
什么是间接通信?
间接通信被定义为在分布式系统中实体通过中介者进行通信,没有发送者和接收者之间的耦合。
间接通信具有两个特性:(1)空间解耦:发送者不需要知道接收者是谁。(2)时间解耦:发送者和接收者可以有独立的生命周期。
间接通信的范型
1. 组通信
(1)概念组通信实现了组播通信,通过一个操作,消息被发送到组内的所有成员,与系统中的所有成员通信。组通信的一个重要特征就是一个进程事项发起一个组播操作,而不是发起多个发送操作到每个进程。
(2)分类 a. 封闭组和开放组封闭组:对封闭组的组成员来说,只有组成员才能组播给它。开发组:对开放组的组成员来说,组外的成员也能组播给它。
b. 重叠组和非重叠组重叠组:实体(对象或进程)可以成为多个组的成员。非重叠组:实体(对象或进程)至多只能属于一个组。
(3)实现
JGroups 等。
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;商业事务处理
并行和分布式计算
并行和分布式计算;移动和无处不在系统
可伸缩性
有限的
有限的
可能
可能
有限的
关联性
无
基于内容的发布 - 订阅
无
无
有
參考资料
《分布式系统概念与设计》