1、第三章 分布式系统中的通信,1 概述 1. 系统中各部分通信的基本方式利用共享存储区消息传送 2. 分布式系统中通信考虑的关键问题 发送策略固定策略虚拟线路策略动态发送策略固定策略简单,但不顾及网络负载;虚拟策略对此有所改进,亦能保证消息发送与到达次序一致,但不能最大限度利用带宽;动态策略可充分利用带宽,但不能严格保证消息发送与到达次序一致。,第三章 分布式系统中的通信, 连接策略线路转换:永久物理链路,固定独占使用消息转换:物理链路动态分配,临时共享使用信包转换:物理链路与信包捆绑,消息拆分传输 冲突解决策略冲突检测令牌传递消息槽 保密单密钥技术公公密钥技术,第三章 分布式系统中的通信,2
2、分布式系统中的同步机制条件限定有关信息分散在不同计算机上只能根据本地得到的信息进行决策应能回避单点故障或错误系统中不存在公共时钟或全局时钟装置 1. 时钟同步 逻辑时钟: 一个单调增长的计数器记号:顺序 a b;并发 ab;进程p的逻辑时钟记为Cp事件a在进程P中的时间邮戳为Cp(a),事件x在任何进程中的时间邮戳记为C(x),a b 则C(a)C(b),第三章 分布式系统中的通信, Lamport 时钟校正方法通过在本地物理时间上加上一个偏移量来实现进程本地逻辑时钟,进程按以下方式更新其逻辑时钟并在进程件传递逻辑时钟的值: Cp在进程P上的每一事件之前增值并加盖邮戳:Cp= Cp + 1;
3、当进程P发送消息m时,在m上携带逻辑时钟值t = Cp 当进程Q接收消息 (m,t) 时,计算Cq= max ( Cq,t ) + 1,第三章 分布式系统中的通信,例,三个备有自己不同频率物理时钟的进程相互发送消息,0,0,0,6,18,12,24,30,36,42,48,54,60,8,16,24,32,40,48,56,64,72,80,9,18,27,36,45,54,63,72,81,90,A,B,C,D,0,0,0,6,12,18,24,30,36,42,48,65,71,8,16,24,32,40,48,56,64,72,80,9,18,27,36,45,54,63,72,81,9
4、0,A,B,C,D,未同步前各自的时钟,同步后的时钟,时钟同步,事件f,事件e,第三章 分布式系统中的通信,注意:使用逻辑时钟,a-b可以保证C(a) C(b),但反之不然。上图中事件e和f分别是进程3中的事件,虽然可以看出存在C(f)C(e),但ef。使用逻辑时钟只能对事件作部分排序!可以通过对发生的事件加上进程标识符且对进程标识符进行排序,来实现对事件的完全排序。进程P上的事件a时间邮戳为Ta,进程Q上的事件b时间邮戳为Tb,定义:a、b的全局时间邮戳分别为 ( Ta,p ),( Tb,q ),( Ta,p ) ( Tb,q ) 当且仅当Ta Tb 或者Ta = Tb但同时有p q。进程P
5、中的事件a先于进程Q中的事件b发生,用ab表示。这里表示全序关系。,第三章 分布式系统中的通信, 物理时钟通常,使用协同宇宙时间UTC(Universal Coordinated Time)来代替国际原子时间TAI(International Atomic Time),精度可达0.5毫秒。时间服务器S配备接收卫星授时装置并根据请求提供标准时间。进程P在消息mr中请求时间,并在消息mt中接收时间t,原则上它应该将自身的时钟置为 t + Ttrans,其中Ttrans为从S到P的消息传送时间。 Ttrans是不确定的,容易受到网络传输竞争的变化。实际上,Ttrans= min + x,min是理想
6、情况下的网络传输时间,而x随网络环境的变化而变化。,第三章 分布式系统中的通信, Cristian 算法如果进程P的时钟刷新率很低,那么发送mr所需时间、时钟服务器处理请求的时间和接收mt所需时间的来回时间Tround可以以合理的精度地用进程P的本机时钟计算出来。如果从S接收的标准时间为t,近似地可以认为实际时间为t + 0.5Tround。近似精度为 ( Tround/2 ) min 。 Berkeley算法时间服务器周期性地向所有节点发送UTC并询问当地的时间,接收者返回各自本地时间与服务器时间的偏差信息,根据接收到的偏差信息、当时的服务器本机时间,计算出传输来回的平均时间,扣除后再计算出
7、每台机器的时间偏差,向它们分别发送,供它们修正自己的本机时间。,第三章 分布式系统中的通信, 平均算法将时间划分为定长的时间区间,大家约定一个起始时间T0,第i个区间为 T0+ iR, T0+ (I+1)R ,这里R为系统参数。每个时间间隔开始时,每台计算机广播自己的本机时间。由于本机时间各不相同,这些广播并不精确地发生在同一时刻。每台机器也会收到其它机器的广播,仿照Berkeley算法,取一个可信时间间隔,在该区间内收到的广播为有效广播,计算平均值(或去掉一个最大值、一个最小值后平均),用估计传输时间做修正后,作为自己的本机时间。显然,这样得到的系统标准时间与UTC无关,仅仅为了系统内部同步
8、使用。,第三章 分布式系统中的通信, 网络时间协议(NTP)NTP定义了时间服务的体系结构和在各种互连网络上分布时间信息的协议,被Internet用作时钟同步的标准。服务器组成层次结构,形成同步子网。主服务器位于树根,与标准时间资源(如UTC接收机)相连,上级服务器对下级服务器进行同步控制。一般来说,由于每一层同步都会出现误差,较低层次的服务器比较高层次的服务器时间更不准确。在服务器不可达或出现故障时,可以重构同步子网。同步控制的方式大致有三种。,第三章 分布式系统中的通信, 组播方式:主要用于高速网。某个或某几个服务器定期向局域网上的服务器广播时间,服务器收到时间后,对广播延迟做小的修正后进
9、行同步,修改本地时钟。 过程调用方式:与Cristian 算法类似。 对称方式:最适用于用于层次同步方式,精度最高。主、从服务器之间成对交换,每个消息都附加时间邮戳。,服务器A Ti+1 Ti+2服务器BT Ti+3,第三章 分布式系统中的通信,在服务器A、B之间传送两个消息m和m 。令由B到A的延迟时间为t,由A到B的延迟时间为t,服务器A对B的本机时钟的偏差为。那么,Ti+1= Ti+ t +;( t0 )Ti+3= Ti+2+ t-;( t0 ) 记a = Ti+1 - Ti,b = Ti+3 Ti+2 ; 两个消息的总延迟时间为:d = t + t = a - b 令每一对消息的计算误
10、差为 Q = ( a+b ) / 2,那么:= Q + ( t t ) / 2,由于t,t 0, 于是 Q d /2 Q + d / 2,第三章 分布式系统中的通信, 同步时钟的使用消息传送实现Cache的一致性 2 互斥问题临界区规则:有空让进,无空等待,有限等待 +定序进入简单的实现方法:设立“仲裁者”,集中式弊端约定:进程与结点等价进程间发送消息遵从“管道”规则每个消息将在有限时间内正确到达系统全互连,第三章 分布式系统中的通信, Lamport算法 进程Pi要求进入临界区k,向每个进程发送消息Request(Ti , k, i),公告进入要求,并将其置于自己请求消息队列的队尾。其中Ti
11、是该进程的时间邮戳 进程Pj 收到消息后,按全序方式排序并插入自己的队列中,返回带有自己邮戳的ok消息 以下条件成立时,进程Pi可以进入临界区k:Pi自己的Request(Ti , k, i)消息位于自己请求队列的队首Pi收到所有进程发回的时间邮戳晚于Ti的ok消息 退出时, Pi删去自己队列的相应消息,并公告退出消息 进程Pj 收到退出消息后,删去自己队列的相应消息,第三章 分布式系统中的通信,Ricart和Agrawala对此算法做了改进,使需要发送的消息从3(n+1)减少为2(n+1) 进程Pj 收到消息后,按全序方式排序并插入自己的队列中:若自己不在且不想进入临界区,发送ok消息若自己
12、在临界区,不做回答若自己正想进入临界区,比较到达消息与自己请求消息的邮戳,若到达邮戳早,发ok,否则不发 问题:一旦出现故障结点,ok消息永不到达,无法进入。,第三章 分布式系统中的通信, 令牌传递方法令牌是一类点对点的、代表“许可权”的特殊消息。 循环式令牌传递所有结点组成一个逻辑环 单向方案-被动式只有一个令牌。令牌沿一个方向流动,需要进入临界区者留住令牌,退出时再交出,否则立即转交下一个节点。 双向方案-主动式请求消息与令牌反向流动。自己有令牌,不在也不想进入,接到请求后传递令牌;自己在临界区,退出时转交; 自己也发出了请求消息,接到请求后记下,等自己有了令牌并退出临界区时再转交;自己没
13、有令牌,也不想进入临界区,接到请求后立即相同方向邻居传递。,第三章 分布式系统中的通信, 广播式令牌传递针对非环状结构网。对每个临界区,设令牌向量T=(T1,T2,Tn),其中n为进程数。每个进程对每个临界区设立请求队列。进程Pi希望mi次进入临界区时,广播Request (Pi, mi)后等待令牌。收到后将Ti改为mi并进入临界区,退出时,查看请求队列,若空则继续执行,若有请求则取出队首元素Rquest(Pj, mj),若mjTj则将令牌交给Pj,否则删除该请求继续查看,直至队列为空。若队列已空令牌仍在手中,等到mjTj的请求出现时,再转移令牌。无令牌进程接到请求将其插入请求队列即可。实际上
14、,临界区C已经扩大为(C,T)了。,第三章 分布式系统中的通信,3. 协调者选择问题分布式系统中常常会有“协调者”,如何选择。 Bully算法系统中有n个进程P1,P2, Pn,假定进程号最大者为协调进程。某一进程在规定时间内无法与协调者联系,可以发起竞选。 Pi发起竞选,广播附有本进程号的竞选消息。 Pi接到消息,若自己号小则沉默,否则发回拒绝消息,自己发起竞选。 竞选者在规定时间内未接到拒绝消息,自动当选。广播当选消息,运行协调程序,成为协调进程。否则竞选失败,准备接受他人当选消息。若规定时间内未接到当选消息,可再度发起竞选。,第三章 分布式系统中的通信, 环形算法结点组成逻辑环。 进程P
15、i发起竞选,创建一活跃表,填入本进程号,发送给左邻,若左邻规定时间内未应答,则故障,跳过其向下一个发送,直至非故障者。 进程Pj接到右邻的竞选消息 若为第一次接到,将本进程号加入表中向左邻发送 若为第二次接到,又若本进程号最大,则向左邻发布自己当选消息,否则继续传送活跃表 进程接到当选消息必须立即向左邻转发,直至当选者从右邻获得自己当选消息为止。,第三章 分布式系统中的通信,4. 原子事务事务模型 事务原语begin-transaction 事务开始end-transaction 事务结束abort-transaction 退出事务,恢复事务开始状态等。 事务的特性顺序性原子性永久性 嵌套事务
16、:父子事务提交的时机与分布式环境,第三章 分布式系统中的通信, 分布式系统中事务的实现 副本问题一致性读写分开问题 修改日志 两阶段提交 第一阶段:发送消息,检查提交准备工作并回送检查结果 第二阶段:发送消息,要求提交或abort 事务发起者即为协调者,第三章 分布式系统中的通信, 协调者需要:知道事务涉及的所有结点让所有参与者知道谁是协调者 做法Client向每个服务器发送事务函数Addserver(事务名,协调者名)每个参与者(非协调者)向协调者发送报到消息Newserver(事务名,本结点名) 协调者生成一张参与者表,在收到参与者消息后将每个参与者列入表中,第三章 分布式系统中的通信,
17、事务并发控制 锁机制可能引起死锁空间数据上锁的粒度问题 乐观机制冲突处理:为每个数据结构记录读、写时间,在提交时刻检查,若已被其他事务修改,本事务中止,否则提交。在重负载时,失败率急剧上升。 时间邮戳约定:每个数据只有一个版本,第三章 分布式系统中的通信,方法1:设置两类时间邮戳:事务开始邮戳,数据访问邮戳事务提交前检查:若事务戳晚于所涉及数据上其它的数据辍,表示该事务开始后所有数据未被其他事务访问,可以提交,否则中止提交过程,失败!方法2:时间戳分为两类四种:读(尝试读Tr,结束读Tr)、写(尝试写TW,结束写TW),读写进行时用盖“尝试”,提交时盖“结束)。不要求严格保证互斥,只需保证不同
18、事务的先后次序即可。不会引起死锁,但实现复杂。,第三章 分布式系统中的通信,例两个事务a,b(其中a先开始)的情形。 无冲突,可继续进行,其中x,y代表任意的事务B. 有冲突,需中止C. 对A而言,等待B的提交,Tr(x),Tw(y),Tw(a),Tr(a),Tr(x),Tw(y),Tr(a),Tr(b),Tw(a),Tr(b),Tw(a),Tw(b),Tr(a),Tw(b),Tr(a),Tw(b),Tw(b),Tr(a),第三章 分布式系统中的通信,3 Client/Server模型应用系统的逻辑层次:,表 示 逻 辑 应 用 逻 辑 数 据 操 纵 逻 辑 数 据 库 逻 辑,第三章 分布
19、式系统中的通信,应用系统的工作方式与结构:Host-BasedDevice-SharedClient-ServerPeer-to-Peer从分布式系统角度来看,client与server的关系就是一组协同进程关系,而且是一种主从关系协同进程。形成一对多的关系。,第三章 分布式系统中的通信,1. 寻址问题:三种寻址方式,Client 核心,server 核心,1,2,1:请求 2:服务应答,Client 核心,server 核心,3,4,1,2,1:广播 2:应答 3:请求 4:服务应答,Client 核心,server 核心,Name server 核心,1,2,3,4,1:查找 2:NS应答
20、 3:请求 4:服务应答,第三章 分布式系统中的通信,评论:第一种:绑定,不透明;第二种:开销大;第三种:集中式。 2. 消息传送原语 执行方式 阻塞方式,同步通信 非阻塞方式,异步通信 实现方式 缓冲方式,设置邮箱,消息在邮箱暂存。问题:邮箱满如何处置 非缓冲方式,不设邮箱,消息直接送入接收者指定的存储区,问题:receive必须早于send,,第三章 分布式系统中的通信,3. 可靠性问题两次确认方法,Client 核心,server 核心,1,3,2,4,服务请求 2. 请求确认 3. 服务应答 4. 应答确认 确认在核心之间进行,一次确认方法省略请求确认,以服务应答隐含代替,第三章 分布
21、式系统中的通信,Client-server通信协议,消息代码 消息类型 发送者 接收者 说 明 REQ 服务请求 client server client请求服务 REP 服务结果应答 server client server回送结果 ACK 接收消息确认 任意 任意 消息已经收到 AYA 询问:还活着吗 client server 了解是否故障 IAA 回答:还活着 server client 回答:无故障 TA 再试一次 server client server邮箱已满 AU 地址不详 server client 无进程用此地址,消息代码 消息类型 发送者 接收者 说 明 REQ 服务请求
22、 client server client请求服务 REP 服务结果应答 server client server回送结果 ACK 接收消息确认 任意 任意 消息已经收到 AYA 询问:还活着吗 client server 了解是否故障 IAA 回答:还活着 server client 回答:无故障 TA 再试一次 server client server邮箱已满 AU 地址不详 server client 无进程用此地址,第三章 分布式系统中的通信,4. 组通信组有动态性,单个结点可以是多个组的成员 组通信分类 原子组播所有组员要么全部收到,要么都不收到实现:设置定时器,发送者在定时结束时发
23、出停止传递消息接收者若未收到停止传递消息则转播(组播) 可靠组播任意组员有应答即可 不可靠组播播出去即可,第三章 分布式系统中的通信, 定序问题网络传播时间上具有不确定性,定序不当将破坏数据一致性。两个冗余的数据库服务器:,server 1,server 2,client1,client1,1,2,3,4,Client1首先组播:A改为5,B改为4;client4组播:A改为10,B改为A+B;正确结果:两库均为:A=10,B=14 若通信次序如图,server1中A=10,B=14;server2中A=5,B=4,库中A、B初值任意,第三章 分布式系统中的通信, 全局定序ABCAST类似两阶
24、段提交,发送者对消息附加“序列邮戳”并组播;接收者返回一个自己的序列邮戳(大于它任何收到或发送的邮戳值);发送者收到所有回执后,选其中最大者附加在提交消息中组播,服务器的提交工作按邮戳次序进行。 因果定序CBCAST每个组员都维护一个其个数与组员相等的向量,分别每个分量与一个组员对应,初值均为零。每个组员组播消息时,将代表自己的分量加1后发出消息,接收者接收来自成员j的消息并处理必须符合条件:Vj=Lj+1且ViLi(ij),否则延迟接收与处理。,第三章 分布式系统中的通信,A,B,C,(0,0,0),(0,0,0),(0,0,0),M1,(1,0,0),M2,(1,0,0),(1,1,0),
25、消息2虽到达,但必须推迟提交,消息1到达并提交,消息2推迟后提交,第三章 分布式系统中的通信,4 6 8 2 1 0,3 6 8 2 1 5,3 5 8 2 1 5,3 7 8 2 1 5,2 6 8 2 1 5,3 7 8 3 1 5,成员号,0,1,2,3,4,5,组播,接收,延迟,接收,延迟,接收,第三章 分布式系统中的通信, 组播的设计 原则效率:充分利用网络层提供的组播寻址功能可靠性:防止消息没有送到或只有部分送到后故障可监控:能判断成员故障,能必要时重发 设计问题讨论 封闭式与开放式小组:前者适合并行处理,后者适合冗余服务器情形 对等式与层次式结构:前者可靠但开销大,后者有集中式缺
26、点,第三章 分布式系统中的通信, 组的管理问题:设立组管理器,有集中式弊病但简单;组管理分散则复杂,开销大 组寻址问题:对网络支持的要求;利用IP表利用点对点通信实现;断言寻址法-消息中包含断言,消息周游时,接点自行判断应否接收消息 组重叠问题全局时间定序只能在组内进行,要扩大到整个系统极其复杂。根据应用逻辑,具体对待。,第三章 分布式系统中的通信,5. 远程过程调用RPC本地过程调用c = proc(fd,buf,k)前后数据栈的变化,调用前,调用中,调用后,主程序的局部变量,主程序的局部变量 K Buf Fd 返回地址 过程proc的局部变量,主程序的局部变量,sp,sp,sp,第三章 分
27、布式系统中的通信, RPC的实现分同步、异步两种,Client 应用程序,stub,stub,Server 程序,网 络,参数打包,结果打包,结果解包,参数解包,第三章 分布式系统中的通信,实现步骤:client应用程序正常调用client stubclient stub构造消息,通过trap进入核心核心将消息发送到server的核心server核心将消息交给server stubserver stub将消息解包,用相应参数调用服务例程服务例程进行计算,将结果返回server stubserver stub 构造消息,通过trap进入核心核心将消息发送到client的核心client核心接收消
28、息并将它交给相应stubstub解包,将调用结果返回应用程序,第三章 分布式系统中的通信, RPC的参数传递 数据格式问题 统一规范格式,简单但不灵活,效率也不高 增加一个参数,或在消息中指明格式,由接收者做相应处理,效率较高,但每个机器需配置完全的格式转换程序 指针类参数问题 全部禁用,不利于用户使用 复制/重新存储方法,client以实体代替指针,server生成缓冲区存放实体,计算后将缓冲区打包发回 复杂数据类型问题在GIS中,指针指向图,此时需制订专门的通信协议,详细描述数据规格,并配置相应程序读取,第三章 分布式系统中的通信, client-server的连接解决client stu
29、b与server地址的绑定问题 静态连接在client配置时,将地址登入stub。简单,不灵活 动态连接 设立地址连接服务器连接服务器维护所有服务的接口与地址,server启动时,将自己的地址与服务接口发给连接服务器,关闭时要求撤销注册;client首次使用某个RPC时,向连接服务器发消息请求得到它的接口与server地址。灵活,但开销大,具有集中式的一切弊病,第三章 分布式系统中的通信, 例外处理 找不到服务器多次发送消息都未受到应答,作为例外事件来处理,用户编写例外时间处理程序。 收不到应答消息 消息丢失按找不到服务器处理。某些特殊请求应在请求消息中注明最多执行一次,这样服务器再次收到这个
30、请求不再执行,只将结果重发。 服务器故障,第三章 分布式系统中的通信, 故障时刻:早就故障;接到请求,处理开始前故障;处理过程中故障;处理结束,发出应答消息前故障; 应对策略RPC至少处理一次,可以多次,以最后一次为准至多处理一次,可以不处理不做承诺,可以是0-n次恰好1次。,第三章 分布式系统中的通信, Client故障考虑发出请求后,收到应答前故障,使服务器无法结束事务。处理策略 清除法。Client为每次RPC做日志,恢复时显式清除RPC。但在RPC嵌套时,可能无法实现。 再生法。将时间划分为顺序编号的时段,client恢复时,广播新时段开始,有关机器接到广播后清除所有老时段的运算。 温
31、和再生法。只清除无主的RPC。 过期法。为每个RPC规定标准时限,若在标准时限内不能结束,必须先申请延长,否则自动清除。,第三章 分布式系统中的通信, 通信设计问题 协议问题 面向连接的协议Client与Server固定捆绑,简单,可靠,无需处理确认,适用于广域网;但性能较低,由于额外的软件开销,对局域网而言,本来就很可靠,必要性不大。 面向非连接的协议虽需要处理确认等以保证可靠性,但效率高,在局域网上适用。,第三章 分布式系统中的通信, 信包大小问题与使用的协议有关,原则上长信包的效率较高,例如以太网1536B,SUN更大,8K。 信包确认问题 停-等协议,上一个信包确认后才发下一个,发现丢
32、失及时补发 爆发协议,信包全部一次发完,然后总体确认。发现丢失时,局域网上往往采用全部重发,广域网上则采用有选择重发 超限处理问题,使用爆发协议时,超长消息容易引起截断性丢失问题,通常根据芯片缓冲区大小,将消息分成数段中间设置停顿。,第三章 分布式系统中的通信,4 异步通信问题 1.通信时的进程关系模型 同步模型发送进程在收到消息已被接受的确认前,不认为此次通信已经完成,进程必须等待,不再进行其他工作。 异步模型发送进程将消息放入发送信箱以后即认为此次通信已经完成,进程转而进行别的工作。问题:在异步情况,进程P向进程Q先后发出两条消息m1、m2,由于传输原因,m2先于m1到达并接收,谓之超越。
33、,第三章 分布式系统中的通信,2. 解决思路 无限制,显然问题很多 FIFO,太严格,有时无必要。无关联的消息允许无序,即使是有关联的消息也并非完全不能超越。实现问题:如何确定当前消息是第一个消息,若认为可能有超越,等待多长时间才可确定无超越。 F通道,将消息分为4类:t:两端堵塞,前后不许超越o:任意,允许超越和被超越b:向后堵塞,不许被超越f:向前堵塞,不许超越别人,第三章 分布式系统中的通信, 层次通道,将消息分为若干层次,每一层次遵循同一种通道规则。不同层次通道的消息,高层次通道的消息可以超越低层次通道的消息。 3. PCAP(process-Channel-Agent-Process
34、)模型在发送进程P和接收进程Q之间引入Agent C pq,P,Cpq,Q,P的发送序列为q1,Q的接收序列为q2,两者元素相同,次序可能不同。Q可向Cpq发送要求(例如发送序列的一个子集),Cpq按要求将消息以接收序列的次序送给Q。,第三章 分布式系统中的通信, 通道语法规则消息序列 通道语法G发送序列send接收序列recvsend recv, 表示send经符合G的若干次超越后形成接收序列recv可传送集D= m| ,表示m可以加到序列Si的首部,*,G,*,G,第三章 分布式系统中的通信,例F通道规则GFR1: o型消息可以相互超越R2: o型消息可以超越前面的f型消息R3: b 型消
35、息可以超越前面的o型消息R4: b型消息可以超越前面的f型消息这样,令层次通道规则Gh为层次间语法规则Rh和各层通道的语法规则Gi的并集: Gh=RhGi Rh: iff (mi.level mj.level),i0,第三章 分布式系统中的通信, PCAP的基本算法目的:根据语法规则的要求组织可传送集D令:m 代表任意一个消息V 代表Q的要求,是一个消息序列Sm代表发送序列Sv表示由V组成的消息序列e表示空集send(m,Q)表示将消息m发送至Q的信箱first(S)表示消息序列S的第一个元素若 S = Sm S,则:before(m,S)= Safter(m,S)= S,第三章 分布式系统中
36、的通信, Cpq的基本算法 Cpq收到来自P的消息m,Sm = mSm C收到来自Q的要求v,Sv=vSv 若Sm、Sv非空,则: x = first(Sv) 若满足 m=x 且m是Sm的可传送元素,则 将m移到Sm的首部;Sm= after(m,Sm);Sv= after(x,Sv);send(m,Q);转 否则转 转,第三章 分布式系统中的通信, 讨论与分析判断“m=x 且m是Sm的可传送元素”是算法的关键,耗时最长。同样,它与PCAP的层次通道规则Gh关系密切。这样可以改写为m=x 且mDh(这里Dh为层次通道Gh的可传送集) Gh=RhGi , Dh = LD 这里,L = m|Sm=
37、 SmS;mS且m.levelm.level (实际上,L表示了那些在它前面的元素层次都较低的元素集合) D=Di,Di=m|(m.level=I)且ExtractSame(m,Sm) Smm 这里ExtractSame(m,Sm)表示在Sm中取出与m层次相同的消息后形成的消息序列。,i0,i0,*,Gi,第三章 分布式系统中的通信,这样,m=v且mDh就变成了m=v且m(LD)引入记号,用以判断m是否可以在Sm中超越(即mL):NonLowerAhead(m, Sm)=true iff(Sm=SmS)(mS:m.levelm.level);这样再引入LevelDeliverable(m, S
38、m) = true iffExtractSame(m, Sm) Smm(即m在同一通道中可传送),*,Gi,第三章 分布式系统中的通信, 改进后的Cpq算法 收到来自P的消息m,则)Sm = mSm;)若 NonLowerAhead(m,Sm)=true 则 L=Lm;)若LevelDeliverable(m,Sm)=true 则 D=Dm; 收到来自Q的要求v,则Sv=vSv; 若SveLD e 则)x=first(Sv))若mm(LD) 则 将m移至Sm的首部,Sm= after(m, Sm ) ;L=mNonLowerAhead(m, Sm);,第三章 分布式系统中的通信,D=m|Lev
39、elDeliverable(m, Sm);send(m,Q);Sv= after(m,Sv);转 否则转 转显然,目前PCAP的算法只是定性描述,只有在确定了各子通道的类型, LevelDeliverable(m, Sm)才是确定的和可计算的。,第三章 分布式系统中的通信,5 RPC的结构模型一对多模型在这种情况,系统中存在多个Server,对一个client,其RPC发往何处并不明确。 分散式RPC以广播方式发出,每个server收到后自行判断。或抛弃(server无此服务),或执行RPC。优点:逻辑简单,client处理方便。 缺点:网络开销大,计算开销大(server需要判断,甚至重复计
40、算),第三章 分布式系统中的通信,改进型:client上配置全局服务目录,由client自行选取提供服务的server,定向发送RPC。适用于专业系统。 集中式配置服务目录agent。改进型:,Client,agent,RPC,执行结果,Server 1,Server n,agent,Server 1,Server n,Client,服务地址,询问地址,WEB Service,第三章 分布式系统中的通信,优点:减少了网络负载缺点:agent的负担过大,将成为系统的瓶颈,一旦故障,系统陷于崩溃。改进型(WEB Service)虽然部分减轻了agent的负载,但是增加了网络的开销。集中式的弊病依然
41、存在。,第三章 分布式系统中的通信,2. 多对多模型在这种情形,一个client可以同时发出多个RPC,指向多个server。 m-to-m(agent-id,n,service1,arg1,,argt1, servicen,arg1,argtn)实现模型,m-to-m,Agent leader,服务结果,返回结果,队列管理,Agent线程,(服务队列),输向server的服务请求,第三章 分布式系统中的通信,工作示意,client,agent,server,m-to-m,接收m-to-m请求,分配线程,将分服务要求插入线程,进行线程调度。 各线程分别向server发送服务请求,接收服务请求,执行服务例程。发送服务结果。,接收服务结果,根据服务存根分类存放,收齐所有结过后向client发送。,发送服务请求,回送服务结果,接收结果,向agent发送RPC请求,第三章 分布式系统中的通信,讨论:如果只有一个agent,将引起超载若有多个agent副本,之间如何协调以避免重复agent公布负载情况,供用户选择?用户规定agent次序,超载agent自动转移负载?划分agent的功能范围,划分原则静态划分,增加用户负担,不方便动态划分,管理困难划分原则的确定,