分布式系统概念与设计-CH4进程间通信t

来源:互联网 发布:怎么成为淘宝客服 编辑:程序博客网 时间:2024/05/05 13:16

4.1 简介

本章关注中间件层的底层进程间通信原语,包括:套接字,消息传递,组播支持和覆盖网络。

UDP的API提供了消息传递抽象,这是进程间通信的最简单形式。TCP的API提供了进程对之间的双向流抽象。


4.2 互联网协议的API

4.2.1 进程间通信的特征

同步和异步通信

在异步通信中,send操作是非阻塞的,只要消息被复制到本地缓冲区,发送进程就可以继续进行其他处理。

在支持多线程的环境中,阻塞型receive操作的缺点较少。

消息目的地

客户程序通过名字使用服务,在运行时使用一个名字服务器或绑定器把服务的名字翻译成服务器位置。

可靠性

如果一个点对点消息服务在丢失了合理数量的数据包,仍然能够保证发送消息,那么该服务就被成为可靠地。

排序

有些应用要求消息要按发送方的顺序发送


4.2.2 套接字

UDP和TCP都使用套接字socket抽象,套接字提供进程间通信的一个端点。

进程间通信是两个进程各自的一个套接字之间传送一个消息。

对接收消息的进程,它的套接字必须绑定到它在其上运行的计算机的一个互联网地址和一个本地端口。

任意一个进程可以利用多个端口来接收消息,但一个进程不能与同一台计算机的其他进程共享端口。使用IP组播的进程是一个例外。

任意数量的进程都可以发送消息到一个端口。

4.2.3 UDP数据报通信

与数据报通信有关的一些问题

消息大小:通常,由应用决定消息大小,一般不要大于8KB。

阻塞:套接字通常提供阻塞型的send和非阻塞型的receive操作。

超时:阻塞型的receive上通常可以设置超时,以免无限期等待下去。

任意接收:receive方法可以不指定消息的来源,但是能够返回发送方的互联网地址和本地端口。

UDP数据报故障模型

遗漏故障:通常是发送或接收缓冲区问题或接收校验问题。

排序:没有按顺序接收到

4.2.4 TCP流通信

TCP流抽象隐藏了以下特征:

消息大小,丢失的消息,流控制,消息重复和排序,消息目的地。

一些与流通信相关的重要问题

数据项的匹配:两个通信进程需要对流上传送的数据的内容达成一致。

阻塞:

线程:为每个客户使用单独的线程的好处是服务器在等待输入时能阻塞而不糊延误其他客户。

故障模型

连接中断时,使用连接的进程不能区分是网络故障还是另一端的故障。

通信进程不能区分他们最近发送的消息是否已经被接收到。

4.3 外部数据表示和编码

两台计算机在交换数据值时,通常采用下列方法:

1.值在传送前先转换成一致的外部格式,然后在接收端转换成本地格式。

2.值按照发送端的格式传送,同时传送使用格式的标志,如果需要,接收方会转换该值。

为了支持RMI或RPC,任何能作为参数传递或作为结果返回的数据必须被“打平”,单个的简单数据值以一致的格式表示。表示数据结构护额简单值的一直的标准成为外部数据表示

编码(marshalling)是将多个数据项组装成适合消息传送的格式的过程。解码(unmarshalling)是在消息到达后分解消息,在目的地生成相等的数据项的过程。

三种常见的外部数据表示和编码方法:

CORBA的公共数据表示,可用于多种编程语言。

Java的对象序列化

XML


远程对象引用

远程对象引用是远程对象的标识符,在整个分布式系统中有效。必须以确保空间和时间唯一性的方法生成。常见的方法:

互联网地址+端口号+时间+对象编号+远程对象接口


4.4 组播通信

组播消息为构造具有如下特征的分布式系统提供了基础设施:

(1)基于复制服务的容错

(2)在自发网络中发现服务

(3)通过复制的数据获得更好的性能

(4)事件通知的传播


4.5 网络虚拟化:覆盖网络

网络虚拟化涉及在一个已有的网络之上构造多个不同的虚拟网络。每个虚拟网络被设计支持一个特定的分布式应用。

4.5.1 覆盖网络

覆盖网络(overlay network)是一个节点和虚拟链接组成的虚拟网络,它位于一个底层网络之上,提供一些独有的功能:

(1) 满足一类应用需求的服务或一个特别高层的服务。

(2)在一个给定的联网环境中的更有效的操作。

(3)额外的特色。

覆盖网络的类型:



4.5.2 Skype: 一个覆盖网络的例子


4.6 实例研究:MPI

MPI是高性能计算社团开发的用于消息传递的高效方法,其点对点的通信如下图所示:




0 0