文章目录
- RPC 和 HTTP 有哪些区别?通信协议、网络模型、服务治理框架...
-
- 不可对比性
-
- RPC
- HTTP
- 其他通信协议
- 通信协议实质
- Q&A
- 附录
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 框架中,除了协议本身数据段的约束不同,其内在更代表了不同的通信方式:长短连接、连接个数、序列化方式…
协议名称 | 序列化 | 连接 | 使用场景 |
---|---|---|---|
dubbo | Hessian 二进制序列化 | 单连接;长连接;TCP;NIO异步传输 | 传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。 |
rmi | Java标准二进制序列化 | 多连接;短连接;TCP;同步传输 | 传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。 |
… | … | … | … |
Q&A
1、如何设计一款 RPC 框架呢?
RPC\HTTP 还有很多带挖掘的点,感兴趣的可私信或关注后续博文
附录
忙碌和早起