gRPC 是基于 HTTP/2 的 RPC 框架,提供 Protobuf 序列化、.proto 契约定义和多类型流语义;fasthttp 是高性能 HTTP 服务器/客户端,兼容 HTTP/1.1 和 HTTP/2,通过优化解析与内存减少开销;二者定位不同,不可直接并列比较。
gRPC 和 HTTP/2 不是同一层级的对比对象
很多人把 gRPC 和 HTTP/2 并列比较,这是个常见误解。gRPC 是基于 HTTP/2 实现的 RPC 框架,不是协议替代品;HTTP/2 是传输层协议升级(相比 HTTP/1.1),而 gRPC 在其之上加了 Protocol Buffers 序列化、服务契约定义(.proto)、流控语义(一元/服务端流/双向流)等能力。所以真正可比的是:gRPC vs HTTP/JSON over HTTP/2(比如用 net/http 或 fasthttp 自己实现 REST 接口并启用 HTTP/2)。
fasthttp 的定位:替代标准 net/http 的高性能 HTTP 服务器/客户端
fasthttp 不是新协议,它完全兼容 HTTP/1.1 和 HTTP/2(需配合 TLS 配置),但自己实现了底层解析器和连接池,避免了 net/http 中每个请求启动 goroutine、频繁 string/[]byte 转换、map 分配等开销。实测在纯 HTTP API 场景下,QPS 可比 net/http 高 2–5 倍,内存分配减少 60%+。但它不提供路由、中间件、结构化错误处理等——这些得靠 fasthttp-routing 或自行封装。
- 适合场景:
高并发、低逻辑复杂度的网关、代理、监控接口、文件上传下载服务 - 慎用场景:需要完整 REST 语义(如 OpenAPI 文档生成、标准 HTTP 错误码映射)、强类型请求体绑定、JWT 中间件链路等
- 注意坑:
fasthttp.RequestCtx不是线程安全的,不能跨 goroutine 传递;Request.Body()返回的是内部缓冲区切片,直接保存可能被后续请求覆盖
gRPC 真正的优势不在“比 HTTP 快”,而在“通信契约更紧”
单纯压测吞吐量,gRPC 比 fasthttp + JSON 高 3–5 倍,主要来自三方面:Protobuf 序列化体积小、解析快;HTTP/2 多路复用减少连接数;长连接 + 连接池复用降低建连开销。但更重要的是工程价值: