V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
haosamax
V2EX  ›  Java

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

  •  
  •   haosamax · Jan 8, 2021 · 3693 views
    This topic created in 1935 days ago, the information mentioned may be changed or developed.

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

    22 replies    2021-01-12 15:06:19 +08:00
    oott123
        1
    oott123  
       Jan 8, 2021 via Android
    overhead 低信息密度高自然就快,本前端表示除了 json 和 msgpack 别的都不用(
    chendy
        2
    chendy  
       Jan 8, 2021
    1. 二进制少一轮字符串解码编码,表示数字和布尔用的字节更少,不考虑人类阅读可以用更紧凑的格式,代价就是直接拿给人类看基本看不懂
    2. binary 只想到 protobuf,text 只想到 json
    3. json 也不慢
    togou
        3
    togou  
       Jan 8, 2021
    解析二进制比 字符串各种查找 配对肯定快 xml json 肯定比不过 pb tars 这种二进制协议啊
    PureWhiteWu
        4
    PureWhiteWu  
       Jan 8, 2021
    binary
    haosamax
        5
    haosamax  
    OP
       Jan 8, 2021 via iPhone
    各位说的是,为社么快这块理解了
    liian2019
        6
    liian2019  
       Jan 8, 2021
    json 和 protobuf
    MeteorCat
        7
    MeteorCat  
       Jan 8, 2021 via Android
    json 主要是冗余太多了,还套个 http 协议,但是可视化很方便,基本上有个 web 浏览器就能调试
    haosamax
        8
    haosamax  
    OP
       Jan 8, 2021
    @liian2019 那如果更换为 protobuf,有没有 JavaBean 生成.proto 的工具
    icyalala
        9
    icyalala  
       Jan 8, 2021
    protobuf 有强类型这个 json 比不了,但是单看性能,不一定比 json + gzip + simdjson 快到哪里去,而且 pb 还会生成一大坨代码出来难用的要死。但凡想要点可读性那选 json 没错。
    simple2025
        10
    simple2025  
       Jan 8, 2021
    json 太好调试了呀,二进制的东西调试成本比 json 高太多了
    liian2019
        11
    liian2019  
       Jan 8, 2021
    @haosamax 一般都是 protobuf 转 java
    xiangbohua
        12
    xiangbohua  
       Jan 8, 2021
    没什么特别需求无脑 json,或者 xml 啊,搞协议的搞搞 protobuf 啥的吧。
    xiangbohua
        13
    xiangbohua  
       Jan 8, 2021
    哎,参加工作的第一年,一个做虚拟化的公司,用的 Protobuf 当时烧了不少脑细胞
    12101111
        14
    12101111  
       Jan 8, 2021
    但是现在 json 的序列化用上 SIMD 之后速度惊人, 实际上也是按照二进制的方式解析的, 只不过按弱类型操作 json 容易有 bug
    nthhdy
        15
    nthhdy  
       Jan 8, 2021
    binary 是快,但基本上就意味着可读性低,一般必须得用工具才能看。对性能要求不高时,json 很好用,可读性好,编码本身的扩展性也好,改字段、类型很容易。
    haosamax
        16
    haosamax  
    OP
       Jan 9, 2021 via iPhone
    @xiangbohua 内部系统 socket 通讯,自定义的协议用着有点 egg pain
    haosamax
        17
    haosamax  
    OP
       Jan 9, 2021 via iPhone
    @liian2019 是的。如果迁移的话岂不是都得写一遍 proto 文件
    labubu
        18
    labubu  
       Jan 9, 2021
    要看应用场景是什么,要是对流量要需求比较高的话,比如说网络游戏,那肯定用偏二进制方面的编码
    liian2019
        19
    liian2019  
       Jan 11, 2021
    @haosamax 这个没有接触过,可以 google 看看有没有什么好的解决方案。一般协议应该也不会太多吧
    onepix
        20
    onepix  
       Jan 11, 2021
    textprotocol 可以理解成是在 string 的通用的 binary protocol 基础上又封装了一层,我们平时说的使用 UTF8 还是 GB2312 就是这个 string 的 binary protocol 的实现,所以 textprotocol 会慢一拍啊
    haosamax
        21
    haosamax  
    OP
       Jan 11, 2021 via iPhone
    @onepix 理解了
    SkyLine7
        22
    SkyLine7  
       Jan 12, 2021
    json
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1028 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 58ms · UTC 19:01 · PVG 03:01 · LAX 12:01 · JFK 15:01
    ♥ Do have faith in what you're doing.