第9章分布式系统中的通信问题•进程间通信机制基于共享内存(生产者-消费者,信号量)基于消息传递•分布式系统和单处理机系统的最重要区别:进程间通信•通信进程:双方必须持有协议•客户—服务器模型•消息交换机制•远程过程调用(RPC)•组进程通信9.1概述分布式系统中的通信问题,应考虑以下方面:•发送策略:如何通过网络发送消息•连接策略:如何连接彼此通信的进程•争夺处理:发现并解决冲突要求和冲突现象•保密:消息内容的保密•通信机制发送策略•固定发送事先规定好信道(最短信道),不再更改AB物理信道一条/多条•虚拟线路信道在一段时间内固定,可选不同信道•动态发送在消息发送时确定信道(自动进行选择)连接策略•线路转换建立永久性物理通信链路,通信期间其他进程不能用(例子:电话系统)AB•消息转换确定临时性物理通信链路,供消息传递期间使用消息+系统信息发送策略AB•消息包转换逻辑消息(变长消息)---定长消息,即消息包消息包到达---拼装消息争夺处理•冲突检测传递消息前,监测通信线路是否空闲若空闲,则可发送,否则等待并继续监测问题:系统性能衰减应用:以太网系统一条通信链路连接多个节点,产生争夺现象争夺处理•令牌传递令牌:一个特殊的消息类型,不停地在系统(环形结构)中循环要传递消息的节点必须拿到令牌,才能传递消息问题:令牌丢失(由系统发现,产生新的令牌)应用:Priment系统争夺处理•消息槽消息槽:存放定长的消息和有关控制信息若干定长的消息槽连续不断地在系统中循环,要传递消息地节点必须等到一个空消息槽到达,才可将消息插入并附上适当的控制消息,消息槽继续在网络中流动,到达某一节点时,查看控制信息,确定是否由发给它的消息应用:剑桥数字通信环保密•编码编码,译码•消息传递•远程过程调用基本通信机制9.2分层协议(1)•协议:规定通信如何进行的一系列规则,控制传送信息的格式、内容及含义分层协议(2)各个层次:•应该用多少伏特电位表示0,多少伏特表示1呢?•接收者如何知道哪一位是消息的终止位?如何检测一个消息是否已被损坏或丢失,或者已被损坏或丢失时又该怎样做?•数字,字符串,以及其它数据项应该占用多少比特,如何表示它们低层:比特传输高层:信息表示分层协议(2)国际标准化组织(ISO)开发的一个参考模型•开放系统互联参考模型(OSI)•定义了通信涉及的问题:层次,名称,功能分层协议(3)OSI模型区别两种不同类型的协议:•面向连接的协议发送者和接收者首先建立显式连接,然后交换数据•无连接的协议一旦发送者准备好消息就可发送OSI分层协议分层协议(6)•每一层处理通信的一个方面的问题(复杂问题分解)•每一层为上一层提供接口(一组操作,定义了该层向用户提供的服务)•每一层的协议可以改变,但不会影响其他各层发送到网络上的消息格式物理层•负责物理传输,即二进制信息流••关于使用介质(不是介质本身)的机械的和•位传输的编码和定时数据链路层(1)•负责差错处理,数据集合成“帧”,并监视每一帧是否被正确接收•由帧形成一个校验和,该校验和附加到帧上•当帧到达时,重新计算校验和,并原校验和进行比较•如果一致,接受帧;如果不一致,要求重传该帧数据链路层(2)•发送和接收之间的协商信息请求与回答信息典型的消息头包括:“请重传消息n”,“我已经重传它了”,“不,你还没有”,“是的,我已经做了”,“好吧,不管怎样,请再传送一次”等等。网络层•消息从发送者到接收者,经过许多交换点,在每一交换点要选择输出线•选择最优路径的问题称为“路由”,这是网络层要解决的主要问题两个网络层协议(1)面向连接的协议:X.25多用于公共网络中,如电话网和欧洲的PTT网•先发送CallRequest消息给目的方•如果连接请求被接受,发起连接的一方将收到一个连接标识•建立一条从发送到接收的连接路径,并在以后的传输中使用该路径两个网络层协议(2)无连接的协议:IP美国国防部协议包的一部分•一个IP包(网络层对消息的称呼)可以不经过建立连接就被传输•每个IP包有独立的路由,没有固定的中间路径和连接标记传输层(1)•提供可靠的服务,即会话层传给传送层的消息能被正确的发送,而不丢失•将消息分成包,每个包一个序列号,然后发送•协商信息主要是指出哪个包已接收,哪个包已发送,还有多少空间可以接收消息,等等传输层(2)•传送层软件保证一个连接按照被放入的顺序,正确的传送出来•DoD传送协议称为TCP(传输控制协议TransmissionControlProtocol)•TCP/IP广泛应用于UNIX系统、网络、Internet中会话层•是传送层的增强版•它提供了对话控制,来跟踪现在讲话的是哪一方•同时它也提供了同步机制表示层•着重于比特流的含义•可以定义记录的各域,然后让发送者通知接收者该消息包含了特定记录•机器之间可通过不同的中间表示形式进行通信应用层•是各种各样协议的组合,这些协议处理不同实际应用•如电子邮件,文件传输,以及与远程终端建立连接9.3客户——服务器模型•问题的提出:协议的开销:消息处理的开销•OSI模型的局限:没有描述如何构建一个分布式系统•广域网与局域网客户—服务器模型(1)•基本思想:将操作系统构造成一组协同工作的进程:服务器服务器向用户提供服务:客户客户机和服务器机运行同样的微内核客户进程和服务器进程:用户进程客户—服务器模型(2)•基于简单的、无连接的“请求/应答”协议客户发送一个请求消息给服务器,请求服务;服务器完成后将结果返回给客户(数据或出错代码)•优点:简单、高效客户—服务器模型(3)客户—服务器模型(4)•内核提供的通信服务:两个系统调用发送消息,接收消息•C/S模型设计上的四个问题:寻址、阻塞、缓冲、可靠性寻址问题(1)客户为了能向服务器发消息,必须知道该服务器的地址包括:•机器.进程寻址•广播进程寻址•名字服务器寻址内核客户机内核服务器19912243012在C/S模型下的机器进程寻址处理1.发给243.0的请求2.给199.12的回答内核客户机内核服务器19912243034在C/S模型下的广播寻址处理1.广播:“X服务器在哪里”2.服务器:X地址在243.01123.发给243.0的请求4.给199.12的回答内核S243034在C/S模型下基于名字服务器的寻址处理1.广播:“X服务器在哪里”2.服务器:X地址在243.03.发给243.0的请求4.给199.12的回答内核C19912内核NS115012名字服务器寻址问题(2)•机器进程寻址:不透明•广播进程寻址:给系统带来额外负担(用Caching解决)•名字服务器寻址:需要中央控制机制(用名字服务器复制方法解决,带来不一致性问题)寻址问题(3)•特殊硬件解决途径:网卡存储本机各进程标识•每帧经过时,网卡检查该帧的目标进程是否是本机上的进程。如果是,就接收该帧,否则,什么都不做阻塞与非阻塞原语(同步原语与异步原语)•其主要区别在于:发送者是否能在重新获得控制后立即使用消息缓冲区阻塞Send:消息在进程地址空间1.消息放在缓冲区2.调用Send,进程阻塞3.消息从缓冲区传走4.进程唤醒进程地址空间缓冲区核心地址空间阻塞Send:消息在核心地址空间1.消息放在缓冲区2.调用Send,进程阻塞3.消息拷贝到核心缓冲区,进程唤醒4.消息传走进程地址空间缓冲区核心地址空间无阻塞Send1.消息放在缓冲区2.调用Send,进程继续执行3.消息传走4.向进程发中断,表示可以重用缓冲区进程地址空间缓冲区核心地址空间阻塞Receive:1.调用Receive2.如果有消息,则拷贝到进程地址空间3.如果没有消息,进程阻塞,直到消息到达进程地址空间缓冲区核心地址空间无阻塞Receive:1.调用Receive2.如果有消息,则拷贝到进程地址空间3.如果没有消息,进程继续执行4.进程检查消息是否到达进程地址空间缓冲区核心地址空间Send•阻塞且无消息拷贝•阻塞且有消息拷贝:额外消息拷贝,降低性能•无阻塞:快速,但程序感知,负担重Receive•阻塞:避免检查消息到达•无阻塞“时延”问题缓冲和非缓冲原语内核客户机内核无缓冲原语在客户机发送前,服务器作接收服务器缓冲原语消息发给信箱,服务器从信箱接收内核客户机内核服务器信箱可靠和不可靠原语•不可靠Send•接收方发确认消息•应答消息作为确认消息内核客户机内核服务器1.请求2.回答不可靠原语请求或回答会丢失,恢复必须在C/S级进行内核客户机内核服务器1.请求3.回答可靠原语:对请求和回答的ACK请求和回答是ACK的:超时和重传用于恢复丢失的消息2.ACK4.ACK内核客户机内核服务器1.请求2.回答可靠原语:ACK请求回答回答作为对请求的ACK3.ACK总结:客户—服务器模型的实现项目方案1方案2方案3阻塞阻塞原语寻址机器代号稀少进程地址带中断的非阻塞不阻塞并复制到内核通过服务器ASCII名字查找可靠性缓冲无缓冲、丢弃未期待消息不可靠无缓冲、暂时保存未期待消息请求—回答—确认请求—确认—回答确认邮箱9.4远程过程调用(RPC)将单机环境下的过程调用延伸到分布式系统环境出自一篇博士论文B.J.NelsonISO将RPC作为计算机网络、分布式计算机系统的国际标准化草案一种信息交换的标准规程单机环境下的过程调用远程过程调用(RemoteProcedureCall)指用户可以向调用本地过程一样调用不同地域的不同计算机上的过程,从而使得应用程序设计人员不必设计和开发有关发送和接收信息的实现细节远程过程调用(RPC)机器A机器BRead(f,&buff)进程挂起过程执行远程过程调用(RPC)•对调用者透明:被调用过程是在远程机器上执行•透明性是通过在客户端插入一个称为clientstub,在服务器端插入一个称为serverstub完成的远程过程调用通信模型远程过程调用的结构RPC机制组成•Stub客户、服务器各一个•binding使客户能定位到相应的服务器•控制部分:为跟踪RPC的调用状态设置•传送部分:确定如何将信息从一个节点传送到另一个节点一个远程过程调用要进行下列步骤:1.客户程序按照通常的调用方式,调用clientstub2.clientstub创建一个消息,并中断进入内核3.内核发送该消息给远端的内核4.远端内核将该消息传递给serverstub5.serverstub从消息中获得参数,并调用服务器程序一个远程过程调用要进行下列步骤:6.服务程序完成工作,将结果返给serverstub7.serverstub将结果打包进一个消息,并中断进入内核8.远端内核将消息发送回客户方内核9.客户方内核将消息传递给clientstub10.clientstub取出结果,返回给客户程序远程过程调用通信模型远程过程调用实现所考虑的问题•Stub程序设计帮助用户RPC的细节,使用户像调用本地过程那样调用远程过程•binding问题使客户能定位到相应的服务器•可靠性问题:为跟踪RPC的调用状态设置•参数传递问题:如何在不同机器之间正确有效地传递参数9.5组通信问题的提出RPC不能处理:一到多即一个发送者,多个接收者的通信问题9.5.1组通信概述组:进程的集合,按某种方式一起工作特性:•当某个消息发送到该组时,组内的所有成员都将接收到该消息•组是动态的创建、撤消,进程入组、出组•一个进程入多个组9.5.2与设计有关的问题•闭合分组和开放分组•对等分组和层次分组•组成员问题•组编址•发送和接收原语•原子性•消息序列•组重叠•可扩展性