• 请不要在回答技术问题时复制粘贴 AI 生成的内容
bbmike253455
V2EX  ›  程序员

请教数据库请求与 rpc 之间的差异

  •  
  •   bbmike253455 · Dec 3, 2022 · 2595 views
    This topic created in 1282 days ago, the information mentioned may be changed or developed.

    背景:应用原请求方式,a->b->数据库,改成了 a->数据库,流量很大。 按道理说只是避免了 b 应用的转发逻辑,但实际上 a 应用 cpu 降了 8 个点左右,不知道是不是我带来的,所以想问 rpc 调用与直接调用数据库,有很大的差异吗?数据量大小,序列化方式什么,这些会影响 CPU 水位

    9 replies    2022-12-03 18:25:04 +08:00
    leaves615
        1
    leaves615  
       Dec 3, 2022
    假设每个 IO 花费 20ms 时间,IO 等待在现代操作系统基本不消耗 CPU 资源。 序列化和反序列化是需要花费 CPU 资源,同样假设没错处理花费 10 个单位 CPU 占用。
    a->b->数据库: 有两次 IO ,共计 40ms 时间,两次序列 /反系列操作,20 个单位占用。
    a->数据库: 一次 IO ,计 20ms 时间,无序列 /反系列操作,0 个单位占用。
    bbmike253455
        2
    bbmike253455  
    OP
       Dec 3, 2022
    @leaves615 你的计算方式是从整体上看的,b 应用 CPU 确实减少了,但是对于 a 应用来说,之前他与 b 应用发生 rpc 调用,后来与数据库,但是对于 a 来说调用次数并没有减少,只是协议发生变化,以前是 rpc ,现在数据库的
    leaves615
        3
    leaves615  
       Dec 3, 2022
    a -> b -> db
    a <- b <- db

    a -> db
    a <- db
    bbmike253455
        4
    bbmike253455  
    OP
       Dec 3, 2022
    @leaves615 a 应用与数据库通信,也类似有序列化与反序列化的过程吧
    leaves615
        5
    leaves615  
       Dec 3, 2022
    假设有,你的场景没有去掉数据库通信,在对比场景下它是恒定的。
    Jooooooooo
        6
    Jooooooooo  
       Dec 3, 2022
    rpc 本身就是耗性能的操作, 至少序列化 /反序列化就是要干活的.
    tf2
        7
    tf2  
       Dec 3, 2022
    说明你们 b 性能不行。
    cheng6563
        8
    cheng6563  
       Dec 3, 2022
    RPC 一是会增加延迟,也就是说会增加线程 /连接数等负担。二是序列化挺废性能的,尤其是你用 JSON 这类文本序列化的情况下,换用 Protocol 之类的二进制序列化方案会快很多,数据库通信应该就是用了二进制协议优化的。
    Macolor21
        9
    Macolor21  
       Dec 3, 2022
    IO 方面没有差异,主要是序列化的差别

    - 数据库是:StringUtils.getBytes()
    - 不太清楚你这边 RPC 用什么协议,JSON ? Protobuf ?

    对比下这两个方法的基本上就是你这边的性能差异了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   871 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 22:03 · PVG 06:03 · LAX 15:03 · JFK 18:03
    ♥ Do have faith in what you're doing.