分布式系统进程通信

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(a) 隐式绑定
Distr_object objPref; Local_object* obj_ptr; obj_ref = …; obj_ptr = bind(obj_ref); //Declare a systemwide object reference //Declare a pointer to local objects //Initialize the reference to a distributed object //Explicitly bind and obtain a pointer to the local // proxy obj_ptr -> do_something(); //Invoke a method on the local proxy
服务器存根(Server Stub): 服务器存根 服务器存根是客户存根的等价物,将客户请求 转换为本地调用,其过程是: • 调用receive原语阻塞服务器,等待客户请求。 • 收到请求后,把参数从消息中提取出来。 • 以常规方式调用本地过程。 • 将结果打包成消息,返回给客户。
Steps of a Remote Procedure Call
Steps involved in doing remote computation through RPC
2-8
(3)传递参数
(1)网络上不同处理器的编码方案 编码方案不同 编码方案 字符编码:ASCII(PC)、EBCDIC(IBM mainframe) 多字节排列: little endian(Intel X86,低位字节在地址 较小的存储单元); big endian(Sun SPARC)。 浮点数编码:IEEE方案,MS方案
网络计算课程——
分布式系统进程通信
2006 年10月
目录
底层协议 TCP/IP 通信模型 – RPC(远程过程调用) – RMI(远程方法调用) – MOM(面向消息的中间件) – Stream
本章练习
选作下列练习之一。 1、使用Socket编写一个可以实现“聊天”功能的 服务器程序和客户程序,服务器允许同时接入 多个客户。 2、使用Sun RPC实现一个简单的远程调用程序, 例如服务器实现 n!计算。 3、使用MPI实现一个FFT分布式计算程序。
(b) 显示绑定源自文库
3、远程方法调用(RMI)
将客户绑定到对象后,客户通过代理 (proxy)来调用对象的方法。 静态调用:语言级调用,程序员生成存根,使用 预先确定的接口。 动态调用:运行时调用。运行时选择调用的接口。
四、面向消息的通信
1、Berkeley Socket(套接字) 2、MPI(消息传递接口,Message Passing Interface) 3、MOM(面向消息的中间件,Message-oriented Middleware;或称为消息队列系统Message Queuing System)
1、Berkeley Sockets
Socket primitives for TCP/IP
Primitive Socket Bind Listen Accept Connect Send Receive Close Meaning Create a new communication endpoint Attach a local address to a socket Announce willingness to accept connections Block caller until a connection request arrives Actively attempt to establish a connection Send some data over the connection Receive some data over the connection Release the connection
分布式对象: 分布式对象 接口放在一台机器上,对象本身驻留在
另一台机器上。
远程对象: 远程对象 一种分布式对象(接口与对象分别在不同
机器上),但其状态驻留在单个机器上(普通分布式 对象的状态可能在多个机器上)。
客户端:接口代理(Proxy),相当于客户存根。 服务器:骨架(Skeleton),相当于服务器存根。
(2)传递指针 传递指针 方案1:禁用指针 方案2:复制-还原。指针所指向的对象,以消息 形式传递给服务器,在服务器中复制一份对象, 建立该对象的指针,代替客户端的指针。 (3)IDL: interface definition language
3、扩展的RPC
(1) 门(door) ) 基本RPC不区分本地调用和远程调用,均使用 消息完成,在执行本地调用时效率低下。 门(door): 本地调用:IPC 远程调用:RPC (2) 异步 异步RPC 客户发出请求后继续执行。
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Client procedure calls client stub in normal way Client stub builds message, calls local OS Client's OS sends message to remote OS Remote OS gives message to server stub Server stub unpacks parameters, calls server Server does work, returns result to the server stub Server stub packs it in message, calls local OS Server's OS sends message to client's OS Client's OS gives message to client stub Client stub unpacks result, returns to client
Primit Meaning ive Put Append a message to a specified queue Block until the specified queue is Get nonempty, and remove the first message Check a specified queue for messages, Poll and remove the first. Never block. Install a handler to be called when a Notify message is put into the specified queue.
4、RPC实例
(1)DCE RPC DCE:Distributed Computing Environment 由OSF(Open Software Foundation)开发。 DCE是RPC的经典,被Microsoft系统采用。 (2)Sun RPC 更流行。参见:Marko Boger著,曹学军译, 《Java与分布式系统 》,机械工业出版社,2003 年5月。
三、远程对象调用
1、分布式对象 2、将客户绑定到对象 3、远程方法调用(RMI)
1、Distributed Objects
对象:状态、方法、接口 对象
状态:对象的性质(Properties)的取值。性质包括属 性Attributes(一元)和关系Relations(二元)。 方法:对状态的操作。 接口:公开的方法。
1、RPC需要解决的问题
不同地址空间: 客户存根和服务器存根(Stub) 参数传递: 参数编组(Parameters Marshaling) IDL(Interface Definition Language)
2、基本的RPC
(1)传统的本地过程调用(Local Procedure Call) count = read(fd, buf, nbytes) 从文件fd中读取nbytes字节,存入缓冲区buf,实 际获得的数据为count字节。 • • • • 参数入栈,返回地址入栈 转入read过程,例如C库函数或系统调用 清理堆栈 返回主程序
3、Middleware Protocols
中间件协议:分布式应用程序通用服务,例如分布式并发控 制(分布式锁定协议)、分布式事务处理(分布式提交协 议)、身份验证、授权等。
二、RPC
1984年,Birrell和Nelson提出一个全新 的分布式系统解决方法:允许程序去调用 允许程序去调用 位于其它机器上的过程。当位于机器A的 位于其它机器上的过程 一进程调用机器B上的某过程时, 机器A上 的该进程被挂起, 被调用的过程在机器B上 执行。调用者将消息放在参数表中传送给 被调用者,结果作为过程的返回值返回给 调用者。消息的传送与 操作对于程序 消息的传送与I/O操作对于程序 消息的传送与 员是不可见的。这种方法称为远程过程调 员是不可见的 用(remote procedure call),或简称为 RPC。
(2)RPC
客户端:客户存根 客户存根(Client Stub) 客户存根 客户存根是read过程的另一种版本(不同 于传统过程调用的库函数/系统调用版本),其 执行步骤与传统过程调用相同。唯一不同的是, 它不要求库函数或系统调用提供数据,而是将 参数打包成一个消息,把消息发送到服务器, 然后调用receive原语来阻塞自己,直到收到响 应消息。 客户收到响应消息后,将结果提取出来并 复制给调用程序,然后调用程序从远程read过 程返回。
Connection-oriented communication pattern using sockets
2、Message-Passing Interface (MPI)
MPI中直观的消息传递原语
Primitive MPI_bsend MPI_send MPI_ssend MPI_sendrecv MPI_isend MPI_issend MPI_recv MPI_irecv Meaning Append outgoing message to a local send buffer Send a message and wait until copied to local or remote buffer Send a message and wait until receipt starts Send a message and wait for reply Pass reference to outgoing message, and continue Pass reference to outgoing message, and wait until receipt starts Receive a message; block if there are none Check if there is an incoming message, but do not block
2、将客户绑定到对象
本地绑定(Bind): 本地绑定 在本地调用中称为连接(Link),即用户程 序连接到库函数代码或本地OS系统调用 (System Call)代码。 远程绑定: 远程绑定 对象定位(Location) 通信协议(TCP,UDP) 端点(endpoint)
Distr_object* obj_ref; //Declare a systemwide object reference obj_ref = …; // Initialize the reference to a distributed object obj_ref-> do_something(); // Implicitly bind and invoke a method
一、通信协议
1、OSI协议模型
2-1
消息封装
2-2
2、TCP/IP
OSI 应用层Application 表示层Presentation 会话层Session 传输层Transport 网络层Network 数据链路层Data Link 物理层Physical 传输层(TCP,UDP) 互联网层(IP) 主机至网络 TCP/IP 应用层Application
3、MOM
面向消息的中间件,Message-oriented Middleware; 或称为消息队列系统Message Queuing System。
使用消息队列的松耦合通信的4种组合方式
2-26 消息队列
Basic interface to a queue in a message-queuing system
相关文档
最新文档