RPC基础 | 青训营笔记

62 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第8天

什么是 rpc? RPC(Remote Procedure Call)——远程过程调用,是一种在不知道底层网络技术的情况下,通过网络向远程计算机程序请求服务的协议。 RPC 协议假定存在某种传输协议,例如 TCP 或 UDP,以在通信程序之间承载信息数据。

例如。 通常,你妈妈叫你回家吃饭。 面送是本地程序调用,你妈通过微信或者电话告诉你。 然后你在家吃饭就是一个远程过程调用。

什么时候使用 RPC? 说到RPC就免不了提到分布式,分布式正是促使RPC诞生的领域。 比如开发一个电子商务系统,需要拆分出用户服务、支付服务、订单服务、物流服务、售后服务等,这些服务之间相互调用。 这时候内部调用最好使用RPC,每个服务都可以独立Deploy。 也就是说,当我们的项目规模过大,需要服务解耦、扩展性强、部署灵活的时候,这时候就必须使用RPC,它主要解决分布式系统中服务之间的调用问题。

例子

在付费服务中调用用户服务的GetUserInfo方法呢? 在用户服务中暴露了一个Restful接口,然后支付服务通过调用这个Restful接口间接调用GetUserInfo方法。 这样一来,已经很接近RPC了,但是每次这种调用需要写一系列代码发起http请求吗? 比如httpClient.sendRequest...等等,能不能简单点,像本地方法调用一样,发起远程调用,让用户感知不到远程调用的过程。 屏蔽工作可以通过使用代理方式生成一个代理对象来解决,代理对象内部是通过httpClient实现RPC远程过程调用。

RPC要解决的两个问题

解决分布式系统中服务之间的调用问题。 在进行远程调用时,一定要像本地调用一样方便,让调用者感知不到远程调用的逻辑。 RPC 框架的好处 跨语言(C++、PHP、Java、Python...) 长链接不需要像http一样每次握手3次,减少了网络开销; RPC框架一般都有注册中心,有丰富的监控管理; 发布、下线接口、动态扩展等,对于调用者来说都是无感知的统一操作。 安全。 数据传输效率高 支持动态扩展 RPC框架原理

RPC架构主要包括三部分:

服务注册中心(Registry)负责将本地服务发布为远程服务,管理远程服务,并提供给服务消费者。 服务提供者(Server),提供服务接口定义和服务实现类。 服务消费者(Client)通过远程代理对象调用远程服务。 服务提供者启动后,主动向服务注册中心(Registry)注册本机IP、端口和服务列表; 服务消费者启动时,从服务注册中心(Registry)获取服务提供者的地址列表。 服务注册中心(Registry)可以实现负载均衡和故障转移。

概括 RPC主要用于公司内部的服务调用,性能消耗低,传输效率高,实现复杂。 HTTP主要用于外部异构环境、浏览器接口调用、App接口调用、第三方接口调用等。 RPC使用场景(大型网站、内部子系统多、接口多适合使用RPC)