REST RPC dubbo,HSF 协议总结

最近工作中发现,很多开发同学对REST RPC dubbo,HSF 协议了解的不是很清楚,突来灵感,金额兴致,借助AI和自己的笔记,总结一下

要想了解,得先了解一下,HTTP,和TCP 的区别,他们不是两种协议,更像是同一个东西的不同形态

一:TCP和HTTP

HTTP 和 TCP 是网络通信中两个不同层次的协议,它们不是"同类对比",而是 "上层 vs 下层" 的关系。理解它们的区别,关键在于掌握 OSI 七层模型 或 TCP/IP 四层模型。

TCP 负责"把数据安全送到",

HTTP 负责"送什么内容、怎么解释"。

这里面其实可以衍生很多东西,常见的7层网关和4层网关等等

|--------|-----------------------------|-----------------------------|
| 项目 | TCP | HTTP |
| 协议层级 | 传输层(Transport Layer) | 应用层(Application Layer) |
| 作用 | 提供可靠、有序、无丢包的字节流传输 | 定义客户端与服务器之间如何交换数据(如网页、API) |
| 依赖关系 | HTTP 运行在 TCP 之上 | HTTP 必须依赖 TCP(或其他传输协议) 才能工作 |
| 是否面向连接 | 是(三次握手建立连接) | 本身无连接,但底层 TCP 有连接 |
| 数据单位 | 字节流(byte stream) | 报文(Request/Response) |
| 典型端口 | 任意(如 80、443、8080 都跑在 TCP 上) | 默认 80(HTTP)、443(HTTPS) |

1.1:技术细节对比

1. TCP(Transmission Control Protocol)

  • 位置:传输层(Layer 4)
  • 功能
    • 建立连接(三次握手)
    • 保证数据可靠传输(确认、重传、排序)
    • 流量控制 & 拥塞控制
  • 特点
    • 面向连接
    • 全双工通信
    • 无消息边界(只传字节流,应用层自己切分)
  • 例子
    • 所有 Web 请求(HTTP/HTTPS)
    • 数据库连接(MySQL、Redis)
    • 文件传输(FTP)
    • 邮件(SMTP)

💡 几乎所有需要"可靠传输"的应用都基于 TCP。


2. HTTP(HyperText Transfer Protocol)

  • 位置:应用层(Layer 7)
  • 功能
    • 定义请求/响应格式(GET / POST / Status Code / Headers / Body)
    • 规范资源定位(URL)
    • 支持缓存、认证、会话等高级语义
  • 特点
    • 无状态(每个请求独立,除非用 Cookie/Session)
    • 基于文本(HTTP/1.x),可读性强
    • 默认短连接(HTTP/1.1 支持 keep-alive 复用 TCP 连接)
  • 依赖:底层必须有传输协议(通常是 TCP,HTTPS 是 HTTP + TLS + TCP)

💡 HTTP 是"跑在 TCP 之上的一个具体应用协议"。


1.2、常见误区澄清

误区 1:"HTTP 和 TCP 是并列的两种协议"

→ 错!HTTP 构建在 TCP 之上,属于不同层级。

误区 2:"Feign 用的是 HTTP,Dubbo 用的是 TCP,所以 Dubbo 更底层"

→ 不准确。Dubbo 默认用 自定义二进制协议 + TCP ,而 Feign 用 HTTP + TCP

两者都用了 TCP,只是应用层协议不同。

误区 3:"UDP 比 TCP 快,所以 HTTP 应该跑在 UDP 上"

→ HTTP/1 和 HTTP/2 都基于 TCP。

HTTP/3 已改用 QUIC(基于 UDP),这是为了优化连接建立和多路复用。

二:REST RPC dubbo,HSF

2.1、基本概念澄清

|-------|-------------|--------------------------------------------------------------|
| 名称 | 类型 | 说明 |
| REST | 架构风格 / 通信方式 | 基于 HTTP 的面向资源的 API 设计风格,使用标准 HTTP 方法(GET/POST/PUT/DELETE) |
| RPC | 编程模型 / 范式 | Remote Procedure Call(远程过程调用),让调用远程服务像调用本地方法一样 |
| Dubbo | RPC 框架 | 阿里开源的高性能 Java RPC 框架,支持多种协议(默认 dubbo 协议) |
| HSF | RPC 框架 | High-Speed Service Framework,阿里内部使用的高性能 RPC 框架(类似 Dubbo,但闭源) |

REST 不是协议,而是一种 基于 HTTP 的 API 设计风格;

RPC 是一种 抽象模型,Dubbo 和 HSF 是它的具体实现;

Dubbo 和 HSF 都属于 二进制 RPC 框架,通常不走 HTTP。

2.2、详细对比

|-------|------------------------------------------------------------------------------------|-------------------------------|---------------------------------------------|---------------------------------------|
| 维度 | REST | RPC(泛指) | Dubbo | HSF |
| 本质 | 架构风格(基于 HTTP) | 编程模型 | 开源 RPC 框架 | 阿里内部 RPC 框架 |
| 传输协议 | HTTP/1.1, HTTP/2 | TCP(常用)、HTTP(较少) | 默认 dubbo://(基于 Netty + TCP),也支持 HTTP、gRPC 等 | HSF 协议(基于 Bolt,TCP) |
| 数据格式 | JSON、XML(文本) | Hessian、Protobuf、Kryo(二进制) | 默认 Hessian2,可扩展 | 默认 Hessian 或 PB |
| 调用方式 | http://host/api/user?id=1 | userService.getUser(1)(像本地调用) | @DubboReference UserService userService; | @HSFConsumer UserService userService; |
| 服务发现 | 依赖注册中心(如 Nacos、Eureka)+ 客户端负载均衡 | 通常集成注册中心(ZooKeeper/Nacos) | 支持 Nacos/ZK 等 | 依赖 Diamond(阿里内部注册中心) |
| 强类型 | ❌ 弱类型(靠文档/契约) | ✅ 强类型(接口即契约) | ✅ 接口定义清晰 | ✅ 接口即服务 |
| 性能 | 较低(文本解析、HTTP 开销) | 高(二进制、长连接、序列化高效) | 高 | 极高(阿里深度优化) |
| 跨语言 | ✅ 天然支持(HTTP 通用) | ⚠️ 依赖序列化协议(如 gRPC 可跨语言) | Java 为主,部分支持多语言 | 主要 Java,阿里生态内使用 |
| 调试友好性 | ✅ 可直接用浏览器/curl 测试 | ❌ 需专用工具或客户端 | ❌ | ❌ |
| 典型场景 | 对外 API、前后端分离、BFF 层 | 内部微服务调用、高性能系统 | 中大型 Java 微服务架构 | 阿里系内部系统 |

2.3、核心差异总结

2.3.1. REST vs RPC

|------|-------------------------|-----------------------------|
| 对比项 | REST | RPC |
| 设计理念 | 面向资源(Resource-Oriented) | 面向方法/过程(Procedure-Oriented) |
| 耦合度 | 松耦合(无接口依赖) | 紧耦合(需共享接口 jar) |
| 可读性 | 高(URL 自解释) | 低(需看接口定义) |
| 性能 | 低 | 高 |
| 适用边界 | 外部系统、异构系统 | 内部同构系统 |

📌 一句话:

对外用 REST,对内用 RPC。


2.3.2. Dubbo vs HSF

|------|-----------------------------|-----------------------------|
| 对比项 | Dubbo | HSF |
| 开源状态 | ✅ Apache 开源项目 | ❌ 阿里内部闭源 |
| 社区生态 | 丰富(Spring Cloud Alibaba 集成) | 仅限阿里内部 |
| 协议 | dubbo://、rest、gRPC 等 | HSF 协议(基于 Bolt) |
| 注册中心 | Nacos、ZooKeeper、etcd | Diamond(阿里自研) |
| 功能 | 服务治理、路由、限流等 | 更深度集成阿里中间件(如 Sentinel、ARMS) |
| 演进关系 | HSF 的开源"精神继承者" | Dubbo 的企业级增强版 |

2.4、如何选择?

|--------------------------|-------------------------|
| 场景 | 推荐方案 |
| 对外提供 OpenAPI、给前端调用 | ✅ REST(JSON over HTTP) |
| 公司内部 Java 微服务之间调用 | ✅ Dubbo(开源)或 HSF(阿里系) |
| 需要跨语言(Go/Python/Java 混合) | ✅ gRPC(也是 RPC,但跨语言) |
| 快速原型、小团队、简单系统 | ✅ Spring Boot + REST |
| 高并发、低延迟、强一致性要求 | ✅ Dubbo/HSF(二进制 RPC) |
| 已有 HSF 系统,新建模块需对接 | ✅ 新模块集成 HSF 客户端(如你图中所示) |

相关推荐
JH30731 小时前
引依赖包和对这个包发起rpc调用有什么区别
网络·网络协议·rpc
程序员小单2 小时前
WebSocket 与 Spring Boot 整合实践
spring boot·websocket·网络协议
海域云-罗鹏7 小时前
电商掘金日本:SDWAN专线刚需原因
服务器·网络·网络协议
翻斗花园正门保安小夏7 小时前
HTTPS + WSS(WebSockets) 完整请求流程架构说明及本地开启HTTPS
websocket·网络协议·https
发光小北9 小时前
SG-TCP-Profibus (M)(ModbusTCP 转 Profibus DP 网关)
网络·网络协议·tcp/ip
Arva .9 小时前
TCP 与 UDP 的 10 大核心区别是什么?
网络协议·tcp/ip·udp
重启的码农10 小时前
enet源码解析 (2) 对等节点 (ENetPeer)
c++·网络协议
发光小北11 小时前
SG-TCP-COE-210(Modbus TCP 转 CANOpen 网关)
网络·网络协议·tcp/ip
路由侠内网穿透.12 小时前
外部访问 Python 搭建的 HTTP 服务器
运维·服务器·网络·网络协议·http·远程工作