[binary protocol | text protocol] 大家都采用什么序列化方式,自定义还是现成的轮子?

2021-01-08 10:02:14 +08:00
 haosamax

最近在看《设计数据密集型应用》,看到编码部分,又想到框架中的自定义编码,有所想: 框架自定义的序列化方式很难用(字段值编码后拼接,无需编码名称),每次处理循环体都要手动处理操作字节,而且前后兼容,想问下大伙:1 、为什么搜索结果都说 binary protocol 比 textprotocol 快; 2 、项目用的 protocol 是? 3 、有没有一种可读性高并且速度快的编码方式?

2788 次点击
所在节点    Java
22 条回复
oott123
2021-01-08 10:32:26 +08:00
overhead 低信息密度高自然就快,本前端表示除了 json 和 msgpack 别的都不用(
chendy
2021-01-08 10:40:04 +08:00
1. 二进制少一轮字符串解码编码,表示数字和布尔用的字节更少,不考虑人类阅读可以用更紧凑的格式,代价就是直接拿给人类看基本看不懂
2. binary 只想到 protobuf,text 只想到 json
3. json 也不慢
togou
2021-01-08 12:11:04 +08:00
解析二进制比 字符串各种查找 配对肯定快 xml json 肯定比不过 pb tars 这种二进制协议啊
PureWhiteWu
2021-01-08 12:11:28 +08:00
binary
haosamax
2021-01-08 12:20:34 +08:00
各位说的是,为社么快这块理解了
liian2019
2021-01-08 14:04:58 +08:00
json 和 protobuf
MeteorCat
2021-01-08 14:28:00 +08:00
json 主要是冗余太多了,还套个 http 协议,但是可视化很方便,基本上有个 web 浏览器就能调试
haosamax
2021-01-08 14:29:41 +08:00
@liian2019 那如果更换为 protobuf,有没有 JavaBean 生成.proto 的工具
icyalala
2021-01-08 14:35:06 +08:00
protobuf 有强类型这个 json 比不了,但是单看性能,不一定比 json + gzip + simdjson 快到哪里去,而且 pb 还会生成一大坨代码出来难用的要死。但凡想要点可读性那选 json 没错。
chenqh
2021-01-08 14:37:04 +08:00
json 太好调试了呀,二进制的东西调试成本比 json 高太多了
liian2019
2021-01-08 17:55:50 +08:00
@haosamax 一般都是 protobuf 转 java
xiangbohua
2021-01-08 19:38:28 +08:00
没什么特别需求无脑 json,或者 xml 啊,搞协议的搞搞 protobuf 啥的吧。
xiangbohua
2021-01-08 20:00:46 +08:00
哎,参加工作的第一年,一个做虚拟化的公司,用的 Protobuf 当时烧了不少脑细胞
12101111
2021-01-08 21:30:06 +08:00
但是现在 json 的序列化用上 SIMD 之后速度惊人, 实际上也是按照二进制的方式解析的, 只不过按弱类型操作 json 容易有 bug
nthhdy
2021-01-08 22:33:44 +08:00
binary 是快,但基本上就意味着可读性低,一般必须得用工具才能看。对性能要求不高时,json 很好用,可读性好,编码本身的扩展性也好,改字段、类型很容易。
haosamax
2021-01-09 09:44:52 +08:00
@xiangbohua 内部系统 socket 通讯,自定义的协议用着有点 egg pain
haosamax
2021-01-09 09:46:19 +08:00
@liian2019 是的。如果迁移的话岂不是都得写一遍 proto 文件
daimiaopeng
2021-01-09 16:56:25 +08:00
要看应用场景是什么,要是对流量要需求比较高的话,比如说网络游戏,那肯定用偏二进制方面的编码
liian2019
2021-01-11 09:58:41 +08:00
@haosamax 这个没有接触过,可以 google 看看有没有什么好的解决方案。一般协议应该也不会太多吧
onepix
2021-01-11 17:29:01 +08:00
textprotocol 可以理解成是在 string 的通用的 binary protocol 基础上又封装了一层,我们平时说的使用 UTF8 还是 GB2312 就是这个 string 的 binary protocol 的实现,所以 textprotocol 会慢一拍啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/742808

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX