rpc是什么?
Remote Process Call 远程过程调用。
你对rpc的理解是什么?客户端调用服务端时,就像调用本地函数一样,直接使用并得到结果。
function addNum(a, b){
return a+b;
}
var sum = addNum(2,3);
如上,本地调用,那RPC如何让服务调用远程服务像调用本地函数一样呢?调用过程中会遇到哪些问题需要解决呢?
如图所示:
service1:传入参数,经过rpc框架,得到结果
service2:收到参数,执行逻辑,返回结果
RPC的主要职责:
- client端:序列化、反序列化、连接池管理、负载均衡、故障转移、队列管理,超时管理、异步管理等等
- server端:服务端组件、服务端收发包队列、io线程、工作线程、序列化反序列化等
为什么要用RPC?
平时用的比较多的一种远程调用方案基于Http协议的远程调用方案。如Http+Restful规范+序列化与反序列化构成一个完整的远程调用方案。
优点:
- 可读性好,且支持跨语言
缺点:
- 基于http协议是在应用层,包含了大量的http头信息导致有用的信息占比少
- 进程间的调用就需要对http协议层层封装,易导致效率低
- 使用http协议调用,还需要封装各种参数名和参数值
而RPC,理解为一种框架,它包括了:接口规范、序列化和反序列化、通信协议。
优点:
- 支持跨语言
- 调用远程方法就像调用本地的方法一样,数据传输效率更高
- 支持多种协议,且协议私密,安全性高
缺点:
- 可读性差,因通过牺牲可读性,提高效率
RPC框架用于屏蔽RPC调用过程中的序列化,网络传输等技术细节。让调用方只专注于调用,服务方只专注于实现调用。
什么场景可考虑使用RPC
两者的优劣,其实更多还是要站在业务场景的角度去思考选择相应的技术。可读性和效率上的抉择和自己业务需要去选择
如果使用rpc,使用的场景的考虑
- 实时通信聊天IM系统,通过rpc方式实现实时高效率消息传输
- 电商系统,业务功能多,拆解很多业务服务,服务之间都相互调用,那么内部可使用rpc
- 项目太大,需要解耦服务,扩展性强、部署灵活,这时就要用到 RPC