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

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

  •  1
     
  •   abersheeran ·
    abersheeran · 1 天前 · 2227 次点击

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

    那么还有没有别的呢?

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

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

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

    总而言之,如果是自己研究,可以多看看一些序列化 /rpc 框架;如果是生产使用,还是看下业界的流行方案。
    abersheeran
        13
    abersheeran   22 小时 38 分钟前
    @so1n HTTP 层我没有实现,这个可以用 Python 社区的一些解决方案上 2 甚至 3 来提速。grpc 不也是 HTTP2 的嘛。

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

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