间接通信
ppt-en:
ppt-zh:
## 基本概念通过中介进行通信,发送方和接收方之间没有直接耦合。
中介:
- 小组:基于事件的抽象、发布-订阅
- 消息队列
- 共享内存:分布式共享内存、元组空间(Tuple-Space)
时间、空间解耦
空间解耦:参与者在更换、更新、复制、迁移时不会影响另一方。 时间解耦:
- 发送方接收方无需同时运行、存在,就可以通信
- 适合不稳定的环境
优缺点:
- 缺点
- 额外的间接,性能开销
- 缺乏时空耦合,难管理
- 优点
- 可靠、移动性
间接通信模式
组通信
组:使用抽象的组来管理。网络系统中,一个相互作用的进程集合成为组。 组通信:一个发送进程在一次操作中将一个消息发送给组内其他进程的通信,称为组通信。组内每个成员都是平等的。进程可以加入或离开组。
发布-订阅
发布-订阅系统是基于事件的分布式系统。区别于请求-应答交互模型,发布-订阅系统的建模是由事件提供的解耦和反应式交互模型。发布-订阅系统的任务是把订阅与发布的事件相匹配,保证事件通知的正确性传递。
组成:
- 发布者发布事件:
publish(e) - 订阅者对过滤器指定的一组事件感兴趣:
subscribe(f) - 异步发送事件:
notify(e) - 选择发送
- 系统代理将事件传递给订阅者
特点:
- 异构性:发布者和订阅者无需可互操作。
- 异步性:事件的通知是由事件的发布者异步地发送到所有对事件感兴趣的订阅者处,发布者和订阅者需要解耦。
- 一对多:一个事件,多个订阅者

发布-订阅系统常见模型:
- 基于渠道: 发布者发布事件到命名的渠道,订阅者订阅其中一个已命名的渠道,并接收所有发送到该渠道的事件。
- 基于主题:假定每个通知都包含不同主题的域,订阅者可对感兴趣的域进行订阅。
- 基于内容:是基于内容的一般化,使用事件属性值的约束组合定义订阅查询。
- 基于类型:订阅根据事件类型来定义,匹配根据给定的过滤器的类型或是子类型来定义。该模型通常是基于对象的方法中,根据对象指定的类型进行筛选。
- 基于概念:过滤器根据事件的语义和语法进行表述,其中对包含语义上下文的数据项进行翻译,得到不同的数据结构,并通知相关的订阅者。
消息队列
消息队列是通过队列作为中间件提供点对点的服务,实现发送方和接收方间的空间和时间解耦。

分布式共享内存

元组空间
元组空间是可以通过内容模式匹配的内存空间。元组是由一个或者多个带类型的数据域组成,如<"fred",1958>、<1,12,"Tom">

比较

| 组 | 发布-订阅 | 消息队列 | 分布式共享内存 | 元组空间 | |
|---|---|---|---|---|---|
| 空间解耦 | 有 | 有 | 有 | 有 | 有 |
| 时间解耦 | 可能 | 可能 | 有 | 有 | 有 |
| 服务风格 | 基于交流 | 基于交流 | 基于交流 | 基于状态 | 基于状态 |
| 交流范式 | 1对1 | 1对多 | 1对1 | 1对多 | 1对1,1对多 |
| Main Intent | 可靠的分布式交流 | ||||
| 扩展性 | 有限 | 可 | 可 | 有限 | 有限 |
| Associative | 无 | 只有基于内容的可以 | 无 | 无 | 可 |