gRPC
Protobuf 演进:字段号比字段名更重要
在新旧服务并行时保护二进制兼容性。
原理
Protobuf 二进制消息按字段号识别字段。新增字段应分配新号码,删除字段后应把旧号码和名称保留,避免后续消息被按新含义解释。
开发中的做法
字段名修改可能影响 JSON 映射和源代码调用。类型修改要分别检查线格式、业务语义和生成代码,不能只凭能否编译来判断兼容。
验证与追问
测试旧客户端读新服务响应和新客户端读旧服务响应。涉及默认值时,也要验证应用能分辨缺字段和显式设置的值。
代码片段
message Item {
reserved 2;
reserved "legacy_name";
string id = 1;
optional string title = 3;
}