rpc流程-1

rpc流程

rpc 概念

RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,出于一种类比的愿望,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像LPC(本地过程调用).越底层,代码越复杂、灵活性越高、效率越高;越上层,抽象封装的越好、代码越简单、效率越差。Socket和RPC的区别再次说明了这点。在传统的编程概念中,过程是由程序员在本地编译完成,并只能局限在本地运行的一段代码,也即其主程序和过程之间的运行关系是本地调用关系。因此这种结构在网络日益发展的今天已无法适应实际需求。众所周知,传统过程调用模式无法充分利用网络上其他主机的资源(如CPU、Memory等),也无法提高代码在实体间的共享程度,使得主机资源大量浪费。

通过RPC我们可以充分利用非共享内存的多处理器环境(例如通过局域网连接得多台工作站),这样可以简便地将你的应用分布在多台工作站上,应用程序就像运行在一个多处理器的计算机上一样。你可以方便的实现过程代码共享,提高系统资源的利用率,也可以将以大量数值处理的操作放在处理能力较强的系统上运行,从而减轻前端机的负担。

RPC作为普遍的C/S开发方法,开发效率高效,可靠.但RPC方法的基本原则是--以模块调用的简单性忽略通讯的具体细节,以便程序员不用关心C/S之间的通讯协议,集中精力对付实现过程.这就决定了 RPC生成的通讯包不可能对每种应用都有最恰当的处理办法,与Socket方法相比,传输相同的有效数据,RPC占用更多的网络带宽.

RPC是在Socket的基础上实现的,它比socket需要更多的网络和系统资源.另外,在对程序优化时,程序员虽然可以直接修改由rpcgen产生的令人费解的源程序,但对于追求程序设计高效率的RPC而言,获得的简单性则被大大削弱.

常见的RPC框架有阿里的Dubbo、Google的gRPC、Twitter 的Finagle,Facebook 的 Thrift,等等。

框架:Netty
通信协议:Socket、RMI。
服务发布与订阅:Zookeeper
Spring:使用Spring配置服务,加载Bean,扫描注解
消息编码与解码:使用Protostuff序列化与反序列化消息。

rpc 执行流程

rpc整体执行流程类似 B/S结构。包含一个发起调用申请的客户端client 和实现具体业务处理的服务端server。以下是具体的执行流程

  1. client 向 server 发送连接请求: client 请求连接server 对应服务接口,一般会发送client 设备的独有信息作为 server 的验证信息。
  2. server 响应 client 请求,建立连接: server 接收请求参数,生成对应权限控制信息,可能需要和client 完成消息交互确认相关信息。其中权限验证部分在rpc 中也有对应模块。
  3. server 执行对应业务之后会将执行结果通过rpc方式反馈到client端,完成一次rpc操作。
    rpc 调用流程图

示例

nfs-ganesha的写操作执行

  1. client 已挂载nfs4.0 的网络文件系统,通过echo,dd等写入命令进入内核态的系统写操作调用,随后通过nfs-client 向对应的nfs-server 的固定端口2049发送rpc 请求,执行文件写操作。
  2. server 通过监听端口接收到rpc 请求之后,执行写操作
    1. 通过work thread 执行请求的decode和消息数据的处理,传递到dispatch thread 分发对应的操作到nfsd
    2. ndsd 将请求中的多个操作依次调用,执行对应FSAL(抽象文件系统层)的对应调用。由于ganesha支持多种文件系统的导出,因此可能需要调用不同的写数据操作。
  3. 写操作执行完成之后,向上返回执行结果至client。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值