分布式基础——RPC通信

来源:互联网 发布:解压缩zip linux 编辑:程序博客网 时间:2024/06/06 12:41

以下内容主要来自于《分布式系统原理与泛型》


进程间通信必须遵守协议。协议往往做是分层的。例如ISO 7层协议和Internet协议的4层协议。

 


 

常用的四种通信模型:

  • 远程过程调用(remote procedure call):应用于客户—服务器。
  • 远程方法调用(remote method invocation, RMI)
  • 面向消息的中间件(message - oriented middleware, MOM):高层消息队列。
  • 流(stream):多媒体,音频和视频。

 

分层协议

 

物理层协议

 

将若干位组成一个成为帧(frame)的单元,并价差每一帧是否被接收方正确接收。采用将所有自己相加,计算出校验和(checksum)

 

传输层协议

 

传输层将消息分为若干传输的足够小的块,每一块都分配一个序列号,然后将它们发送出去。在传输层报头中设计的内容包括那些包已发送,那些包已接受到、接收方所拥有的空间还能容纳多少包、那些包应该重发以及其他一些类似的主题。

 

Internet的传输控制协议(transmissioncontrol protocal,TCP).通用数据表协议(universal datagram protocal,UDP)

 

还有其他专门用途的协议。例如,为了支持实时数据传输,定制了实时传输协议(real-time transport protocl, RTP).

 

高层协议

 

常用主要有FTPHTTP协议。

但是有很多有用的协议不能算是传输协议,是中间协议

例如:软件的认证和授权。

 

通信分类

 

持久通信(persisitent Communication提交传输的信息一直由通信中间件存储。

顺时通信(transient communication)仅仅在输出传输过程中记录信息。

 

异步通信(asynchronous communication)发送方在提交传输的消息后立即往下进行。

同步通信(synchronous communication)发送方被阻塞,直到知道其请求传输已完成。

 

远程过程调用

 

RPC背后银行的思想是尽量使远程过程调用具有与本地调用相同的形式。RPC的调用是透明的。

RPC调用需要两种存根的支持:客户存根和服务器存根。

 

RPC的调用过程如下:

1,客户过程以正常的方式调用客户存根;

2,客户存根生成一个消息,然后调用本地操作系统。

3,客户端操作系统将消息发送给远程操作系统。

4,远程操作系统将消息交给服务器存根。

5,服务器存根将参数提取出来,然后调用服务器。

6,服务器执行要求的操作,操作完成后将结果返回给服务器存根。

7,服务器存根将结果打包成一个消息,然后调用本地操作系统。

8,服务器操作系统将含有结果的消息发送会客户端操作系统。

9,客户端操作系统将消息交给客户存根。

10,客户存根将结果从消息中提取出来,返回给调用它的客户过程。

 

 

参数传递

 

参数列集(parameter mashaling)把参数打包斤消息中的过程。

如果参数和结果都是标量(布尔,字符)那么相对简单。

 

这里需要处理字符集不同,数据的大端和小端。

 

传递引用参数通常会禁止传入引用,而通过使用复制-还原机制代替。如果能知道是输入参数还是输出参数,可以令性能提高一倍(服务器端就不用传回输入参数的值了)

 

RPC规定了消息的格式,并对整数、字符、布尔类型达成一直。我们可以使用接口定义语言IDL来描述接口。

 

异步RPC

 

异步RPC:在没有结果返回的时候,我们需要哦异步RPC,例如:账目转换,数据库添加数据,启动远程服务,执行批处理操作。

 

异步RPC的主要问题无法确保可靠性,客户无法确定它发出的请求是否将得到处理。

 

RPC一些注意内容

 

提供语义:

至多一次操作(at-most-once operation),这种情况下同一个调用的执行不能超过一次,即使系统崩溃时也是如此。(服务器崩溃,客户端不会提交相同的RPC内容)

幂等的(idempotent)重复多次执行该过程,而不会造成任何不良后果。(服务器崩溃回复之后,客户端可以重复提交相同内容)。


0 0
原创粉丝点击