Protocol Buffer vs Json - 何时选择一个而不是另一个
Posted
技术标签:
【中文标题】Protocol Buffer vs Json - 何时选择一个而不是另一个【英文标题】:Protocol Buffer vs Json - when to choose one over another 【发布时间】:2019-02-23 20:21:01 【问题描述】:谁能解释一下何时在微服务架构中使用协议缓冲区而不是 JSON?反之亦然?同步和异步通信。
【问题讨论】:
为什么不使用 flatbuffer , capNProto ? @so-random-dude 感谢您的回答。您还可以在回答中讨论 flatbuffer、capNProto 的用例、优缺点 【参考方案1】:当消费者是或可能用内置原生支持 JSON 的语言(例如 javascript)、网络浏览器或需要人类可读性的语言编写时,我会使用 JSON。说起来,至少对于异步调用来说,很多开发者都喜欢直接查看队列内容进行调试,甚至在正常的开发过程中也能享受到这种便利。根据所使用的技术堆栈,使用 protobuf 来减少网络负载可能值得也可能不值得,因为任何性能提升都不会在异步世界中为您带来太多收益。而且我们不再需要像过去在大多数语言中使用 JSON 编组和解组时那样编写一堆样板代码。
我会使用 protobuf 来处理其他所有事情……如果考虑到上述考虑还有其他用例可供使用的话。您可能会看到一些优势,例如性能、网络负载、其版本控制方案提供的向后兼容性、神奇地附带 proto 文件的可爱文档以及一些验证!如果由于某种原因,您在微服务之间有大量 REST 或其他同步调用,则可以通过线路而不是 JSON 发送 protobuf,而无需进行很多权衡(如果有的话),同时提供大量优势。
【讨论】:
【参考方案2】:何时使用 JSON
您需要或希望数据是人类可读的 来自服务的数据直接由网络浏览器使用 您的服务器端应用程序是用 JavaScript 编写的 您还没有准备好将数据模型绑定到架构 您没有足够的带宽将其他工具添加到您的武器库中 运行不同类型的网络服务的操作负担 太棒了ProtoBuf 的优点
相对较小的尺寸 保证类型安全 防止架构违规 为您提供简单的访问器 快速序列化/反序列化 向后兼容性在我们讨论的时候,你看过flatbuffers吗?
这里涵盖了一些方面google protocol buffers vs json vs XML
参考:
https://codeclimate.com/blog/choose-protocol-buffers/
https://codeburst.io/json-vs-protocol-buffers-vs-flatbuffers-a4247f8bda6f
【讨论】:
您也可以使用 jsoniter-scala 获得 ProtoBuf for JSON 的所有这些优点。当没有太多的浮点数可以序列化时,它可以与用于 ProtoBuf 的最佳 Java/Scala 序列化程序竞争:github.com/dkomanov/scala-serialization/pull/8 请注意,JSON 的一些缺点可以通过使用 JsonSchema 验证 JSON 来解决。即:类型安全、架构违规和部分向后兼容性问题。以上是关于Protocol Buffer vs Json - 何时选择一个而不是另一个的主要内容,如果未能解决你的问题,请参考以下文章
ios 中(data) protocol buffer, Json, Model 相互转换遇到的坑
Protocol Buffer 序列化原理解析 - 为什么Protocol Buffer性能这么好?