cnoder
V2EX  ›  问与答

如何保证 udp 的可靠性

  •  
  •   cnoder · Jun 1, 2021 · 1708 views
    This topic created in 1883 days ago, the information mentioned may be changed or developed.

    我们目前用的 openresty,在 log_by_lua 阶段使用 udp 发送日志到日志中心。
    但是现在丢日志有的业务能达到 50%,这可能取决于接受日志的机器的处理能力。
    那我们现在如何保证 udp 发送的可靠呢,不希望监听接收 ask 或者换 tcp ( log_by_lua 阶段好像不让用 tcp ?刚学 lua )
    或者最少实现我们如何统计丢包率呢(不要耗时太长~~)(之前说的 50%都是同事估的)

    Supplement 1  ·  Jun 1, 2021
    收到收到,多谢大家的思路(围绕 ack 不太想用,好像没办法不用)我。</br>还有,我们现在日志很多,每天几个 T (几个我忘了)。</br>那怎么增加接受日志的应用层的处理能力(集群?)和日志可视系统用啥呢(之前上 elk 秒崩),也希望大佬们多说说~~
    12 replies    2021-06-01 22:45:01 +08:00
    cpstar
        1
    cpstar  
       Jun 1, 2021
    UDP 本身不就是不可靠的,换 TCP 吧
    ic2y
        2
    ic2y  
       Jun 1, 2021
    quic ?
    GoLand
        3
    GoLand  
       Jun 1, 2021
    发送方打点,接收方打点,两个数值做个比对就能得到丢包率。
    digitv
        4
    digitv  
       Jun 1, 2021
    加 seq 确认,你去搜搜可靠 udp 的实现,大把的现成方案,也不复杂。很多游戏都是采取了可靠 udp 的方案,典型如王者
    Vhc001
        5
    Vhc001  
       Jun 1, 2021
    建议楼主看一看 h3 的设计原理
    opengps
        6
    opengps  
       Jun 1, 2021
    设计通信协议时候带上确认回复,没被确认的发送都可能是丢了的
    xmh51
        7
    xmh51  
       Jun 1, 2021
    这个和 udp 好像关系不大,在内网环境,udp 的不可靠应该不会成为主要原因,问题在于你的应用层(请求和处理)性能过低
    ju5t4fun
        8
    ju5t4fun  
       Jun 1, 2021
    套一层 kcp 协议
    ryd994
        9
    ryd994  
       Jun 1, 2021 via Android
    没用过 log_by_lua 。但是看官方文档的意思应该是可以用 TCP 的。https://github.com/openresty/lua-nginx-module#log_by_lua
    实在不行也可以写个 UDP 转发数据到 TCP 的代理程序,在每台服务器上运行。说不定已经有实现了。
    再不行的还有基于 TCP 的各种 VPN 协议。配置路由表只代理日志服务就好了。
    ryd994
        10
    ryd994  
       Jun 1, 2021 via Android
    不监听 ack 怎么实现可靠传输?总得有人帮你干这个活。你这是用来做日志,那不希望阻塞影响 Nginx 性能可以理解。但是总得有人负责重传控制。
    本地的话其实也可以不用 UDP,用 unix socket,性能只会更好。然后自己写个代理程序把 unix socket 转发到 TCP 日志服务器就行了。
    cnoder
        11
    cnoder  
    OP
       Jun 1, 2021
    @xmh51 是这样,每天几个 T,接受消息的应用层顶不住了
    xmh51
        12
    xmh51  
       Jun 1, 2021
    @cnoder 所以重点不在于搞 udp 的可靠性,而是解决应用层的问题,比如可以水平拆分日志中心
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1023 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 18:54 · PVG 02:54 · LAX 11:54 · JFK 14:54
    ♥ Do have faith in what you're doing.