joh*_*doe 8 architecture protocol-buffers node.js microservices grpc
在微服务架构中,是否建议集中收集原型文件,并将其作为客户端和服务器的依赖项?或每个客户端和服务器只有1个原型文件?
如果您的组织使用整体代码库(即所有代码都存储在一个存储库中),我强烈建议您使用同一文件。另一种选择是仅复制文件,然后必须使所有版本保持同步。
如果您在发送方和接收方之间共享协议缓冲区文件,则可以静态检查发送方和接收方是否使用相同的架构,尤其是如果某些新的微服务将以静态类型的语言(例如Java)编写时。
另一方面,如果您没有整体代码库,而是拥有多个存储库(例如,每个微服务一个存储库),则共享协议缓冲区文件会比较麻烦。您可以做的是将它们放在单独的存储库中,这些存储库可以作为依赖项添加到需要它们的微服务中。这就是我在以前的公司中看到的。我们有多个用于模式的小型API存储库。
因此,如果易于使用同一文件,我建议您这样做而不是创建副本。但是,在某些情况下,复制它们更为实际。缺点是您必须始终对所有副本应用更改。最好的情况是,您知道要更新哪些文件,这很繁琐。在最坏的情况下,您不知道要更新哪些文件,并且架构将不同步。只有在发布代码后,您才能找到答案。
注意,单片代码库并不意味着单片架构。您可以拥有微服务,并且仍将所有源代码保存在一个存储库中。当然,著名的例子是谷歌。Google还大量使用协议缓冲区进行内部通信。我没有看到他们的源代码,但是如果他们不共享服务之间的协议缓冲区文件,我会感到惊讶。