RPC 和 HTTP 有哪些区别?通信协议网络模型服务治理框架...

Posted 魏小言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RPC 和 HTTP 有哪些区别?通信协议网络模型服务治理框架...相关的知识,希望对你有一定的参考价值。


RPC 和 HTTP 有哪些区别?通信协议、网络模型、服务治理框架…

之前有小朋友问 RPC 请求和 HTTP 请求有什么区别?

公司里服务之间使用 RPC 、对外服务的接口用 HTTP、跨语言服务交互的时候用基于 HTTP 的 RPC …
很多场景使用不同的方式,这里总的来简单梳理一下,更深一点的等时间充裕了再码文!

不可对比性

RPC 和 HTTP 从本质上根本没有可比性。

  • HTTP 超文本传输协议,是因特网上应用最为广泛的一种网络传输协议。
  • RPC 服务进程通信方式中同步过程调用的一种实现方式统称。

RPC

在应用服务中,为了提高可用性、保障应用价值快速持续的交付,往往会把应用拆分为多个服务,多个服务协同对外提供业务功能支撑。

服务之间相互通信方式统称为 IPC [inter-process communication]。IPC 有两种实现方式,分别是 同步过程调用、异步消息调用。在同步过程调用的具体实现中,有一种实现方式为 RPC 通信方式,远程过程调用[Remote Procedure Call]。RPC 这种方式,可以让两个不同服务的子进程进行交互,就像是调用本地方法一样。

RPC 交互一般为应用内部服务通信,通信双方信息了解,可根据服务业务场景自定义通信协议。目前业界的 RPC 交互框架都分别支持各自定义的协议类型及数据格式。
如,阿里的 Dubbo 框架 支持 thrift、webservice、hessian、dubbo…;百度的 Ral 框架 支持 msgpack、ral、ral2、http…;京东的 JSF 框架 支持 jsf…;微博的 Motan 框架支持 motan、motan2、http…

注意,这里的通信协议中包含了 HTTP 协议。

HTTP

在应用服务对外交互时,通常都是以 HTTP 协议开头,就像我们日常访问的网页、APP、浏览器…等都是通过 URI 定位资源路径;
在 云原生应用架构中,提倡使用 已发布和版本化的API通信,这些API通常是具有 JSON 序列化的 HTTP REST 风格;……

归结出来,HTTP 更具有通用性,更灵活。其屏蔽了底层服务技术实现,而且 REST 风格开发成本低…

其他通信协议

有了 HTTP 协议,为什么还有其他协议呢?像 msgpack、dubbo…

因为 HTTP 臃肿,效率并非最优。

在网络模型中,RPC 你可以理解为 会话层机制。而 HTTP 则属于最上层应用层,通过 三次握手、四次挥手建立连接;协议约束从网络层,每层都会对数据流增加 Header 信息;在传输层会对数据流补充系列校验等信息……

在一些服务内部场景中,HTTP 显得很臃肿,在资源占用、传输效率、数据有效率…等方面略输一筹;故各个团队根据不同的使用场景,开发设计自定义的通信协议,使服务通信效率更高、更快,各种通信协议就诞生了。

通信协议实质

在业界的各种服务治理 RPC 框架中,除了协议本身数据段的约束不同,其内在更代表了不同的通信方式:长短连接、连接个数、序列化方式…

协议名称序列化连接使用场景
dubboHessian 二进制序列化单连接;长连接;TCP;NIO异步传输传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。
rmiJava标准二进制序列化多连接;短连接;TCP;同步传输传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。

Q&A

1、如何设计一款 RPC 框架呢?

RPC\\HTTP 还有很多带挖掘的点,感兴趣的可私信或关注后续博文

附录

忙碌和早起

以上是关于RPC 和 HTTP 有哪些区别?通信协议网络模型服务治理框架...的主要内容,如果未能解决你的问题,请参考以下文章

手写RPC,深入底层理解整个RPC通信

RPC和HTTP的区别

基于TCP和HTTP协议的RPC简单实现

Http与RPC通信协议的比较

Http与RPC通信协议的比较

简单Tomcat HTTP RPC框架