RPC、gRPC和HTTP的区别

RPC 只是一种屏蔽远程过程调用的设计,它与HTTP不是对立的,两者不是一个层面的概念。

RPC底层通信可以使用TCP实现(如Thrift),也可以使用HTTP实现(如gRPC),其本身并无限制。


1. 概念与定位

  • RPC(Remote Procedure Call)

    • 概念:一种设计模式,允许像调用本地函数一样调用远程服务,隐藏底层网络细节。
    • 定位:专注于跨进程的高效通信,常用于微服务内部交互。
    • 代表框架:Dubbo、Thrift、gRPC。
  • HTTP

    • 概念:基于请求-响应的应用层协议,用于客户端与服务器之间的通用通信。
    • 定位:面向资源操作(如RESTful API),适合开放API和跨平台交互。
  • gRPC

    • 概念:Google推出的高性能RPC框架,基于HTTP/2和Protocol Buffers。
    • 定位:结合RPC的效率与HTTP/2的现代特性,适合内部服务间通信

2. 协议与传输

特性RPC(传统)HTTP(RESTful)gRPC
底层协议自定义协议(如TCP)HTTP/1.1 或 HTTP/2HTTP/2
数据传输格式二进制(如Thrift)文本(JSON/XML)二进制(Protobuf)
连接复用需要自定义HTTP/1.1无,HTTP/2有多路复用(HTTP/2)
性能高(低延迟)较低(文本解析开销)极高

3. 通信模式

  • RPC
    通常仅支持简单的请求-响应模式,部分框架扩展了流式能力。

  • HTTP
    基于请求-响应,可通过分块传输或WebSocket实现简单流式通信,但不够高效。

  • gRPC
    原生支持四种模式(一元、服务端流、客户端流、双向流),得益于HTTP/2的流特性。


4. 开发体验

  • 接口定义

    • RPC:依赖IDL(接口定义语言)生成代码,强类型约束。
    • HTTP:通过OpenAPI/Swagger文档定义,灵活性高但约束弱。
    • gRPC强制使用Protobuf定义接口,生成强类型代码,减少错误。
  • 调试工具

    • HTTP:工具丰富(如Postman、curl),易于测试。
    • RPC/gRPC:需专用工具(如grpcurl、BloomRPC),调试门槛较高。

5. 适用场景

  • RPC(传统)

    • 内部服务间高性能通信(如金融交易系统)。
    • 需要自定义协议优化的封闭环境。
  • HTTP(RESTful)

    • 对外提供开放API(如移动端、第三方集成)。
    • 需要跨语言、跨平台兼容的场景。
  • gRPC

    • 微服务架构中的内部通信(如K8s生态)。
    • 需要流式传输或低延迟的场景(如实时监控、IoT)。
    • 多语言环境下的强类型接口约束需求。

6. 关键对比总结

维度RPC(传统)HTTPgRPC
协议效率高(二进制)较低(文本)最高(HTTP/2 + Protobuf)
流式支持有限需扩展(如WebSocket)原生支持
跨平台兼容性依赖框架极佳需gRPC库支持
适用场景内部高性能服务开放API、Web交互微服务、流式通信

总结

  • 选HTTP/REST:需要广泛兼容性和开放性(如对外API)。
  • 选传统RPC:已有技术栈依赖或需要深度协议定制。
  • 选gRPC:追求高性能、强类型接口和现代特性(如流式通信)。
回答: RPC(Remote Procedure Call) gRPC 是两种不同的远程过程调用协议。RPC是一种通过网络从远程计算机程序上请求服务的协议,它可以实现不同节点之间的通信。而gRPC是一种基于RPC协议的框架,它使用了Google开发的Protocol Buffers作为序列化协议编解码器,以及HTTP/2作为网络传输协议。\[1\]\[2\]\[3\] 区别在于,gRPC相比传统的RPC框架具有以下特点: 1. 序列化协议编解码器:gRPC使用Protocol Buffers作为默认的序列化协议编解码器,它可以高效地序列化传输数据。 2. 网络传输协议:gRPC使用HTTP/2作为网络传输协议,可以提供更高的性能更低的延迟。 3. 多语言支持:gRPC支持多种编程语言,包括C++、Java、Python等,可以方便地在不同的语言之间进行通信。 4. 异步支持:gRPC支持异步调用,可以提高系统的并发性能。 5. 服务定义:gRPC使用Protocol Buffers定义服务接口消息类型,可以自动生成客户端服务端的代码,简化开发过程。 总之,gRPC是一种基于RPC协议的框架,通过使用Protocol BuffersHTTP/2等技术,提供了更高效、更灵活的远程过程调用方式。 #### 引用[.reference_title] - *1* *2* *3* [Rpc gRpc 简介汇总](https://blog.csdn.net/Jailman/article/details/126056469)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星星点点洲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值