HTTP和RPC刨析

张开发
2026/4/16 9:12:11 15 分钟阅读

分享文章

HTTP和RPC刨析
一、引出二、背景说明三、对比四、总结一、引出微服务架构在现代软件开发中变得越来越流行它将一个单体应用程序分割为多个相对独立的小服务这些服务可以独立开发、部署和维护。为了让这些分布在不同地方的服务协同工作服务之间需要通过通信协议进行交互。通常HTTP 和 RPCRemote Procedure Call远程过程调用是两个常见的微服务通信方式。在选择这两者之间时开发者需要根据具体情况仔细权衡各种因素。二、背景说明当前HTTP服务多数基于HTTP1.1协议实现其实HTTP2协议解决了HTTP1.1协议传输性能低的缺点基于streamHPACK二进制传输但是由于近几年才出来所以不太可能取代RPC三、对比接下来对比HTTP和RPC值得注意的是从上往下数第二层分别代表HTTP服务和RPC服务RESTful就代表HTTP服务的一种实现而第四层的HTTP是HTTP协议HTTP:常说的HTTP其实是HTTP协议而HTTP协议是基于TCP协议实现的HTTP协议原名为HTTP超文本传输协议可以理解为一个在计算机世界里专门在两点之间传输文字、图片、视频等超文本数据的约定与规范HTTP服务是基于HTTP协议实现的具体的实现如RESTful API在微服务架构中这种方式通常用来实现服务对外的暴露接口以便于其他服务能够使用它提供的功能为什么它通常用来实现服务对外的暴露接口呢HTTP是广泛兼容的因为大部分编程语言都提供了非常简便的HTTP库HTTP可读性强HTTP1.1)因为服务之间的数据基于JSON等易于人类理解的格式传输也易于开发者通过GET\POST等请求方法进行调试最大缺点通信性能低因为HTTP服务进行通信时要有HTTP Header里面包含大量无用的信息并且采用文本格式传输数据因此在微服务数量众多的情况下其性能瓶颈会很明显RPC:RPC不是一个协议而是一种思想。它的核心思想是让开发者像调用本地方法一样调用远程服务器上的方法屏蔽了底层的网络传输细节和序列化细节RPC通信相对于HTTP通信的重要优势就是其高效性原因是RPC采用更轻量化的数据传输格式(即二进制)RPC服务例如gRPCThriftDubbo可以基于自定义的TCP、UDP协议实现也可以基于HTTP协议实现例如gRPC底层使用HTTP2协议利用stream、Header压缩及序号复用、使用序列化后的二进制传输即有HTTP兼容性的优势也有RPC高性能的优势Dubbo 底层使用自定义 TCP 私有协议Dubbo 协议利用长连接复用、NIO 异步传输、极简 16 字节协议头及序列化后的二进制数据传输摒弃 HTTP 协议的冗余字段开销实现极致的 RPC 高性能四、总结HTTP 服务开发即开发 RESTful 风格的服务接口。在接口不多、系统之间交互较少的情况下是一种信息传递的常用通信手段。HTTP 接口的优点是简单、直接、开发方便利用现成的 HTTP 协议进行传输。在服务开发的时候约定一个接口文档严格定义输入和输出明确每一个接口的请求方法和需要的请求参数及其格式。在内部子系统较多、接口较多的情况下RPC 框架的好处就凸显出现了首先是长连接不必每次通信都要像 HTTP 那样三次握手减少了网络开销其次是 RPC 框架一般都有 注册中心有丰富的监控发布方法RPC 接口的发布、下线、动态扩展等对调用方是无感知的、统一化的操作。举例说明考虑一个典型的电商平台这个平台包括多个服务模块如用户管理、商品管理、订单处理、库存管理和支付服务等。我们来看看这些模块之间如何通信选择 HTTP 还是 RPC在这个系统中用户管理服务可能需要提供给外部应用访问的接口例如前端应用程序、移动客户端甚至是合作伙伴的系统。由于这些外部系统可能是不同的编程语言和技术栈为了实现最大的兼容性用户管理服务通常采用 HTTP 作为通信协议。这不仅方便开发人员调试和测试也确保了跨平台、跨语言的可访问性。例如用户管理服务暴露一个 GET /users/{userId} 接口来获取用户信息前端应用可以轻松地调用这个接口并渲染用户界面另一方面订单处理服务和库存管理服务之间的通信需要频繁、低延迟并且服务之间的接口是受控的、不对外部暴露。在订单创建时订单处理服务需要立即检查库存这种情况下使用 RPC 通信可以大大提高效率因为 RPC 的二进制序列化数据传输占用的网络资源更少并且调用更类似于本地函数调用这种方式的低延迟、高性能特点非常适合这种高频内部服务调用的场景支付服务通常也是一个对外暴露的服务模块涉及到与银行、支付网关等第三方系统的交互。这些第三方系统的接口可能也是基于 HTTP 的因此支付服务内部可能会使用 RPC 与订单服务、用户服务通信但与外部银行接口交互时则使用 HTTP。这种组合使用可以达到内部通信的高效性和外部交互的兼容性两者有不同的特点如果需要兼容性跨语言、跨平台对性能要求不高使用HTTP如果对性能要求更高并且开发过程使用同一的技术栈使用RPC报文结构HTTP庞大有大量无用的HTTP Header然后Header和消息体都序列化成了json格式RPC精简自定义二进制协议序列化所有数据仅包含必要信息采用二进制传输服务治理HTTP治理能力差通常需要额外部署服务代理、负载均衡、熔断限流、服务注册中心RPC治理能力强原生就集成了服务代理、负载均衡、熔断限流、服务注册中心等这里附上一张微服务架构图所以使用场景HTTP需要与外部系统集成时需要对外暴露接口或者微服务架构需要对多种不同语言的客户端提供支持例如浏览器与后端的交互那么HTTP是更好的选择RPC微服务架构内各服务之间相互调用。因为性能高完善的服务治理

更多文章