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

微信这种等级的软件是如何实现全球用户在统一的数据库里,并且用户在不同的大陆能隔着老远发消息的?

  •  
  •   abcbuzhiming · 2020-09-19 17:00:46 +08:00 · 4949 次点击
    这是一个创建于 1524 天前的主题,其中的信息可能已经有所发展或是发生改变。
    微信,非死不可,WhatsApp,基本都接近实现了全球部署。我能猜到他们肯定需要在当地部署服务器进行就近服务,但是大部分在当地部署服务的网站 api 类应用,都是没有实现统一数据库的,即所谓的“国内国外用户分开”处理方式。但是这类超级 app 不仅实现了统一数据库(所有用户可视为在一个服)。还能在不同的大陆隔着老远发消息。

    统一数据库现在有不少分布式论文,虽然不完美但是如果愿意放弃一些特性的话,有可用实现。不同的大陆隔着那么远的海洋他们还能发消息,这个消息的延迟现在能压低到多少了,他们是怎么实现这个的,是不同的服务器之间拉专线光纤来实现互通吗,还是有什么特殊套路?
    22 条回复    2020-11-11 14:41:29 +08:00
    opengps
        1
    opengps  
       2020-09-19 17:16:13 +08:00 via Android
    实际并不是一个 /台 /区服务器,而是跨地域的多 set
    abcbuzhiming
        2
    abcbuzhiming  
    OP
       2020-09-19 17:21:19 +08:00
    @opengps 多 set 是指的什么意思?
    imn1
        3
    imn1  
       2020-09-19 17:31:31 +08:00
    那些服务器的技术我不懂,我只知道
    先发送,后保存
    先保存,后发送
    两者区别很大
    cloverstd
        4
    cloverstd  
       2020-09-19 17:46:50 +08:00
    不同的用户可以存在不同的机房,比如大陆的用户,存在大陆机房,海外的在海外的机房
    用户打上机房的标签,同机房的用户给同机房的发消息,可以不跨机房
    如果发送时,发现是其他机房的用户,就路由到对应的机房去,延迟的话,跨机房走专线,基本就是物理上的延迟了

    上面是我猜的
    Stain5
        5
    Stain5  
       2020-09-19 17:55:47 +08:00
    参考下电信运营商怎么做的 能够解决你很多问题
    laminux29
        6
    laminux29  
       2020-09-19 17:56:52 +08:00
    题主觉得跨大陆信息传输的延迟很高吗?想想 PUBG ?
    TimePPT
        7
    TimePPT  
       2020-09-19 18:29:21 +08:00 via Android
    异地多活同步啊,大厂都这么玩
    wysnylc
        8
    wysnylc  
       2020-09-19 18:30:39 +08:00
    你可以从 DNS 分地区负载开始看起
    Lynalmost
        9
    Lynalmost  
       2020-09-19 19:11:01 +08:00 via iPhone
    @cloverstd 可以这样理解
    whileFalse
        10
    whileFalse  
       2020-09-19 19:14:19 +08:00 via iPhone
    我记得有个文章说过,他们分杭州服和北美服。用户注册是哪个服就不会变了。
    locoz
        11
    locoz  
       2020-09-19 19:14:20 +08:00 via Android
    微信的技术人员有写过他们的技术实现,你可以搜一下,我记得是类似于 #4 说的那种
    yangbonis
        12
    yangbonis  
       2020-09-19 19:17:09 +08:00 via iPhone
    统一不统一没有你想象的差异那么大,都是在不同层面做相同的事情罢了。
    kerro1990
        13
    kerro1990  
       2020-09-19 19:25:54 +08:00
    首先反代服务器 IP 估计是广播的方式,然后调度到附近的数据中心,不同数据中心用专线跨机房数据同步,消息发送看怎么路由的了,微信 ID 肯定包含了路由信息,只不过是加密的
    chinvo
        14
    chinvo  
       2020-09-19 19:35:52 +08:00   ❤️ 3
    flynaj
        15
    flynaj  
       2020-09-19 19:48:15 +08:00 via Android
    微信都是你发送到服务器,然后服务器又转发出去,所以有些东西你是发不出去的。
    Jerami
        16
    Jerami  
       2020-09-19 20:24:28 +08:00 via Android
    运营商-微信 pop-腾讯骨干网-数据中心
    运营商 A-微信 pop-腾讯骨干网-微信 pop-运营商 B
    Jerami
        17
    Jerami  
       2020-09-19 20:24:59 +08:00 via Android
    所以说美国禁止与微信的对等互联了嘛
    gaius
        18
    gaius  
       2020-09-20 02:24:50 +08:00 via Android
    统一用户服务,分布式数据裤呗🐶
    opengps
        19
    opengps  
       2020-09-20 08:42:39 +08:00
    @abcbuzhiming 刚刚留意到漏掉了你的问题,搜一下“SET 化”,也可以了解下“异地多活”类的信息
    再给你举一个例子(数据为印象中的大概值):天津港当年事故期间,腾讯天津机房距离爆炸中心不足 5 公里,其负载了 2-3 亿,随时面临断电风险,因此腾讯紧急切换了负载,对外表现为用户无感知
    opengps
        20
    opengps  
       2020-09-20 08:48:46 +08:00
    @gaius IM 应用相对而言,更重要的是消息转发,而非数据库存储。

    IM 应用最大的资源是骨干贷款,多个机房之间使用骨干网络线路转发。用户到就近 IDC 最然是普通家庭级网络线路,但是 IDC 与 IDC 之前最起码是企业级骨干网络线路。(这同样也解释了“游戏加速器”的原理:就近找个接入点,剩余路线走企业级骨干线路)

    PS:网络结构上的近,只是约等于地理位置上的近,比如北上广之间必然有高带宽多线路,但是往西部来看,网络延迟就表现出来了
    lc7029
        21
    lc7029  
       2020-09-20 13:50:53 +08:00
    异地多活,BGP Anycast,机房内负载均衡
    ZeawinL
        22
    ZeawinL  
       2020-11-11 14:41:29 +08:00
    感觉不是统一数据库 我电脑上保存的自定义表情 在手机上都看不到 只能在手机上再添加一次
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5273 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 07:26 · PVG 15:26 · LAX 23:26 · JFK 02:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.