RPC原理与实现

rpc叫做远程过程调用,是指一台机器上的服务通过通信协议调用网络中另一台机器上的程序,并拿到结果。

1、基本流程

 基本流程为:

  • 客户端程序通过Client Stub调度rpc函数
  • Client Stub将调用方法、参数按照通信协议序列化成网络二进制数据;然后找到服务端实例的地址,将消息发送给这个实例;
  • 服务端按照通信协议进行反序列化解码,调用本地服务,;
  • 服务端将计算结果返回Service Stub,然后Stub按照通信协议序列化发送给Client Stub;
  • Client Stub进行反序列化,将结果返回给客户端程序。

2、RPC基本组件

(1) 通信协议

通信协议有json/xml/IDL/Protobuf等,Protobuf相较于其他协议:压缩率高,数据包更小,节约网络带宽;序列化/反序列化时间更短;兼容性、扩展性好。

protobuf 序列化原理:参考

对于int32、int64、bool、float、double、enum使用T-V存储方式,使用Variant、Zigzag对值进行压缩编码;对于string、byte使用T-L-V存储方式,T表示tag,数据类型号+标识号,L表示字段长度,V表示字段值,这样不需要分割符就可以将字段值排在一起,排列比较紧凑。使用建议:

  • 尽量用optional或repeated类型,字段在没有赋值时不会进行编码;
  • repeated字段尽量用packed=true就是,这样会使用T-L-V-V-V存储方式,更节省空间
  • 会出现负数值额字段尽量用sint32、sint64表示,sint32表示负数时会休闲用Varian编码再用Zigzag编码,压缩效率比较高;
  • 扩展性:不要修改原有字段的标识号,新增字段使用累加的标识号;新增字段使用optional或者repeated类型;尽量新增字段不子啊原来字段上修改变量名;如果要修改字段类型,注意字段类型的兼容性,int32/int64/uint32/bool,sint32/sint64,string/bytes是兼容的。

反序列化(反射)过程:

待补充

(2)服务注册与发现

分布式环境下,服务一般以集群的方式提供服务,因此Client Stub发送协议数据时要先看到集群下的服务ip列表,然后再通过负载均衡算法确定目的服务端实例。

服务注册:服务提供方将对外暴露的接口发布到注册中心内,注册中心为了检测服务的有效状态,一般会建立双向心跳机制。
服务订阅:服务调用方去注册中心查找并订阅服务提供方的 IP,并缓存到本地用于后续调用。

可以通过zookeeper、redis、etcd等实现。服务节点数据注册在zk中,zk通过心跳监控服务节点的状态,zk集群下每个节点发生更新操作都会通知其他节点进行更新,属于强一致性。当服务节点发生变化时zk就会通知给订阅的客户端。

(3)路由与负载均衡

负载均衡策略一般有轮询、随机打散(traceid)、权重、最小连接数方式(根据服务端阻塞队列长度)。也可以自定义负载均衡策略,根据服务节点CPU、内存占用率;节点的成功率、拒绝率等按权重进行打分;

(4)熔断限流

平滑限流的滑动窗口、漏斗算法以及令牌桶算法等等。

(5)异步

rpc有同步、异步两种工作方式。异步方式下客户端注册回调函数,服务端rpc执行完返回后回调函数。服务端使用多线程reactor模式,使用epoll监听网络IO,然后将请求放入阻塞队列,线程池并发处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RPC(Remote Procedure Call)即远程过程调用,是一种通过网络使远程计算机程序能够调用另一个计算机上的子程序或服务的技术。在实现一个网盘服务时,RPC框架的原理实现是十分重要的。 首先,RPC框架允许客户端程序通过网络调用服务器端程序的子程序或服务。客户端发起请求时,通过序列化参数,并通过网络将请求信息发送给服务器端。服务器端接收到请求后,通过反序列化参数,调用相应的子程序或服务,并将结果序列化后返回给客户端。客户端再通过反序列化结果,得到最终的响应。 RPC框架的实现需要解决几个核心问题。首先,需要定义好请求和响应的消息格式,包括请求的方法名、参数等信息,以及响应的状态码和结果等信息。其次,需要实现序列化和反序列化的功能,将参数和结果转换为二进制流进行网络传输。通常使用JSON、XML或Protocol Buffers等数据交换格式来实现序列化和反序列化。另外,还需实现通信协议,如使用TCP/IP协议进行网络传输。最后,需要实现服务注册与发现、负载均衡和容错机制,以确保系统的可靠性和可扩展性。 在网盘服务的具体实现中,RPC框架可以用于客户端和服务器端之间的远程文件操作。例如,客户端发起上传文件的请求时,通过RPC框架将请求信息发送给服务器端,服务器端接收到请求后,调用相应的子程序将文件写入磁盘,并将结果返回给客户端。同样地,客户端可以通过RPC框架发送下载文件的请求,并获取服务器端返回的文件内容。 总而言之,深入理解RPC框架的原理实现对于设计和实现一个高效可靠的网盘服务是十分重要的。通过RPC框架,可以实现客户端和服务器端之间的远程过程调用,从而使网盘服务更加方便和易用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值