rpc原理

一、rpc是什么

RPC全称为Remote Procedure Call,翻译过来为“远程过程调用”。通过RPC框架机器A某个进程可以通过网络调用机器B上的进程方法,就像在本地上调用一样。

二、rpc一般调用流程

  1. client发出调用方法(服务)的请求
  2. client stub作为中转站,进行请求接口、方法、参数以及服务地址、请求Id的封装,包装成RequestMessage对象、序列化——编码,最后传输到网络上去
  3. 服务端(service)经过网络接受到RequestMessage
  4. 首先server stub进行字节流的反序列化、解析requestMessage——解码,最后将请求转发给server
  5. server调用method(...),返回结果给server stub
  6. server stub将result、返回状态码、请求id等进行包装成ResponseMessage、序列化——编码、传输
  7. client stub得到字节流,进行反序列化、解析ResponseMessage——解码,将结果返给client

三、关键实现点

1. 想要实现像调用本地函数一样, 调用远程函数。 就需要实现一个stub。 该类把接口伪装成本地接口一样调用, 实际上通过网络把接口,方法,参数等信息序列化传输到远程服务器上执行, 然后收集网络传输过来的运算结果。

2. 传输信息封装和序列化。 请求信息:接口名称, 方法名称, 参数, 超时时间,requestId,返回信息需要返回值, 状态code,表示这次请求成功与否,requestid。 请求信息,返回信息都需要序列化。

3. 服务发布问题。

一般情况,如果客户端依赖的服务挂掉或者切换地址等,那么客户端可能就无法工作或者需要改变配置。为了能够达到自动切换服务、寻址等问题,就需要一个服务注册和发现功能的框架。市面上流行的是zookeeper,他可以将上线的服务注册进去,提供给客户端调用。zookeeper会不断对服务进行心跳检测,一旦服务挂掉,就会在注册中心把他消掉。客户端可以在注册中心切换到其他可用的服务

zookeeper的服务注册格式:/{service}/{version}/{ip:port}

4. 服务负载均衡问题。

中间在加入个代理服务器, 客户端不直接通过zookeeper拿到服务地址去访问, 而是代理去拿服务地址,代理再根据负载均衡策略分配服务务。负载均衡策略, 如轮询, 权重分配等。为了性能,客户端可能缓存服务地址, 隔一段时间才去请求一次代理。如果失败可以重试,或者重新向代理要服务信息。

5. 服务监控问题。

服务可以由代理进行管控。 服务失败了可以向代理进行报告。连续累计一定次数代理可以进行降级,熔断服务处理。

参考:https://www.cnblogs.com/Franken-Fran/p/rpc_fornoob.html, 这篇文章写得挺好的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值