问一个服务器间沟通相关的问题。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MrIndescribable

问一个服务器间沟通相关的问题。

  •  
  •   MrIndescribable 2017 年 11 月 22 日 2342 次点击
    这是一个创建于 3076 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题如下:

    已知有 2 台运行相同服务的异地服务器 A 和 B,A 与 B 之间只允许使用 UDP 协议进行通信。 这 2 台服务器会在未知的时间各收到一个(有且仅有一个)请求。 问:A 和 B 之间如何进行协商并得出谁先接收到这个请求? 

    注:

    • A 和 B 的本地时间所提供的 timestamp 可能存在一定差异,并且不允修改本地时间
    • A 和 B 之间的通信存在较高的网络延迟。(大于 50ms)
    • 避免使用第三方提供的时间
    第 1 条附言    2017 年 11 月 22 日
    条件补充: 假定 A 和 B 之间的网络通信不存在丢包
    9 条回复    2017-11-23 09:37:52 +08:00
    Aliencn
        1
    Aliencn  
       2017 年 11 月 22 日
    假定环境中延迟稳定,且不丢包的情况下。
    AB 服务器可以发测速包来获取延迟情况,然后对方发本地时间包加上延迟就能得到对方机器的时间。最终获得两台机器的时间差。
    这样双方在接收到客户端请求的时候相互对比一下时间就行了。


    实际情况中
    丢包的问题可以使用 TCP over UDP 的方法来解决。
    延迟不稳定的话,想了想只能通过大量测试求平均值的方法了。

    更极端的情况下,A 和 B 完全丢包,但是都有可能收到客户端发来的请求,那就只能加一个 proxy 来中转 AB 的协商包了。
    jadec0der
        2
    jadec0der  
       2017 年 11 月 22 日
    这个问题很奇怪啊,能讲一下场景吗?

    通常分布式服务只要选举出一致的主节点就可以了,没必要追求主节点绝对是第一个。
    choury
        3
    choury  
       2017 年 11 月 22 日
    @jadec0der #2 那至少要 3 台服务器才能进行选举
    MrIndescribable
        4
    MrIndescribable  
    OP
       2017 年 11 月 22 日
    @Aliencn
    我想到的最直接的办法就是计算时间差,但是很无奈,凭我的功力根本算不准。
    至于丢包,不太可能出现那个几乎完全丢包的情况,按国内来说,正常的机房到机房通信能有 10%就很稀奇了。
    微小的丢包可以在上层实现 ARQ 来解决,丢包问题基本可以忽略。



    @jadec0der
    实际应用场景不是分布式服务,是一个怪异的 TCP over UDP 服务的一部分。
    具体内容就不深入了,我的目是想要知道,两端的 TCP 连接是哪一端先断开了。
    我提出的问题中的 A 和 B 实际就是 TCP over UDP 服务的两端,那 2 个请求实际是 TCP 连接断开时所触发的 EPOLL_RDHUP
    MrIndescribable
        5
    MrIndescribable  
    OP
       2017 年 11 月 22 日
    @Aliencn
    Hmmm, 实际上如果可以精确的算出 A 和 B 之间的时间差的话,这个问题就解决了。但是好难。
    rogwan
        6
    rogwan  
       2017 年 11 月 22 日
    有时候很拗造型的解决方案,试试跳出方案本身去考虑,这是不是该从下一层去考虑解决了。
    MrIndescribable
        7
    MrIndescribable  
    OP
       2017 年 11 月 22 日
    @rogwan 谢谢你的提醒,不过我不准备跳出这个方案
    billlee
        8
    billlee  
       2017 年 11 月 22 日
    有这么复杂吗,用 NTP 同步一下时间就可以了啊
    MrIndescribable
        9
    MrIndescribable  
    OP
       2017 年 11 月 23 日
    @billlee
    我列出的条件中写到了,不允许修改时间,避免使用第三方提供的时间。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2771 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 50ms UTC 10:05 PVG 18:05 LAX 03:05 JFK 06:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86