Protocol Buffer vs Json - 何时选择一个而不是另一个

Kai*_*dul 5 rest json protocol-buffers microservices

任何人都可以解释何时使用协议缓冲区而不是JSON用于微服务架构?反之亦然?同步和异步通信.

so-*_*ude 9

何时使用JSON

  • 您需要或希望数据是人类可读的
  • 来自服务的数据直接由Web浏览器使用
  • 您的服务器端应用程序是用JavaScript编写的
  • 您不准备将数据模型绑定到模式
  • 您没有带宽来为您的武器库添加其他工具
  • 运行不同类型的网络服务的运营负担太大

ProtoBuf的优点

  • 保证类型安全
  • 防止架构违规
  • 为您提供简单的访问者
  • 快速序列化/反序列化
  • 向后兼容性

虽然我们在这里,你看过flatbuffers吗?

这里介绍了google协议缓冲区vs json vs XML的一些方面

参考:

https://codeclimate.com/blog/choose-protocol-buffers/

https://codeburst.io/json-vs-protocol-buffers-vs-flatbuffers-a4247f8bda6f

  • 请注意,JSON 的一些缺点可以通过使用 JsonSchema 验证 JSON 来解决。即:类型安全、架构违规和部分向后兼容性问题。 (2认同)

Ger*_*tha 5

当消费者使用或可能使用内置原生支持 JSON 的语言(例如 Javascript)、Web 浏览器或需要人类可读性的语言编写时,我会使用 JSON。说起来,至少对于异步调用来说,很多开发者都喜欢直接检查队列的内容进行调试,甚至在正常的开发过程中也很方便。根据所使用的技术堆栈,使用 protobuf 来减少网络负载可能值得也可能不值得,因为任何性能提升都不会在异步世界中为您带来太多好处。并且我们不再需要像过去在大多数语言中使用 JSON 编组和解组那样编写一堆样板代码。

我会将 protobuf 用于其他所有事情……如果根据上述考虑还有其他用例可供使用。您可能会看到一些优势,例如性能、网络负载、其版本控制方案提供的向后兼容性、原始文件神奇地附带的可爱文档以及一些验证!如果由于某种原因你在微服务之间有很多 REST 或其他同步调用,protobuf 可以通过线路而不是 JSON 发送,而没有很多权衡(如果有的话),同时提供很多优势。