gRPC 基础概念
- gRPC:Google 开源的高性能远程过程调用(RPC)框架,基于 HTTP/2 协议和 Protocol Buffers 序列化格式,支持双向流式通信,广泛应用于微服务间的服务调用场景。
- gRPC-Web:gRPC 的浏览器兼容版本,允许前端 JavaScript 应用直接调用 gRPC 服务,通过代理服务器桥接浏览器与 gRPC 服务端,解决了浏览器无法原生使用 HTTP/2 全特性的问题。
- Protobuf:Protocol Buffers 的简称,是 Google 开发的二进制序列化协议,用于定义服务接口和消息格式,比 JSON 更紧凑高效,序列化和反序列化速度更快。
- Service:gRPC 服务定义,包含一组可远程调用的方法(RPC 方法),每个方法指定了请求类型和响应类型。
- Method:gRPC 服务中的单个远程方法,支持四种调用模式:一元调用(Unary)、服务端流、客户端流和双向流。
传输与格式
- 帧格式(Frame Format):gRPC-Web 使用长度前缀帧格式,每帧包含 1 字节压缩标志(0x00 未压缩,0x01 已压缩)+ 4 字节负载长度(大端序)+ 负载数据。Trailers 帧的压缩标志为 0x80。
- Content-Type:HTTP 请求的内容类型头。application/grpc-web 为二进制格式,效率最高;application/grpc-web-text 为 Base64 编码格式,兼容性更好但体积增大约 33%。带 +proto 后缀的变体用于特定序列化场景。
- Trailers:gRPC 响应的尾部元数据,在 HTTP 响应体之后传输,包含 gRPC 状态码(grpc-status)和状态消息(grpc-message)等关键信息。
- Metadata:gRPC 请求的键值对元数据,类似于 HTTP Headers,用于传递认证信息、追踪 ID、自定义扩展数据等,以 key-value 形式附加在请求中。
代理与部署
- Envoy 代理:常用的 gRPC-Web 代理服务器,内置 grpc_web 过滤器,可将浏览器的 gRPC-Web 请求自动转换为标准 gRPC 请求转发给后端服务。
- grpc-web-proxy:轻量级的 gRPC-Web 代理工具,适合开发和测试环境快速搭建代理层。
- 代理地址:gRPC-Web 代理服务器的完整 URL,工具通过该地址发送请求,由代理转换为标准 gRPC 调用。
- CORS:跨域资源共享(Cross-Origin Resource Sharing),gRPC-Web 代理需要正确配置 CORS 策略以允许浏览器发起跨域请求。
状态码与响应
- gRPC 状态码:表示 RPC 调用结果的数字代码。OK(0) 调用成功;CANCELLED(1) 操作被取消;INVALID_ARGUMENT(3) 参数无效;NOT_FOUND(5) 资源不存在;UNAUTHENTICATED(16) 未通过认证;UNAVAILABLE(14) 服务不可用。
- HTTP 状态码:标准 HTTP 响应状态码。gRPC-Web 通常返回 200 OK,错误信息在 gRPC 状态码中体现。非 200 状态码通常表示代理层或网络层问题。
- 请求耗时:从请求发出到收到完整响应的总时间,包含网络传输和服务端处理时间,是评估服务性能的重要指标。
- 响应大小:服务器返回的响应数据总量,以字节为单位显示,帮助开发者了解数据传输规模。
🔧 相关工具