如何理解RPC(远程过程调用)?

**RPC(Remote Procedure Call)**是指远程过程调用,分布式促使了RPC的诞生。

本地过程调用:比如你妈现在在家,需要扫地,她自己拿起扫帚开始打扫。
远程过程调用:比如你妈现在不在家,需要扫地,她发微信告诉你,你拿起扫帚开始打扫。

使用RPC要解决的问题:

  1. 解决分布式系统中,服务之间的调用问题。
  2. 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。

比如有一个计算器的接口Counter,以及它的实现类CounterImpl,要使用Counter的minus方法做减法,通过new CounterImpl().minus(3, 1)实现。因为在同一个地址空间,所以这就是本地函数调用。
本地过程调用

基于高性能和高可靠等因素的考虑,可以将系统改为分布式应用,把很多可以共享的功能都单独拎出来。比如上面说到的计算器,你可以单独把它放到一个服务里头,让别的服务去调用它,这就是远程过程调用。
远程过程调用
服务A要调用服务B中CalculatorImpl的add方法:

  • 服务B暴露一个Restful接口,服务A通过调用Restful接口来间接调用CalculatorImpl的add方法
  • 代理模式,结合Spring IoC一起使用,在calculator对象上添加@Reference注解,通过Spring注入calculator对象,可以让使用者感知不到远程过程调用

RPC vs Restful
RPC是面向过程,Restful是面向资源。RPC涉及的范围更广。
以RPC风格的URL和Restful风格的URL做比较:
RPC风格:

/queryStudent?studentId=123

Restful风格:

Get  
/student/123

RPC是一种编程模型,并没有规定要如何实现,实现一个RPC可能不算很难,难的是实现一个高性能高可靠的RPC框架。

谈起RPC,就必然会有分布式,那么一个服务就有可能会有多个实例,调用时,又该如何获取实例的地址呢?

这时候就需要一个服务注册中心,比如在Dubbo里头,就可以使用Zookeeper作为注册中心,在调用时,从Zookeeper获取服务的实例列表,再从中选择一个进行调用。

然后需要使用负载均衡选择一个实例调用。

调用时都去注册中心查询实例列表会使效率降低,于是就有了缓存,有了缓存之后就应该要考虑缓存的更新问题…等等。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值