3.分布式系统中的通信

分布式系统中的所有计算机都通过通信网络相互连接。通信网络分为大规模(Wide Area Networks,WANs)和本地(Local Area Networks,LANs)。

大型
广域网网络由连接在线路之间的通信计算机组成,它们是通信线路(电话无线电线路、卫星信道、光纤)并提供消息传输。当下一条消息从一台计算机传输到中间缓冲时,通常使用存储转发技术。

分组交换或线路交换。 在两个设备之间的整个通信会话期间,
交换线路(电话交谈)需要冗余线路。
数据包交换基于在源点将消息拆分为多个部分(数据包),将数据包发送到目标地址,并在目标地址从数据包中组装消息。线路使用效率更高,可以更快地传输消息,但需要进行拆分和重组消息的工作,并且可能存在延迟(这种方法不适合传输语音或音乐)。


3.1 ISO七级模型

ISO OSI(国际标准组织的开放系统互连参考模型)将通信协议组织成七层,并规定了每一层的功能。

本地网络。
局域网特点:

  • 地理覆盖范围小(一栋或几栋);
  • 高传输速度(10-100 Mbps);
  • 传输错误的概率低。

分层 ISO OSI 模型的固有开销是 LAN 使用更简单协议的原因。

客户端-服务器
如果预计服务器的响应很快就会出现,则可以避免确认服务器已收到来自客户端的请求消息。

远程过程
调用 发送、接收 - I/O 方法 在集中式计算机中使用的一种更自然的方法是过程调用。

Birrell 和 Nelson (1984)(独立和之前 - Ilyushin A.I., 1978)建议允许调用程序在另一台计算机上。

具有分布式内存的 MPP 可以被认为是局域网的一个特例。晶片机阵列,其中每个晶片机可以同时与 8 个通道与 4 个邻居并行计算,是一个很好的例子,将制定各种检查问题。晶片机矩阵的两个节点之间的消息传输时间(硬件特性 - 传输开始时间 Ts,一个字节信息传输到相邻节点的时间Tb,处理器操作,包括从内存读取和写入内存被认为是无限的快速地)。在时间Ts+Tb晶片机可以向它的四个邻居发送 1 个字节的信息,并从它们那里接收 4 个字节的信息(每个都一个字节)。流水线和并行使用多条路线。

应用进程之间的消息交换
SEND , RECEIVE (destination/sender, [tag], memory address, length)

寻址- 物理/逻辑处理器编号、动态创建进程的唯一标识符、名称服务(名称服务器或广播)。通常,向相邻计算机的传输需要三个副本——从发送进程的内存到其计算机上的 OS 缓冲区,在 OS 缓冲区之间传输,复制到接收进程的内存。

阻塞发送操作(直到数据内存被释放或直到实际传输完成)和非阻塞

缓冲和非缓冲(在没有接收的情况下会合或丢失信息)。

可靠和不可靠


3.2 MPI - 消息传递接口

(1) 目标

  • 创建应用程序编程接口(不仅仅是编译器或系统实现库);
  • 实现高效的通信(避免内存到内存的复制,允许计算和通信的重叠,或卸载到存在的通信处理器);
  • 允许在异构环境中使用扩展;
  • 从通信的可靠性出发(用户不应处理通信故障——这是下层通信子系统的业务);
  • 定义一个和目前使用的没有太大区别的接口,如PVM、Express、P4等;
  • 定义一个可以在许多正在出售的平台上快速实现的接口,而无需对底层通信和系统软件进行重大改造。

(2) MPI 包括什么?

  • 点对点通信;
  • 集体经营;
  • 进程组;
  • 沟通环境;
  • 一种为 SPMD 模型创建进程的简单方法(一个程序用于在不同的处理器上处理不同的数据);
  • 进程拓扑。

(3) MPI 中不包括什么?

  • 显式共享内存操作和显式支持线程(具有共享内存的进程);
  • 比当前操作系统标准需要更多操作系统支持的操作(例如,通过中断机制接收消息、活动消息);
  • 辅助函数,例如计时器。

(4)一些概念。
通信操作可以是:

  • 非阻塞- 如果在操作完成之前返回;
  • 阻塞- 如果返回意味着用户可以使用调用中指定的资源(例如,缓冲区);

如果执行不需要通信,则 操作称为本地操作;非本地,如果其实施可能需要通信; 集体,如果小组的所有过程都应该参与其实施。

(5) 群体、情境、传播者。

是进程(即进程)标识符的有序(从 0 到组等级)集。组用于在发送消息时指示收件人(目标进程由其在组中的编号指定),确定集体操作的执行者。它们是功能并行化的强大工具——它们允许您将一组进程分成几个子组,每个子组必须执行自己的并行过程。这显着简化了使用并行程序时的寻址问题。

上下文是消息的范围,类似于嵌套过程调用中的变量范围。在特定上下文中发送的消息只能在同一上下文中接收。上下文也是支持并行程序的重要手段。

Communicators - 允许您限制特定进程组内消息的范围(生命、定义),即 可以被视为一对 - 组和上下文。此外,它们还用于优化目的,存储为此所需的附加对象。有预定义的通信器(更准确地说,是在 MPI 系统初始化期间创建的通信器):

  • MPI_COMM_ALL - 所有进程
  • MPI_COMM_PEER - 除主进程外的所有内容。

(6) 对组的操作(本地,无消息)。
为了支持用户服务器,有一个根据组的每个进程指定的键将组拆分为子组的集体操作。为了支持绑定到服务器,有一些工具可以使用服务器和客户端都知道的某个名称来构建通信器。

(7)点通讯。
基本操作——发送接收 操作可以是阻塞的和非阻塞的。

发送 操作指定:

  • 内存中的缓冲区地址;
  • 发送元素的数量;
  • 每个元素的数据类型;
  • 其组中目标进程的编号;
  • 消息标签;
  • 沟通者。

(最后 3 个参数类似于邮件信封)

接收 操作指定:

  • 内存中的缓冲区地址;
  • 发送元素的数量;
  • 每个元素的数据类型;
  • 其组(或任何)中目标进程的数量;
  • 消息标签(或任何);
  • 沟通者;
  • 状态(来源和标签,未知时需要 - 使用任何模板指定时)。

在异构环境中工作时提供数据转换。

有四种通信模式——标准、 缓冲、 同步待机

标准模式下,发送接收操作的 顺序是 任意的,当消息从内存中删除并且已经可以被进程使用时,发送操作就完成了。在这种情况下,无论接收是否存在,都可以执行操作,或者需要存在(MPI 的实现问题)。因此,该操作被认为是非本地的。

缓冲模式下,发送接收操作的 顺序是 任意的,当消息从内存中取出并放入缓冲区时,发送操作完成。如果缓冲区中没有空间 - 程序错误(但可以定义自己的缓冲区)。操作是本地的。

同步模式下, 发布操作的顺序是任意的,但是发送操作只有在发布和接收操作开始之后才完成。该操作是非本地的。在就绪模式下,只有在相应的接收操作发出后才能发出 发送操作,否则程序被认为是错误的,其工作结果是不确定的。操作是本地的。

在所有四种模式中, 接收操作 在消息被接收到用户指定的接收缓冲区后终止。

非阻塞操作 在完成之前不会暂停进程,而是返回对允许您查询操作状态或等待操作完成的通信对象的引用。有一些操作可以检查进程的传入消息,而不会将它们读入缓冲区(例如,确定消息的长度,然后为其请求内存)。可以中止发出的非阻塞操作,因此提供了检查操作是否正常完成的设施。有一个复合的发送-接收操作,避免了在交换过程中发出单个操作的顺序的困难。针对交换相同类型和长度数据的特殊情况,提出了一种特殊的消息操作(send-receive-replace) 使用相同的缓冲区来发送和接收。

(8) 集体沟通。
为确保集体沟通,引入了以下功能:

  • 组内所有成员的屏障(BARRIER);
  • 从一个(广播)向组的所有成员发送消息;
  • 从所有组成员那里收集数据(GATHER);
  • 从一个( SCATTER )向组的所有成员发送数据;
  • 为所有人收集来自该组所有成员的数据(ALLGATHER);
  • 从 all ( ALLTOALL )向组的所有成员发送数据;
  • 全局操作(总和、最大值等),当结果报告给组的所有成员或只报告给一个成员时。在这种情况下,用户可以定义一个全局操作——一个函数;

PVM(并行虚拟机)

著名的 PVM 系统 [5] 被创建用于将几个联网的工作站组合成一个虚拟并行计算机。该系统是 UNIX 操作系统的上层结构,目前用于各种硬件平台,包括具有大规模并行性的计算机。

用户任务是一组子任务,它们在分布式系统的指定处理器上动态创建,并通过发送和接收消息(以及通过信号机制)相互交互。

优点 - 简单,存在从 OS UNIX 继承的进程和信号设备,以及动态将新创建的进程添加到组的可能性。

缺点 - 低性能和功能限制(例如,只有一种消息传输模式 - 带有缓冲)。


MPI-2 (1997)

在以下领域开发 MPI:

  • 动态创建和销毁进程(对于在计算机网络中工作很重要)。
  • 用于通过共享内存组织进程交互的单向通信和同步工具(用于在处理器直接访问其他处理器的内存的系统上进行有效操作)。
  • 并行 I/O 操作(有效利用现有的许多处理器并行访问各种磁盘设备的可能性)。

你可能感兴趣的:(分布式系统,分布式)