V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
abersheeran
V2EX  ›  程序员

无需申明格式的跨语言高性能序列化格式有哪些?

  •  1
     
  •   abersheeran · 2021-02-23 22:47:54 +08:00 · 4398 次点击
    这是一个创建于 1367 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前我知道的只有 msgpack,据说 Protocol Buffer 这种需要申明格式的都比它略慢一筹。

    那么还有没有别的呢?

    23 条回复    2021-02-25 01:12:55 +08:00
    paoqi2048
        1
    paoqi2048  
       2021-02-23 22:53:50 +08:00   ❤️ 2
    看看 CBOR
    jaynos
        2
    jaynos  
       2021-02-23 23:07:20 +08:00
    咋一看有点像 redis 的序列化协议 redis.io/topics/protocol
    DoctorCat
        3
    DoctorCat  
       2021-02-23 23:10:36 +08:00
    自己 diy 就行了,然后 snappy 算法压缩
    abersheeran
        4
    abersheeran  
    OP
       2021-02-23 23:29:07 +08:00
    @paoqi2048 感谢,已经看了。加入 TODO 里了。https://github.com/abersheeran/rpc.py/issues/5
    so1n
        5
    so1n  
       2021-02-24 00:47:46 +08:00
    msgpack 就挺好的...我自己写的 rpc 用的就是 msgpack, 然后复用单链接 速度贼快....
    tsui
        6
    tsui  
       2021-02-24 07:06:57 +08:00
    https://github.com/FasterXML/jackson-dataformats-binary 支持的看了也就 CBOR 或者 ion
    abersheeran
        7
    abersheeran  
    OP
       2021-02-24 09:23:29 +08:00
    @so1n 实际业务里单核每秒能有多少?我希望是能有四位数以上的速度。
    abersheeran
        8
    abersheeran  
    OP
       2021-02-24 09:27:24 +08:00
    @abersheeran 因为我司确定要上微服务了……我是主力开发,我不想用 grpc,太蛋疼了。
    Visionhope
        9
    Visionhope  
       2021-02-24 09:31:28 +08:00
    @paoqi2048 网上搜了下, 看样子 CBOR 是 msgpack 的 fork, 有很多相似之处.
    so1n
        10
    so1n  
       2021-02-24 10:21:13 +08:00 via Android
    @abersheeran 本机的话 1000 并发 0.3 秒,线上的还没上去试。简单看一下你那个是依赖 http 一发一收的?这样速度好像不快。
    速度这里需要序列化和传输层一起优化,链接复用后速度很快,不过还需要一些问题去解决,我还没弄好。
    so1n
        11
    so1n  
       2021-02-24 10:52:26 +08:00 via Android
    @abersheeran async 生态的话 grpc 真的不太好用😂
    RobberPhex
        12
    RobberPhex  
       2021-02-24 11:46:24 +08:00
    虽然题主限定了“无需声明格式”,但是从回复来看,题主是要上微服务。

    那么我觉得还是用 dubbo 或者 grpc 这种成熟的序列化、rpc 方案比较好。
    选择一个技术其实是选择了它的生态,比如你在初期选择了 msgpack,那么后续的网关(比如网关的 session 粘滞)、mesh (解析协议内容),都需要选择支持 msgpack 的。初期的技术选型会极大地影响后续的选择。

    另外,基于 msgpack 自己做 rpc 框架(或者采用现有的),后续很多已有的坑都需要自己踩一遍(加班 N 小时 /天 /月),比如如何实现流式调用,如何实现 rpc 连接池,如何做监控等。从这一方面来说,dubbo 成熟度比 grpc 要高,官方的模块中包含了很多生产中用到的特性,而且 dubbo3 也会支持 grpc,也能享受到 grpc 的生态优势。

    总而言之,如果是自己研究,可以多看看一些序列化 /rpc 框架;如果是生产使用,还是看下业界的流行方案。
    abersheeran
        13
    abersheeran  
    OP
       2021-02-24 11:58:37 +08:00
    @so1n HTTP 层我没有实现,这个可以用 Python 社区的一些解决方案上 2 甚至 3 来提速。grpc 不也是 HTTP2 的嘛。

    @RobberPhex 这些我都思考过,选择 HTTP 而不是 TCP/UDP 自定义协议,就是因为你说的这些在 HTTP 上都有很成熟的解决方案,不需要我自己弄。我唯一需要自己处理的就是 HTTP body 的序列化罢了。
    hj24
        14
    hj24  
       2021-02-24 12:31:16 +08:00 via iPhone
    你们上微服务后有跨语言的需求吗
    luozic
        15
    luozic  
       2021-02-24 13:49:40 +08:00
    rsocket 上面可以传输 json grpc 也对于 graphql 还可以自己定义,https://github.com/rsocket/rsocket
    abersheeran
        16
    abersheeran  
    OP
       2021-02-24 15:35:56 +08:00
    @luozic 抱歉,阿里的开源项目,我不会用的。
    luozic
        17
    luozic  
       2021-02-24 16:38:42 +08:00 via iPhone
    @abersheeran 奈飞捐赠给开源的,什么时候成阿里的了? graphql 也是 Facebook 的。
    abersheeran
        18
    abersheeran  
    OP
       2021-02-24 18:34:10 +08:00
    @luozic 不好意思,下午看的比较急,看到最近一次 commit 是阿里的人就先入为主了。现在下班了,我再仔细看看。
    lesismal
        19
    lesismal  
       2021-02-24 21:25:37 +08:00
    你们用啥语言,如果是 golang,欢迎尝试我这个

    https://github.com/lesismal/arpc
    lesismal
        20
    lesismal  
       2021-02-24 21:26:36 +08:00
    msgpack 挺好的,数据量比 json 省一点,比 pb 多,但是方便,基本够用了
    silymore
        21
    silymore  
       2021-02-25 01:00:15 +08:00 via iPhone
    @luozic dubbo 是阿里的
    LeeReamond
        22
    LeeReamond  
       2021-02-25 01:03:42 +08:00 via Android
    说个题外话,lz 考虑过压缩 io 流吗,最近发现压缩可以有效缩减传输量
    LeeReamond
        23
    LeeReamond  
       2021-02-25 01:12:55 +08:00 via Android
    另外 lz 测试过基于 http 相对 tcp 构建的效率吗。我之前测试本地回环,进程间 socket 通信一个来回大概在 100 微秒这个数量级,http2 之类的协议是不是能达到类似效果?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5415 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 03:33 · PVG 11:33 · LAX 19:33 · JFK 22:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.