RPC与HTTP的关系

首选理清楚关系

RPC与HTTP是两个不同维度的东西

HTTP 协议(Hyper Text Transfer Protocol),又叫做超文本传输协议,是一种传输协议,平时通过浏览器浏览网页网页,用到的就是 HTTP 协议。

RPCRemote Procedure Call),又叫做远程过程调用。它本身并不是一个具体的协议,而是一种调用方式

RPC这种调用方式,主要有两部分组成

  1. 传输协议
  2. 序列化方式

传输协议有多种,比如HTTP协议、自研协议等。

序列化方式有很多种,比如二进制流,JSON,XML等

所以HTTP协议只是RPC中传输协议中的一种

如果传输协议与序列化方式选择HTTP与JSON,只要封装的好,也能实现这个远程调用,也能称之为RPC。

只不过早期的RPC因为传输效率的原因,大多没有选择HTTP与JSON,而是自研协议与二进制传输。

网上区分RPC与HTTP的文章太多了,我也没必要重复,所以我提供一种新的角度,就是根据历史的发展进行解释。

历史发展

早期互联网,大多是C/S架构,并且不需要对外开发API,仅自己内部调用(中国互联网对外开放事件:3Q大战),并且大家的带宽还很低,此时的HTTP协议还是1.0(1.0传输效率低,具体为什么,后面会讲)。

基于以上背景,当时需要一种高效率的传输方式,并且不需要考虑兼容性。

所以在传输协议的选择上,基于TCP的自研协议的RPC就应运而生了。

也是因为上述相同的历史背景,所以当时传输信息的序列化方式不是现在流行的JSON或者XML,而是二进制流,因为体积更小,传输效率更高。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

内部系统

但是对于大型企业来说,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了,首先就是长链接,不必每次通信都要像http一样去3次握手什么的,减少了网络开销;

其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。

RPC额外优势

一般RPC框架,不仅仅有传输功能,还添加了很多其他功能,比如服务发现、负载均衡、链路追踪、限流降级等等。比如这里的Dubbo

在这里插入图片描述

为什么不直接使用TCP协议?

这里就不赘述,简单说TCP协议有自身的问题,比如粘包问题等,直接使用会有问题,所以都是基于TCP的自研协议。

RPC 协议 https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/

HTTP协议为什么效率低?

一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。

在这里插入图片描述

HTTP请求报文

在这里插入图片描述

这里可以看出,HTTP协议为了传输内容,前后增加了很多“冗余”的字段,当然这里的“冗余”是为了通用性与兼容性,毕竟HTTP协议要兼容大多数不同的浏览器与不同的设备。

但是如果不需要考虑兼容性,只针对具体的设备,那就是真冗余了

为什么现在用了HTTP协议?

现在很多是直接使用HTTP协议,并且现在很多RPC框架也是使用的HTTP协议,原因如下

  • 因为HTTP也一直在升级,也优化了性能
  • 网友的带宽也在提升,对性能要求没这么高了
  • 兼容性,之前接口仅需支持单个设备,现在需要支持多设备了,而HTTP的兼容性是最好的,几乎所有设备都会支持
  • 成本问题:自研也需要开发成本,还要考虑兼容性。

基于以上原因,如果对性能没有极致要求,没必要自研协议,直接使用HTTP协议

总结

RPCRemote Procedure Call),又叫做远程过程调用。它本身并不是一个具体的协议,而是一种调用方式,只要能够实现这种调用方式都可以称为RPC

实现RPC有两个核心点,传输协议序列化方式,而HTTP只是传输协议中的一种。

参考

RPC 协议 https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/

既然有 HTTP 协议,为什么还要有 RPC?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
拍拍贷微服务rpc框架源码.zip # 拍拍贷微服务体系 拍拍贷微服务体系是拍拍贷基础框架部总结内部微服务多年实践,参考、吸收大量业内解决方案形成的适合中型互联网公司的微服务解决方案。 拍拍贷微服务体系主要组成部分: - Raptor rpc框架。 - Radar服务注册中心。 - Kong网关。 微服务实例启动之后,会自动注册到radar服务注册中心,实例启动正常后,kong网关周期性的将实例信息同步到kong的插件配置。微服务之间的调用、zuul网关调用微服务,都是通过域名进行调用,域名解析到kong网关。Kong网关根据域名和微服务的对应关系,对微服务实例进行负载均衡运算后,得到一个实例,最终进行调用。 拍拍贷微服务体系主要架构考虑: - 由Kong网关形成的集中式服务治理。降低由于客户端服务治理bugfix等引起的升级成本。 - 采用HTTP 1.1作为底层传输协议,从外部到内部无需进行协议转换。 - 采用HTTP 1.1 作为底层传输协议,不会引起原有基于HTTP协议的已有设施失效。 # Raptor微服务rpc组件 Raptor微服务rpc组件是拍拍贷基础框架部参考、借鉴了大量已有rpc框架、rpc组件的设计,研发的一款基于google protobuf的轻量级,可扩展的rpc组件。 **Raptor设计理念:** - 微内核。Raptor核心实现raptor rpc必须的服务定义、protobuf序列化/反序列化、扩展接口和最小化实现。 - 可扩展。Raptor核心预留了Client、Endpoint等可扩展接口,提供相应的实现即可替换掉默认的实现。 - 模块化。Raptor核心不提供组装能力,raptor核心提供了rpc框架所需的核心组件,由外部框架进行组装。例如,raptor默认实现提供了基于spring-boot的组装方式。 **Raptor的价值:** - 契约驱动开发模式,以protobuf为契约,帮助企业规模化生产。 - JAVA语言开发,工程性好,保护原有技术投资。 - 预留兼容性,以protobuf为契约,符合社区技术趋势,为后续以protobuf为基础做技术升级留下兼容性。例如,引入grpc,业务契约无需改变。 - 灵活性,可采用集中治理,也可以采用客户端治理;可使用protobuf binary over HTTP也可以使用protobuf json over HTTP,服务提供方根据HTTP头自适应;为架构师留下灵活的选择余地。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值