首页 > 解决方案 > 如何在 Git proto 存储库中发布对共享 .proto 文件的更改?

问题描述

共享协议缓冲区的常见策略似乎是将这些文件存储在单独的 Git 存储库中,如多个答案所推荐的:

所以我决定建立这样的结构,但在建立部署时卡住了。

我现在的情况

我有一个服务调用magic-service,它实现了一个.proto存储在proto-repo. 因此,magic-servicerepo 不会存储自己的 proto 文件,而是在构建服务时获取它。

现在我想为 .proto 发布一个新功能magic-service,但这需要先更新 .proto 文件。但是,在实现可用之前,当然不能更新公共 protobuf 文件。这是一个循环依赖。

问题

如何安全地部署我的服务,而无需先发布其 proto 文件?

我认为这是一个常见问题,但我无法找到任何相关信息。欢迎任何建议或资源!

标签: microservicesprotocol-buffersgrpcrpc

解决方案


在分布式系统中更新 proto 文件肯定需要一些技巧。

一种策略(在另一条评论中提到)是使用发布。这样,您可以让服务器发布比客户端更新的版本。

另一种选择是通过文档解决这个问题。事实上,原型文件可以在部署并可用之前发布。在较大的系统中,最好在评论中将该字段标识为尚不可用。

已由编组器设置但解组器不知道的字段被视为“未知”字段。更新必须小心协调,以确保更改不会向后或向前不兼容。

  • 向后不兼容的更改意味着该类型的旧版本不能用于解组该类型的新版本生成的消息。
  • 前向不兼容的更改意味着该类型的新版本不能用于解组该类型的旧版本生成的消息。

有关更新原型类型的更多信息,请参阅文档。

https://developers.google.com/protocol-buffers/docs/proto3#updating

例如,添加新字段的典型流程可能遵循以下模式:

  1. 向 proto 文件添加一个新字段并将其记录为不可用。
  2. 更新阅读代码以了解如何阅读新字段。
  3. 删除有关其可用性的文档。
  4. 更新编写代码以了解如何编写新字段。

推荐阅读