第 2章 分布式通信管理东北大学信息学院于 戈
2002年 6月
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
2
主要内容
2.1 通信基础
2.2 客户 /服务器模型
2.3 远程过程调用
2.4 组通信
2.5 习题
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
3
2.1 通信基础
开放式系统:可按照协议进行通信
协议:消息的格式、内容和意义
协议的种类
– 有连接( connection)、无连接 (connectionless)
ISO OSI参考模型分层协议( 1983)
– 接口:代表所提供功能的操作集
报文( message)格式链路层报头 其它层报头 报 文 链路层报尾
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
4
OSI参考模型分层协议进程 A 进程 B
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
5
网络技术的发展( 1)
分组交换协议
– Dr.L.Kleinrock(MIT),1962
TCP/IP协议
– R.Kahn(MIT,ARPA),V,Cerf(UCB,Stanford),
–?,IEEE通信,974
CDMA协议与 Ethernet
– Dr.B.Metcalfe(HU,MIT,PARC),1973
–?3COM,以太网适配器
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
6
网络技术的发展( 2)
ARPANET与 Internet
– IPTO,Dr.J.Licklider(1960),Dr.B.Taylor(1966)
– Dr.L.Roberts(MIT),BBN公司
– ARPANET(1969,UCB,SRI)
Stanford校园网与 LAN
– L.Bosack,S.Lerner( Stanford),1980-1983
–?Cisco(1984),Cisco路由器
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
7
ATM网络技术
ATM网:
– 可同时传递声音、数据、电视、录像、录音和其他信息的单一网络
信元( cell),
– 小的、定长的单元
信元交换:
– 同时支持点到点 (point-point)和多播
( multicast)功能
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
8
ATM参考模型
物理层:
– SONET
– OC-1(51.8M),
– OC-3c(155M)
ATM层:
– 信元传输和路由
适配层:
– VBR,CBR
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
9
信元头格式
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
10
ATM交换网络及交换机内部构造
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
11
2.2 客户服务器模型
服务器:为用户提供服务的一组协同进程
客户:用户
1
2
请求 /应答协议
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
12
消息格式
struct message {
long source; /* 发送者标识 */
long dest; /* 接受者标识 */
long opcode; /* 操作码:读、写、创建、删除 */
long result; /* 返回结果代码,成功、失败 */
long offset; /* 读写位置 */
long count; /* 读写计数 */
char filename[MAX_PATH}; /* 文件名 */
char data[BUF_SIZE]; /* 数据区 */
}
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
13
服务器程序
void main(void){
struct message m1,m2; /* 输入、输出的消息 */
int r; /* 返回的执行结果 */
while (1) {
receive(FILE_SERVER,&m1); /* 等待客户请求 */
case(m1.opcode) { /* 执行请求的操作 */
case READ,r = do_read(&m1,&m2); break;
:
default,r = E_BAD_OPCODE;
}
m2.result = r;
send(m1.source,&m2); /* 返回结果 */
}
}
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
14
客户程序
int read(char *file,int position,int nbytes,char *buf){
struct message m1; /* 消息缓冲区 */
m1.opcode = READ; /* 设置参数 */
m1.offset = position; /* 读位置 */
m1.count = nbytes; /* 读长度 */
strcpy(&m1.filename,src) /* 文件名 */
send(FILE_SERVER,&m1); /* 发送请求 */
receive(CLIENT,&m1); /* 等待服务器应答 */
if(m1.result == OK) strcpy(buf,&m1.data); /* 置缓冲区 */
return(m1.result); /* 返回结果 */
}
}
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
15
寻址方式 (Addressing)
1、机器号 +本地标识号例,UNIX
– 机器 IP地址
– 端口号 (port)
/* Socket address,internet style,*/
struct sockaddr_in {
short sin_family; /*AF_INET*/
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
16
2、广播定位进程
–全局唯一标识号
3,ASCII码进程名
–名字服务器
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
17
阻塞与非阻塞型发送 /接收
( 1)阻塞发送原语
– 同步式
( 2)非阻塞发送原语
– 异步式
– 内核缓冲区 copy
– 中断 -通知
–Test轮询接收时间时间
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
18
有缓冲与无缓冲型接收
无缓冲区
– 直接丢弃消息
– 暂存“意外”消息
有缓冲区
– 邮箱( mailbox):
– 缓存所有的输入消息
–,溢出”问题
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
19
可靠的和非可靠的发送和接收
非可靠的收发
– 可能丢失消息
– 由用户负责确认
可靠的收发
– 由系统确认( acknowledge)
a) 内核 -内核确认
b) 应答 (reply)作为确认
客户内核确认
c) 折衷方法
服务器端设置计时器,
超时后,发确认消息
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
20
实现技术小结项目 方案 1 方案 2 方案 3
寻址 机器号 稀疏的全局进程号
ASCII名
( NS)
阻塞 阻塞 copy-to-kernel式非阻塞,
中断式非阻塞缓冲 无缓冲,丢弃意外的消息无缓冲,暂存意外的消息缓存,
邮箱方式可靠性 不可靠 Request-Ack-Reply-Ack Request-Reply-Ack
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
21
包类型代码 类型 发方 收方 意义
REQ 请求 C S 客户需要服务
REP 应答 S C 服务器的回答
ACK 确认 一方 另一方 已收到包
AYA 活着吗? C S 检查服务器是否崩溃
IAA 还活着 S C 服务器在线
TA 重试 S C 服务器无空间
AU 未知地址 S C 无效地址
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
22
包交换举例
C
REQ
REP
S C
REQ
ACK
REP
ACK
S
(a) (b)
C
REQ
REP
ACK
S C
REQ
ACK
AYA
IAA
REP
ACK
S
(c) (d)
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
23
2.3 远程过程调用
像本地子程序一样,调用远地子程序
– 调用者和被调者都不用考虑消息通信
举例:
– int read(int fd,char * buf,int nbytes);
– count = read(fd,buf,nbytes);
参数传递
– call-by-value
– call-by-reference
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
24
RPC编程举例
/*生成 RPC程序 */
rpcgen FILE_RPC.x
==〉 编译结果
/* 参数定义 */
FILE_RPC_xdr.c
/* 服务器端程序 */
FILE_RPC_svc.c /* server存根 */
FILE_RPC_server.c /*服务器模版程序 */
/* 客户端程序 */
FILE_RPC_clnt.c /* client存根 */
FILE_RPC_client.c /* 客户模版程序 */
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
25
RPC申明 -- File_RPC.x
#define RPC_ARGSIZE 256
#define RPC_RETSIZE 256
/* the interface version number */
#define uSERVERVERS 1
/* program number range established
by ONC */
#define uSERVERPROG 0x20000051
struct CallArg_t {
char body[RPC_ARGSIZE];
}; /* RPC's arg data form */
struct Return_t {
char body[RPC_RETSIZE];
}; /* RPC's arg data form */
/* program definition*/
program SERVERPROG {
version SERVERVERS {
Return_t FILE_CREATE(CallArg_t) = 1;
Return_t FILE_READ(CallArg_t) = 2;
Return_t FILE_WRITE(CallArg_t) = 3;
Return_t FILE_DEL(CallArg_t) = 2;
} = uSERVERVERS;
} = uSERVERPROG;
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
26
RPC服务端程序 -- FileRPC_svc.c
.....
void main2() {
SVCXPRT *transp;
transp = svcudp_create(RPC_ANYSOCK);
svc_register(transp,SERVERPROG,
SERVERVERS,serverprog_1,
IPPROTO_UDP); /* 注册 */
transp = svctcp_create(RPC_ANYSOCK,0,0);
svc_register(transp,SERVERPROG,
SERVERVERS,serverprog_1,
IPPROTO_TCP)) ; /* 注册 */
svc_run(); // 启动 RPC
exit(1);
}
static void serverprog_1(struct svc_req *
rqstp,SVCXPRT * transp) {
union { CallArg_t file_create_1_arg;
CallArg_t file_read_1_arg;
,
} argument;
switch (rqstp->rq_proc) {
:
case FILE_READ:
xdr_argument = xdr_CallArg_t;
xdr_result = xdr_Return_t;
local = (char *(*)(char *,struct svc_req
*)) file_read_1_svc;
break;
:
default:
svcerr_noproc(transp);
return; }
}
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
27
RPC客户端程序 -- FileRPC_clnt.c
.....
/* Default timeout can be changed using clnt_control() */
static struct timeval TIMEOUT = { 25,0 };
Return_t * file_read_1(CallArg_t *argp,CLIENT *clnt)
{ static Return_t res;
bzero((char *)&res,sizeof(res));
if (clnt_call(clnt,FILE_READ,xdr_CallArg_t,argp,xdr_Return_t,&res,
TIMEOUT) != RPC_SUCCESS)
return (NULL);
}
return (&res);
}
.....
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
28
RPC执行的主要步骤
1
2
3
4
5
6
7
8
9
10
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
29
RPC执行的主要步骤
1) 客户过程以普通方式调用相应的 客户存根
2) 客户存根 建立消息并激活内核陷阱
3) 内核将消息发送到远程内核
4) 远程内核将消息送到 服务器存根
5) 服务器存根 取出消息中的参数后调用服务器的过程
6) 服务器完成工作后将结果返回至 服务器存根
7) 服务器存根 将它打包并激活内核陷阱
8) 远程内核将消息发送至客户内核
9) 客户内核将消息交给 客户存根
10) 客户存根 从消息中取出结果返回给客户
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
30
基本 RPC操作
call-by-copy/restore
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
31
参数传递
参数编组( marshalling),将参数装入消息
例,sum(4,7)远程计算
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
32
参数传递问题
编码表示,ASCII,EDBIC
数字表示:小末端、大末端
规范形式,整形、字符型、布尔型、浮点型等
指针参数:
copy/restore
dereference
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
33
动态绑定绑定、调用客户绑定器 服务器注册、取消查找
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
34
绑定接口调用 输入 输出
register
(注册 ) 名字、版本、句柄、唯一 ID
deregister
(注销 ) 名字、版本、唯一 ID
lookup
(查找 ) 名字、版本 名字、唯一 ID
句柄( handle),如 IP地址唯一标识( ID):程序号认证:身份标识
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
35
Web-Services 体系结构
SOAP消息服务提供方服务请求方服务代理方WSDL docs
使用 e-
services的应用
2
创建业务 /服务
1
发现业务 /服务
4
3
7
调用服务
8
UDDI
Registry
XSD docs
Servlets,
CGI,Perl
65检索 WSDL文档
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
36
RPC故障处理
1,客户不能定位服务器
返回错误号 errno
产生例外,SIG_NOSERVER
2,丢失请求信息
超时重发
3,丢失应答信息
等幂性请求
序号
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
37
RPC故障处理
5,服务器崩溃
至少一次
至多一次
恰好一次
6,客户崩溃
孤儿问题:资源浪费、资源封锁
解决方案:
根除、再生、温和再生、过期接收 执行 应答
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
38
RPC实现技术
1,RPC协议
面向连接的协议( TCP协议)
IP协议( UDP协议)
专门协议
2,确认
停等 (stop-and-waitt)协议
疾风( blast)协议
差错控制
流量控制:数据溢出( overrun)
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
39
RPC实现技术
3,关键路径客户机调用存根准备消息缓冲区将参数编排进缓冲区填写消息头陷入内核将上下文切换到内核将消息复制到内核确定目的地址将地址写入消息头设置网络接口启动计时器服务器机执行服务程序调用服务器在堆栈上设置参数解析参数将上下文切换到存根将消息复制到存根检查存根是否在等待确定使用哪个服务器存根检查消息包的有效性处理中断
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
40
RPC实现技术
4,复制
– DMA
– 分散 -聚集 (scatter-gather)
– 虚拟内存映射客户存根 网络内核 内核服务器存根
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
41
RPC实现技术
5,计时器管理
– 计时器列表
– 清扫( sweep)算法
6,存在的问题
– 全局变量的共享
– 弱数据类型的传递
– 指针传递
– 管道:读驱动、写驱动
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
42
2.4 组通信
组:由系统或用户确定的若干个进程的集合
– 组的成员籍( membership)
通信方式:
– 点到点通信( point-to-point),单播( unicast)
– 一到多通信 (one-to-many),多 播( multicast)、广播( broadcast)
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
43
组通信的设计
封闭组与开放组
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
44
组通信的设计
对等组与分层组参与者
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
45
组通信的设计
组的成员籍( membership)
– 组服务器
组的寻址
– 组地址
– 目的地址列表
– 谓词寻址
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
46
组通信的设计
发送和接收原语
– group_send
– group_receive
– 单程( one-way)模型
原子性
– 原子性广播:一个消息被所有成员接收到,
或者,一个也没有接收到。
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
47
组通信的设计
消息的顺序
– 全局时间顺序
– 一致性时间顺序
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
48
组通信的设计
重叠组
– 不同组之间的协调
可伸缩性
– 互联网络
– 网关
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
49
ISIS中的组通信
ISIS:康奈尔大学开发的工具集( 1987)
同步类型:
– 同步、弱同步、虚拟同步
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
50
ISIS中的组通信
事件类型:
– 因果相关的
– 并发的
ISIS广播原语
– ABCAST:弱同步
两段提交协议
– CBCAST:虚拟同步
– GBCAST:管理组成员的 ABCAST通信
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
51
CBCAST协议
n个进程设置 n维向量
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
52
CBCAST应用举例
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
53
习 题
1,编写并运行一个实现文件操作的 RPC程序。
2,过程 incr有两个整形参数。该过程将每个参数分别加 1。假设在调用 incr时使用同一个变量,如 incr(i,i)。
若 i的初值为 0,如果按 call-by-reference方式调用,i
值为多少?如果按 copy/restore方式调用,i值又为多少?
3,假设完成一个空 RPC的时间是 1.0ms,此外,传输每
1K数据需要 1.5ms。如果用 1个 32K的 RPC,从一个文件服务器中读取 32K数据需要多少时间?如果用
32个 1K的 RPC,又需要多少时间?
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
54
4,按照 ISIS协议,下图中哪些进程可执行,哪些需等待?并说明理由。
0 1 2 3 4 5
4 3 3 3 2 3
6 6 5 7 6 7
8 8 8 8 8 8
2 2 2 2 2 3
1 1 1 1 1 1
5 5 5 5 5 5
2002年 6月
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
2
主要内容
2.1 通信基础
2.2 客户 /服务器模型
2.3 远程过程调用
2.4 组通信
2.5 习题
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
3
2.1 通信基础
开放式系统:可按照协议进行通信
协议:消息的格式、内容和意义
协议的种类
– 有连接( connection)、无连接 (connectionless)
ISO OSI参考模型分层协议( 1983)
– 接口:代表所提供功能的操作集
报文( message)格式链路层报头 其它层报头 报 文 链路层报尾
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
4
OSI参考模型分层协议进程 A 进程 B
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
5
网络技术的发展( 1)
分组交换协议
– Dr.L.Kleinrock(MIT),1962
TCP/IP协议
– R.Kahn(MIT,ARPA),V,Cerf(UCB,Stanford),
–?,IEEE通信,974
CDMA协议与 Ethernet
– Dr.B.Metcalfe(HU,MIT,PARC),1973
–?3COM,以太网适配器
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
6
网络技术的发展( 2)
ARPANET与 Internet
– IPTO,Dr.J.Licklider(1960),Dr.B.Taylor(1966)
– Dr.L.Roberts(MIT),BBN公司
– ARPANET(1969,UCB,SRI)
Stanford校园网与 LAN
– L.Bosack,S.Lerner( Stanford),1980-1983
–?Cisco(1984),Cisco路由器
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
7
ATM网络技术
ATM网:
– 可同时传递声音、数据、电视、录像、录音和其他信息的单一网络
信元( cell),
– 小的、定长的单元
信元交换:
– 同时支持点到点 (point-point)和多播
( multicast)功能
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
8
ATM参考模型
物理层:
– SONET
– OC-1(51.8M),
– OC-3c(155M)
ATM层:
– 信元传输和路由
适配层:
– VBR,CBR
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
9
信元头格式
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
10
ATM交换网络及交换机内部构造
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
11
2.2 客户服务器模型
服务器:为用户提供服务的一组协同进程
客户:用户
1
2
请求 /应答协议
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
12
消息格式
struct message {
long source; /* 发送者标识 */
long dest; /* 接受者标识 */
long opcode; /* 操作码:读、写、创建、删除 */
long result; /* 返回结果代码,成功、失败 */
long offset; /* 读写位置 */
long count; /* 读写计数 */
char filename[MAX_PATH}; /* 文件名 */
char data[BUF_SIZE]; /* 数据区 */
}
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
13
服务器程序
void main(void){
struct message m1,m2; /* 输入、输出的消息 */
int r; /* 返回的执行结果 */
while (1) {
receive(FILE_SERVER,&m1); /* 等待客户请求 */
case(m1.opcode) { /* 执行请求的操作 */
case READ,r = do_read(&m1,&m2); break;
:
default,r = E_BAD_OPCODE;
}
m2.result = r;
send(m1.source,&m2); /* 返回结果 */
}
}
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
14
客户程序
int read(char *file,int position,int nbytes,char *buf){
struct message m1; /* 消息缓冲区 */
m1.opcode = READ; /* 设置参数 */
m1.offset = position; /* 读位置 */
m1.count = nbytes; /* 读长度 */
strcpy(&m1.filename,src) /* 文件名 */
send(FILE_SERVER,&m1); /* 发送请求 */
receive(CLIENT,&m1); /* 等待服务器应答 */
if(m1.result == OK) strcpy(buf,&m1.data); /* 置缓冲区 */
return(m1.result); /* 返回结果 */
}
}
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
15
寻址方式 (Addressing)
1、机器号 +本地标识号例,UNIX
– 机器 IP地址
– 端口号 (port)
/* Socket address,internet style,*/
struct sockaddr_in {
short sin_family; /*AF_INET*/
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
16
2、广播定位进程
–全局唯一标识号
3,ASCII码进程名
–名字服务器
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
17
阻塞与非阻塞型发送 /接收
( 1)阻塞发送原语
– 同步式
( 2)非阻塞发送原语
– 异步式
– 内核缓冲区 copy
– 中断 -通知
–Test轮询接收时间时间
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
18
有缓冲与无缓冲型接收
无缓冲区
– 直接丢弃消息
– 暂存“意外”消息
有缓冲区
– 邮箱( mailbox):
– 缓存所有的输入消息
–,溢出”问题
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
19
可靠的和非可靠的发送和接收
非可靠的收发
– 可能丢失消息
– 由用户负责确认
可靠的收发
– 由系统确认( acknowledge)
a) 内核 -内核确认
b) 应答 (reply)作为确认
客户内核确认
c) 折衷方法
服务器端设置计时器,
超时后,发确认消息
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
20
实现技术小结项目 方案 1 方案 2 方案 3
寻址 机器号 稀疏的全局进程号
ASCII名
( NS)
阻塞 阻塞 copy-to-kernel式非阻塞,
中断式非阻塞缓冲 无缓冲,丢弃意外的消息无缓冲,暂存意外的消息缓存,
邮箱方式可靠性 不可靠 Request-Ack-Reply-Ack Request-Reply-Ack
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
21
包类型代码 类型 发方 收方 意义
REQ 请求 C S 客户需要服务
REP 应答 S C 服务器的回答
ACK 确认 一方 另一方 已收到包
AYA 活着吗? C S 检查服务器是否崩溃
IAA 还活着 S C 服务器在线
TA 重试 S C 服务器无空间
AU 未知地址 S C 无效地址
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
22
包交换举例
C
REQ
REP
S C
REQ
ACK
REP
ACK
S
(a) (b)
C
REQ
REP
ACK
S C
REQ
ACK
AYA
IAA
REP
ACK
S
(c) (d)
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
23
2.3 远程过程调用
像本地子程序一样,调用远地子程序
– 调用者和被调者都不用考虑消息通信
举例:
– int read(int fd,char * buf,int nbytes);
– count = read(fd,buf,nbytes);
参数传递
– call-by-value
– call-by-reference
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
24
RPC编程举例
/*生成 RPC程序 */
rpcgen FILE_RPC.x
==〉 编译结果
/* 参数定义 */
FILE_RPC_xdr.c
/* 服务器端程序 */
FILE_RPC_svc.c /* server存根 */
FILE_RPC_server.c /*服务器模版程序 */
/* 客户端程序 */
FILE_RPC_clnt.c /* client存根 */
FILE_RPC_client.c /* 客户模版程序 */
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
25
RPC申明 -- File_RPC.x
#define RPC_ARGSIZE 256
#define RPC_RETSIZE 256
/* the interface version number */
#define uSERVERVERS 1
/* program number range established
by ONC */
#define uSERVERPROG 0x20000051
struct CallArg_t {
char body[RPC_ARGSIZE];
}; /* RPC's arg data form */
struct Return_t {
char body[RPC_RETSIZE];
}; /* RPC's arg data form */
/* program definition*/
program SERVERPROG {
version SERVERVERS {
Return_t FILE_CREATE(CallArg_t) = 1;
Return_t FILE_READ(CallArg_t) = 2;
Return_t FILE_WRITE(CallArg_t) = 3;
Return_t FILE_DEL(CallArg_t) = 2;
} = uSERVERVERS;
} = uSERVERPROG;
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
26
RPC服务端程序 -- FileRPC_svc.c
.....
void main2() {
SVCXPRT *transp;
transp = svcudp_create(RPC_ANYSOCK);
svc_register(transp,SERVERPROG,
SERVERVERS,serverprog_1,
IPPROTO_UDP); /* 注册 */
transp = svctcp_create(RPC_ANYSOCK,0,0);
svc_register(transp,SERVERPROG,
SERVERVERS,serverprog_1,
IPPROTO_TCP)) ; /* 注册 */
svc_run(); // 启动 RPC
exit(1);
}
static void serverprog_1(struct svc_req *
rqstp,SVCXPRT * transp) {
union { CallArg_t file_create_1_arg;
CallArg_t file_read_1_arg;
,
} argument;
switch (rqstp->rq_proc) {
:
case FILE_READ:
xdr_argument = xdr_CallArg_t;
xdr_result = xdr_Return_t;
local = (char *(*)(char *,struct svc_req
*)) file_read_1_svc;
break;
:
default:
svcerr_noproc(transp);
return; }
}
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
27
RPC客户端程序 -- FileRPC_clnt.c
.....
/* Default timeout can be changed using clnt_control() */
static struct timeval TIMEOUT = { 25,0 };
Return_t * file_read_1(CallArg_t *argp,CLIENT *clnt)
{ static Return_t res;
bzero((char *)&res,sizeof(res));
if (clnt_call(clnt,FILE_READ,xdr_CallArg_t,argp,xdr_Return_t,&res,
TIMEOUT) != RPC_SUCCESS)
return (NULL);
}
return (&res);
}
.....
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
28
RPC执行的主要步骤
1
2
3
4
5
6
7
8
9
10
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
29
RPC执行的主要步骤
1) 客户过程以普通方式调用相应的 客户存根
2) 客户存根 建立消息并激活内核陷阱
3) 内核将消息发送到远程内核
4) 远程内核将消息送到 服务器存根
5) 服务器存根 取出消息中的参数后调用服务器的过程
6) 服务器完成工作后将结果返回至 服务器存根
7) 服务器存根 将它打包并激活内核陷阱
8) 远程内核将消息发送至客户内核
9) 客户内核将消息交给 客户存根
10) 客户存根 从消息中取出结果返回给客户
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
30
基本 RPC操作
call-by-copy/restore
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
31
参数传递
参数编组( marshalling),将参数装入消息
例,sum(4,7)远程计算
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
32
参数传递问题
编码表示,ASCII,EDBIC
数字表示:小末端、大末端
规范形式,整形、字符型、布尔型、浮点型等
指针参数:
copy/restore
dereference
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
33
动态绑定绑定、调用客户绑定器 服务器注册、取消查找
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
34
绑定接口调用 输入 输出
register
(注册 ) 名字、版本、句柄、唯一 ID
deregister
(注销 ) 名字、版本、唯一 ID
lookup
(查找 ) 名字、版本 名字、唯一 ID
句柄( handle),如 IP地址唯一标识( ID):程序号认证:身份标识
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
35
Web-Services 体系结构
SOAP消息服务提供方服务请求方服务代理方WSDL docs
使用 e-
services的应用
2
创建业务 /服务
1
发现业务 /服务
4
3
7
调用服务
8
UDDI
Registry
XSD docs
Servlets,
CGI,Perl
65检索 WSDL文档
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
36
RPC故障处理
1,客户不能定位服务器
返回错误号 errno
产生例外,SIG_NOSERVER
2,丢失请求信息
超时重发
3,丢失应答信息
等幂性请求
序号
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
37
RPC故障处理
5,服务器崩溃
至少一次
至多一次
恰好一次
6,客户崩溃
孤儿问题:资源浪费、资源封锁
解决方案:
根除、再生、温和再生、过期接收 执行 应答
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
38
RPC实现技术
1,RPC协议
面向连接的协议( TCP协议)
IP协议( UDP协议)
专门协议
2,确认
停等 (stop-and-waitt)协议
疾风( blast)协议
差错控制
流量控制:数据溢出( overrun)
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
39
RPC实现技术
3,关键路径客户机调用存根准备消息缓冲区将参数编排进缓冲区填写消息头陷入内核将上下文切换到内核将消息复制到内核确定目的地址将地址写入消息头设置网络接口启动计时器服务器机执行服务程序调用服务器在堆栈上设置参数解析参数将上下文切换到存根将消息复制到存根检查存根是否在等待确定使用哪个服务器存根检查消息包的有效性处理中断
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
40
RPC实现技术
4,复制
– DMA
– 分散 -聚集 (scatter-gather)
– 虚拟内存映射客户存根 网络内核 内核服务器存根
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
41
RPC实现技术
5,计时器管理
– 计时器列表
– 清扫( sweep)算法
6,存在的问题
– 全局变量的共享
– 弱数据类型的传递
– 指针传递
– 管道:读驱动、写驱动
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
42
2.4 组通信
组:由系统或用户确定的若干个进程的集合
– 组的成员籍( membership)
通信方式:
– 点到点通信( point-to-point),单播( unicast)
– 一到多通信 (one-to-many),多 播( multicast)、广播( broadcast)
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
43
组通信的设计
封闭组与开放组
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
44
组通信的设计
对等组与分层组参与者
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
45
组通信的设计
组的成员籍( membership)
– 组服务器
组的寻址
– 组地址
– 目的地址列表
– 谓词寻址
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
46
组通信的设计
发送和接收原语
– group_send
– group_receive
– 单程( one-way)模型
原子性
– 原子性广播:一个消息被所有成员接收到,
或者,一个也没有接收到。
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
47
组通信的设计
消息的顺序
– 全局时间顺序
– 一致性时间顺序
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
48
组通信的设计
重叠组
– 不同组之间的协调
可伸缩性
– 互联网络
– 网关
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
49
ISIS中的组通信
ISIS:康奈尔大学开发的工具集( 1987)
同步类型:
– 同步、弱同步、虚拟同步
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
50
ISIS中的组通信
事件类型:
– 因果相关的
– 并发的
ISIS广播原语
– ABCAST:弱同步
两段提交协议
– CBCAST:虚拟同步
– GBCAST:管理组成员的 ABCAST通信
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
51
CBCAST协议
n个进程设置 n维向量
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
52
CBCAST应用举例
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
53
习 题
1,编写并运行一个实现文件操作的 RPC程序。
2,过程 incr有两个整形参数。该过程将每个参数分别加 1。假设在调用 incr时使用同一个变量,如 incr(i,i)。
若 i的初值为 0,如果按 call-by-reference方式调用,i
值为多少?如果按 copy/restore方式调用,i值又为多少?
3,假设完成一个空 RPC的时间是 1.0ms,此外,传输每
1K数据需要 1.5ms。如果用 1个 32K的 RPC,从一个文件服务器中读取 32K数据需要多少时间?如果用
32个 1K的 RPC,又需要多少时间?
2002-6-7
东北大学软件所 于戈 第二章 分布式通信管理
54
4,按照 ISIS协议,下图中哪些进程可执行,哪些需等待?并说明理由。
0 1 2 3 4 5
4 3 3 3 2 3
6 6 5 7 6 7
8 8 8 8 8 8
2 2 2 2 2 3
1 1 1 1 1 1
5 5 5 5 5 5