#间接通信的定义,空间与时间解耦,间接通信的几种模式
一.间接通信的定义
Communication between entities in a distributed system through an intermediary (中介) with no direct coupling (耦 合) between the sender and the receiver(s).【要通过中介交流】接收方和发送方之间不直接通信而是通过中介,实体通过中介者进行通信
常见的中介:groups,Event-based abstractions,Message queues, shared memory abstractions【其实就对应几种间接通信模式】
二.空间与时间解耦
RPC是直连
解耦(decoupling)好处:mobility, dependability and event dissemination (传播)
坏处:性能开销增大;处理更困难
两种类型:空间解耦&时间解耦
- space decoupling: 接收者不知道发送者是谁,在这种情况下,system developer has freedom in dealing with changes:发送者和接收者都可以替换,更新而不影响其他方面
- time decoupling:接收者和发送者有独立的生命周期,接收者和发送者不需要同时运行来交流
三.间接通信模式
1.Group communication EG:JGroup——a Java toolkit for reliable message
进程可以加入或者离开一个组,一个进程事项发起一个组播操作,而不是发起多个发送操作到每个进程。有效地使用带宽,组通信与广播通信不同。广播通信是一种发送者向所有接收者同时发送数据的方式。组通信只向特定的一组接收者发送数据,而不是向所有接收者发送数据。
2.Publish-Subscribe System EG:JMS----Java message Service
允许发布者将消息发送给订阅者,而无需知道订阅者是谁。订阅者可以订阅他们感兴趣的主题,然后他们将收到所有关于该主题的消息。系统作为一个broker(代理)传递事件到正确的订阅者,发布-订阅系统是一个一对多的通信范型。
四种订阅模型方式:
- Channel-based 基于渠道(发布者发布事件到命名的渠道,订阅者订阅其中一个已命名的渠道,并接收所有发送到那个渠道的事件。)
- Topic-based 基于主题(每个事件通知可以定义多个主题,订阅者根据自己感兴趣的主题订阅):be enhanced by introducing hierarchies (层次结构) of topics.
- Content-based 基于内容(基于主题订阅的一般化):Most flexible, significantly more expressive, but challenging to implement.
- Type-based 基于类型(object-based,在基于类型的方法中,订阅根据事件类型来定义,根据给定的事件类型或者子类型来定义)
四种基于内容的方法:1. Flooding 泛洪:把发布的事件给所有可能得接收者/把订阅信息发送给所有可能得发布者 2.Filtering 过滤 : 代理转发通过网络转发通知仅当这里有A PATH to a valid subcriber. 3.Advertisements汇聚: 减少overhead of filtering and flooding 4. Gossip闲聊:每一个节点都有可能转发信息,achieving multicast
3.Distributed event-based systems(消息队列方式)
- 生产者进程发送消息到特定队列,消费者进程从队列中接收消息。有以下三种接收方式
- a.堵塞接收blocking:保持堵塞直到有合适的消息可用。
- b.非堵塞接收(轮询 polling):检查队列的标志,返回可用的消息,或是一个不可用的指示。
- c.通知操作being notified:当队列中有可用的消息时,向消费者发送事件通知。
4.Distributed Shared Memory (DSM)——EG:JMS,Oracle Streams Advanced Queuing
An abstraction of shared memory in a distributed system.分布式共享内存(DSM)是一种抽象,用于给不共享内存的物理机共享数据。分布式共享内存使得不同计算机的进程能访问不同进程的数据,就像访问自己进程的数据一样。
5.Tuple spaces元组空间:EG:JavaSpace IBM TSpace
进程通过在元组空间放置元组(写入,读取,拿走)间接进行通信,其他进程可以从元组空间中读或者删除元组。元组由一个或多个带类型的数据域组成。
几种模式之间的对比:
JMS allows Java programs to access the facilities provided by the Message Oriented Middleware (MOM) JMS是一个用于在Java应用程序之间发送异步消息的API。JMS提供了一种统一的编程模型,允许应用程序使用不同的消息中间件产品。
JMS中的交互方式:1.Message queuing (aka 1-to-1 communication)
2.Publish-Subscribe (aka 1-to-many communication)
JMS的结构:
感觉JMS部分还是懵懵的。。。。。。