用途:本技能面向 Python 微服务间通信,使用 grpcio 与 protobuf 实现高性能 RPC,比 REST 延迟更低,适合服务间 API、流式数据传输、多语言共享 proto 定义、服务间强类型校验以及双向流(聊天、游戏、实时同步)场景。官方提示不适合公开 API(浏览器兼容性宜用 REST/GraphQL)、服务很少的简单 CRUD,以及不可用 HTTP/2 的环境。
主要能力:通过 .proto 定义服务与消息,支持一元、服务端流、客户端流和双向流四种 RPC 模式;使用 proto3、包版本号(如 user.v1)与 google.protobuf 类型;包含枚举、分页字段等示例结构。
使用方式:安装依赖 pip install grpcio grpcio-tools,并用 python -m grpc_tools.protoc -I./protos --python_out=./app/protos --pyi_out=./app/protos --grpc_python_out=./app/protos ./protos/user_service.proto 生成代码。服务端基于继承 Servicer 实现方法,可用同步 ThreadPoolExecutor 或 grpcio >= 1.50 的 grpc.aio 异步服务,并注册健康检查、监听端口启动。客户端创建 channel 与 Stub,调用时设置超时、处理 RpcError 状态码,并关闭 channel。
关键决策与拦截器:建议每文件一个服务、公共消息放 common.proto,按包版本演进,大列表用服务端流、实时用双向流,使用标准 gRPC 错误码,鉴权通过拦截器读取 metadata 中的 JWT,客户端始终设置 deadline,并为负载均衡提供健康检查。示例含日志、鉴权与重试拦截器。
限制与反模式:必须设置超时避免永久挂起,必须检查流式取消(context.is_active()),消息字段不应返回 None,新服务不使用 proto2,始终关闭 channel 以防资源泄漏。