解惑HTTP&RPC

一、引言

正如我们所知的,RPC(Remote Procedure Call Protocol远程过程调用)是分布式架构的核心;HTTP是一个简单的请求-响应协议。接下来将根据以下几个问题进行讨论:

  • HTTP和RPC同一级别,还是被RPC包含?
  • Restful也属于RPC么?
  • RPC真的就比HTTP好吗?
  • 既然有 HTTP 请求,为什么还要用 RPC 调用?

写在前面:

  • 其实rpc不是一种协议,rpc是一种调用过程的方案/范式/实现。
    http+retrofit同样也可以实现rpc风格的http调用。
    dubbo框架同样也支持http(2)传输协议。
  • rpc和http不是一个层级的东西,四层和七层的rpc实现都有,而http就单纯的一个七层协议。rpc更多的是一种设计风格和规范,把方法和参数放在一起传递过去,他其实对标的是restful规范,资源方法用uri指定,参数另外放。http协议对标thrift。
  • 拿rpc和http对比没啥意义,应该是拿rpc底层的通信协议(如dubbo/grpc)对http,序列化协议(如hessian/protobuf)对json这样比较才有意义。

但是,为了解决心中的疑问,还是从以上四个问题作为切入点

参考自:
https://www.zhihu.com/question/41609070
https://www.cnblogs.com/winner-0715/p/5847638.html


二、正文

问题一:HTTP和RPC同一级别,还是被RPC包含?
问题二:Restful也属于RPC么?

对于以上两点,可以用一副图来说明:
(图源见水印)
图源见水印
答案已经显而易见了:

  • HTTP(图中蓝色框)出现了两次。其中一个是和RPC并列的,都是跨应用调用方法的解决方案;另一个则是被RPC包含的,是RPC通信过程的可选协议之一。
    因此,第一个问题的答案是都对。
  • RPC字面理解是远程过程调用,即在一个应用中调用另一个应用的方法。那Restful是满足的,通过它可以实现在一个应用中调用另一个应用的方法。但是,上述理解使得RPC的定义过于宽泛。RPC通常特指在一个应用中调用另一个应用的接口而实现的远程调用,即红色框所指的范围。这样,RPC是不包含Restful的。
    因此,第二个问题的答案是Restful不属于RPC,除非对RPC有着非常规的宽泛理解。

问题三:RPC真的就比HTTP好吗?

HTTP协议

  • 以其中的Restful规范为代表,其优势很大。它可读性好,且可以得到防火墙的支持、跨语言的支持。
  • 但是HTTP也有其缺点,这是与其优点相对应的。首先是有用信息占比少,毕竟HTTP工作在第七层,包含了大量的HTTP头等信息。其次是效率低,还是因为第七层的缘故。还有,其可读性似乎没有必要,因为我们可以引入网关增加可读性。此外,使用HTTP协议调用远程方法比较复杂,要封装各种参数名和参数值。

RPC

  • 如前面所述,基于Restful的远程过程调用有明显的缺点,主要是效率低、封装调用复杂。当存在大量的服务间调用时,这些缺点变得更为突出。
  • 服务A调用服务B的过程是应用间的内部过程,牺牲可读性提升效率、易用性是可取的。基于这种思路,RPC产生了。
  • 通常,RPC要求在调用方中放置被调用的方法的接口。调用方只要调用了这些接口,就相当于调用了被调用方的实际方法,十分易用。于是,调用方可以像调用内部接口一样调用远程的方法,而不用封装参数名和参数值等操作。

因此,不是说RPC好,也不是说HTTP好,两者各有千秋。本质上,两者是可读性和效率之间的抉择,通用性和易用性之间的抉择。应该根据业务场景进行选择。


问题四:既然有 HTTP 请求,为什么还要用 RPC 调用?

其实这个问题无非就是适合用RPC和HTTP的场景究竟是什么。

不要为了使用新技术而去使用,而应该是旧技术存在某些瓶颈,存在难以支撑或者扩展性越老越差等问题暴露出来之后,用新技术来进行解决。 ——鲁迅?

言归正传

  1. http接口是在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。利用现成的http协议 进行传输。
  2. 但是如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了
    • 首先就是长链接,不必每次通信都要像http 一样去3次握手什么的,减少了网络开销;
    • 其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统 一化的操作。
    • 第三个来说就是安全性。最后就是最近流行的服务化架构、服务化治理,RPC框架是一个强力的支撑

三、总结

RPC的目的是让你在本地调用远程的方法,而对你来说这个调用是透明的,你并不知道这个调用的方法是部署哪里。通过RPC能解耦服务,这才是使用RPC的真正目的,RPC的原理主要用到了动态代理模式。至于http协议,只是传输协议而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值