Lyft 推动协作式 Protocol Buffers 设计的最佳实践

Lyft 使用 Protocol Buffers 进行系统集成的经验总结

Lyft 分享了其使用 Protocol Buffers(简称 Protobuf)进行系统集成的经验,重点在于跨团队和跨系统的协议设计协作。公司提倡通过改进知识共享、一致性和开发流程质量来提升效率,而不仅仅是优化原始效率。

背景与动机

Lyft 长期采用 Protobuf,并在 2020 年解释了从 HTTP+JSON 迁移到 Protobuf 的原因,主要包括:

  • Protobuf 作为接口定义语言(IDL)的描述性。
  • 大多数语言的开源代码生成器可用性。
  • 优化的二进制格式。
  • 能够与 JSON API 保持向后兼容性。

协议设计原则

Lyft 工程师 Roman Kotenko 总结了 Protobuf 协议设计的关键原则:

  • 清晰性:协议应明确哪些字段必须设置,防止实现过程中出现错误设置。良好的协议应避免任何歧义。
  • 可扩展性:协议结构应具备未来视野,提前考虑可能的添加和破坏性更改。

最佳实践

Lyft 在广泛分布式系统中成功采用 Protobuf 作为 IDL 的几项关键最佳实践包括:

  1. 消息验证功能:推荐使用 protovalidate 项目进行运行时消息验证,基于用户定义的验证规则。该项目是 protoc-gen-validate 插件的后继者,支持多种验证规则,适用于消息和不同类型的字段。
  2. 统一常量值:Lyft 团队建立了统一跨多个实体协议定义中常量值的方法,使用自定义选项,但需注意完全控制协议定义用户的要求。
  3. 官方文档建议:包括使用常见数据类型的已知类型、处理未知枚举值、明确标记可选字段(利用 Protobuf 3.15 引入的 “optional” 标签)。

语言特定细节

作者强调,查看特定语言的教程对于了解所需设置和细微差别(如类型映射和生成代码特性)至关重要,因为某些行为在不同语言间存在差异。

通过这些原则和实践,Lyft 有效地利用 Protobuf 提升了系统集成和跨团队协作的效率和质量。

阅读 20
0 条评论