全国笔记本、surface寄修淘宝店:15weixiu.taobao.com

当前位置:IT门户网 > 网络知识 > 网络技术 >

网络传输 网络传输:远程调用往往用在网络上

时间:2021-07-22    来源:IT门户网    人气:

RPC(Remote Procedure Call):长途进程挪用,它是一种通过网络从长途计较机措施上请求处事,而不需要相识底层网络技能的思想。

RPC 是一种技能思想而非一种类型或协议,常见 RPC 技能和框架有:

应用级的处事框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。长途通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。通信框架:MINA 和 Netty。

今朝风行的开源 RPC 框架照旧较量多的,有阿里巴巴的 Dubbo、Facebook 的 Thrift、Google 的 gRPC、Twitter 的 Finagle 等。

下面重点先容三种:

gRPC:是 Google 发布的开源软件,基于最新的 HTTP 2.0 协议,并支持常见的浩瀚编程语言。RPC 框架是基于 HTTP 协议实现的,底层利用到了 Netty 框架的支持。Thrift:是 Facebook 的开源 RPC 框架,主要是一个跨语言的处事开拓框架。

用户只要在其之长举办二次开拓就行,应用对付底层的 RPC 通讯等都是透明的。不外这个对付用户来说需要进修特定规模语言这个特性,照旧有必然本钱的。

Dubbo:是阿里团体开源的一个极为着名的 RPC 框架,在许多互联网公司和企业应用中遍及利用。协议和序列化框架都可以插拔是极其光鲜的特色。

完整的 RPC 框架

在一个典范 RPC 的利用场景中,包括了处事发明、负载、容错、网络传输、序列化等组件,个中“RPC 协议”就指明白措施如何举办网络传输和序列化。

图 1:完整 RPC 架构图

如下是 Dubbo 的设计架构图,分层清晰,成果巨大:

图 2:Dubbo 架构图

RPC 焦点成果

RPC 的焦点成果是指实现一个 RPC 最重要的成果模块,就是上图中的”RPC 协议”部门:

图 3:RPC 焦点成果

一个 RPC 的焦点成果主要有 5 个部门构成,别离是:客户端、客户端 Stub、网络传输模块、处事端 Stub、处事端等。

图 4:RPC 焦点成果图

下面别离先容焦点 RPC 框架的重要构成:

客户端(Client):处事挪用方。客户端存根(Client Stub):存放处事端地点信息,将客户端的请求参数数据信息打包成网络动静,再通过网络传输发送给处事端。处事端存根(Server Stub):吸收客户端发送过来的请求动静并举办解包,然后再挪用当地处事举办处理惩罚。处事端(Server):处事的真正提供者。Network Service:底层传输,可以是 TCP 或 HTTP。

Python 自带 RPC Demo

Server.py:

from SimpleXMLRPCServer import SimpleXMLRPCServer def fun_add(a,b): totle = a + b return totle if __name__ == '__main__': s = SimpleXMLRPCServer(('0.0.0.0', 8080)) #开启xmlrpcserver s.register_function(fun_add) #注册函数fun_add print "server is online..." s.serve_forever() #开启轮回期待

Client.py:

from xmlrpclib import ServerProxy #导入xmlrpclib的包 s = ServerProxy(":8080") #界说xmlrpc客户端 print s.fun_add(2,3)

开启处事端:

开启客户端:

Wireshark 抓包阐明进程

客户端去往处事端:

客户端 IP:172.171.4.176处事端 IP:172.171.5.95

通信利用 HTTP 协议,XML 文件传输名目。传输的字段包罗:要领名 methodName,两个参数 2,3。

图 5:Request 抓包

处事端返回功效,字段返回值 Value,功效是 5:

图 6:Response 抓包

在这两次网络传输中利用了 HTTP 协议,成立 HTTP 协议之间有 TCP 三次握手,断开 HTTP 协议时有 TCP 四次挥手。

图 7:基于 HTTP 协议的 RPC 毗连进程

具体挪用进程

Python 自带 RPC 的 Demo 小措施的实现进程,流程和分工脚色可以用下图来暗示:

图 8:RPC 挪用具体流程图

一次 RPC 挪用流程如下:

处事消费者(Client 客户端)通过当地挪用的方法挪用处事。客户端存根(Client Stub)吸收到挪用请求后认真将要领、入参等信息序列化(组装)成可以或许举办网络传输的动静体。客户端存根(Client Stub)找到长途的处事地点,而且将动静通过网络发送给处事端。处事端存根(Server Stub)收到动静后举办解码(反序列化操纵)。处事端存根(Server Stub)按照解码功效挪用当地的处事举办相关处理惩罚处事端(Server)当地处事业务处理惩罚。处理惩罚功效返回给处事端存根(Server Stub)。处事端存根(Server Stub)序列化功效。处事端存根(Server Stub)将功效通过网络发送至消费方。客户端存根(Client Stub)吸收到动静,并举办解码(反序列化)。处事消费方获得最终功效。

RPC 焦点之成果实现

RPC 的焦点成果主要由 5 个模块构成,假如想要本身实现一个 RPC,最简朴的方法要实现三个技能点,别离是:

处事寻址数据流的序列化和反序列化网络传输

处事寻址

处事寻址可以利用 Call ID 映射。在当地挪用中,函数体是直接通过函数指针来指定的,可是在长途挪用中,函数指针是不可的,因为两个历程的地点空间是完全纷歧样的。

所以在 RPC 中,所有的函数都必需有本身的一个 ID。这个 ID 在所有历程中都是独一确定的。

客户端在做长途进程挪用时,必需附上这个 ID。然后我们还需要在客户端和处事端别离维护一个函数和Call ID的对应表。

相关文章

网络技术排行榜

更多>>

网络知识排行榜

更多>>

系统教程排行榜

更多>>

微信号