在微服务架构中组织protobuf文件

时间:2019-03-19 22:10:58

标签: protocol-buffers microservices grpc

在我的公司中,我们有一个由微服务组织的系统,每个服务都有专用的git存储库。我们想介绍gRPC,我们想知道如何共享protobuf文件并为我们的各种语言构建库。根据我们收集的一些示例,我们最终决定在内部存放所有protobuf的单个存储库,这似乎是最常用的存储方式,并且似乎更易于维护和使用。

我想知道您是否有一些例子? 您是否有一些相反的例子,说明公司做相反的事情,即以分布式方式托管protobuf?

2 个答案:

答案 0 :(得分:3)

我们的每个微服务都有其自己的API(protobuf或几个protobuf文件)。对于每个API,我们都有单独的存储库。此外,我们还有CI作业,它将原型构建到jar中(不仅适用于Java,而且适用于另一种语言),并将其发布到我们的中央存储库中。比您只需将依赖项添加到所需的API。

例如,我们有微服务A,我们还有存储库a-api(仅包含原型文件),该存储库通过作业在jar(以及其他语言)中com.api.a-service.<version>

答案 1 :(得分:1)

我们有一个用于原型文件(称为schema)的独特存储库,以及每个微服务的多个存储库。同样,我们从不存储生成的代码。服务器和客户端文件是由protoc从头开始在每次CI构建时生成的。

实际上,这种方法可以很好地满足我们的需求。但是有两个潜在的陷阱:

  1. schema与微服务存储库之间的不一致。提交到两个不同的git repos并不是原子的,因此,在schema更新时,schema总是有一段时间更新,而微服务的repo还没有。
  2. 如果您使用Go,则可能会转移到Go 1.11中引入的Go模块。我们尚未对此进行全面研究。