如果你有一个数据中心,你如何同时将里面的服务器的软件做一个升级呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FutureApple
V2EX    问与答

如果你有一个数据中心,你如何同时将里面的服务器的软件做一个升级呢?

  •  1
     
  •   FutureApple 2021-06-16 20:11:54 +08:00 3896 次点击
    这是一个创建于 1646 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天看到群里的大佬给了一个问题,你有一个数据中心,数据中心里有一百万台机器(物理机或虚拟机),这一百万台机器都安装了一些组件,例如安装了 ffmpeg 4.5,现在你的任务是将它们的这个组件全部升级到 ffmpeg 4.6 。

    看起来不难,你很快就搞定了一个 4.6 的安装包,然后你发现你需要把这个安装包发给一百万台机,显然不行。装完可能大半年过去了。

    注意:不能使用 P2P

    第 1 条附言    2021-06-17 21:39:50 +08:00
    这里说一下 如果使用 CDN 节点的话同时 100W 的请求你觉得就单个机房能请求到的节点数康的住?

    这里要求的是单台服务器出现故障不影响其他的机器,因此不可能 1 》 2 》 4 》 8 这样传
    45 条回复    2021-06-18 07:36:17 +08:00
    PrinceofInj
        1
    PrinceofInj  
       2021-06-16 20:26:28 +08:00 via Android   5
    先问一下这一百万台是怎么装出来的。啥?一台台装出来的?那我一台台去更新有啥问题么?
    opengps
        2
    opengps  
       2021-06-16 20:29:09 +08:00
    这个规模,打包系统镜像,基于弹性伸缩逐步切换吧
    kaikai5601
        3
    kaikai5601  
       2021-06-16 20:30:27 +08:00 via iPhone
    不用 p2p,那就内网传输,并发啊,怎么可能要大半年
    FutureApple
        4
    FutureApple  
    OP
       2021-06-16 20:32:29 +08:00
    @kaikai5601 #3 那并发的那一台服务器因为负载过高死掉了呢?
    aureole999
        5
    aureole999  
       2021-06-16 20:32:35 +08:00   1
    这是不是就是类似 Ansible 之类干的事情?
    3dwelcome
        6
    3dwelcome  
       2021-06-16 2:33:06 +08:00
    如果你有一百万个用户,如何让用户软件都升级到最新版本?

    显然一个个让客户下载最新客户端安装,是不可能的,大半年过去了。
    FutureApple
        7
    FutureApple  
    OP
       2021-06-16 20:34:47 +08:00
    @aureole999 #5
    @3dwelcome #6 不是命令的发起,而是如何将这 100 万台服务器中都下载到这个更新包
    abersheeran
        8
    abersheeran  
       2021-06-16 20:45:36 +08:00
    内网,假设一万台机子下载需要十秒。一百万台也就一千秒,这个时间你们应该完全能接受。

    Nginx 提供静态文件,内网一万并发,很轻松。实际上应该更高一些。所以你大概几百秒就可以完成下载任务。
    Rheinmetal
        9
    Rheinmetal  
       2021-06-16 20:56:28 +08:00
    没有配好基础设施的情况下 约等于开发病毒
    eason1874
        10
    eason1874  
       2021-06-16 21:08:18 +08:00   2
    单机性能大概算一下并发数,然后按 1>100>10000>1000000 这样滚动发布,先拿到文件的也加入发布序列给后面的传输文件。就算没有内网也用不了多久啊。

    多机软件升级的要点不在于文件传输吧,传输很快的,难点在升级期间不影响服务。
    huangzxx
        11
    huangzxx  
       2021-06-16 21:11:33 +08:00
    打好一个包,ansible 跑一遍 apt install ?
    dushixiang
        12
    dushixiang  
       2021-06-16 21:21:23 +08:00 via iPhone   2
    这算是什么大佬…
    learningman
        13
    learningman  
       2021-06-16 21:27:22 +08:00 via Android
    广播?
    learningman
        14
    learningman  
       2021-06-16 21:28:04 +08:00 via Android
    你在一个内网,里不管用不用 p2p 交换数据都受限于交换机啊。
    FutureApple
        15
    FutureApple  
    OP
       2021-06-16 21:30:47 +08:00
    @eason1874 #10 如果其中一台服务器炸了他下面会广播的机器也会炸啊
    FutureApple
        16
    FutureApple  
    OP
       2021-06-16 21:33:41 +08:00
    @learningman #14 不是数据受限的问题,如果广播的服务器炸了其他的服务器也都甭想升级了,要求的是一个哪怕单机炸了也不会影响到其他任意机器的架构
    @eason1874 #10
    @abersheeran #8
    FutureApple
        17
    FutureApple  
    OP
       2021-06-16 21:36:24 +08:00
    @huangzxx #11 问题是这个包怎么传给那 999999 台其他的服务器
    momocraft
        18
    momocraft  
       2021-06-16 21:40:00 +08:00
    感觉你被大佬钓鱼了
    akira
        19
    akira  
       2021-06-16 21:40:18 +08:00
    要么推 要么拉
    FutureApple
        20
    FutureApple  
    OP
       2021-06-16 21:44:55 +08:00
    @momocraft #18
    @FreeEx #12 这是个微软的大佬再群里发的问题,他说 windows 更新其实是基于 p2p 的
    Reficul
        21
    Reficul  
       2021-06-16 21:48:35 +08:00
    为什么不能 P2P,我们现在就是这么做的,总规模不比 100w 小。
    Reficul
        22
    Reficul  
       2021-06-16 21:53:53 +08:00
    下载参考 Uber 或者蜻蜓,这个问题的主要难点不在分发上,在更新不影响业务上。

    https://github.com/uber/kraken
    FutureApple
        23
    FutureApple  
    OP
       2021-06-16 21:54:06 +08:00
    @Reficul #21 题目要求不使用 P2P,当然要用当然可以用,主要是感觉在。。。重复写迅雷?而且自己写 bug 还一堆。。。
    Reficul
        24
    Reficul  
       2021-06-16 21:58:32 +08:00
    @FutureApple 不太一样,迅雷这种 P2P 协议不是为数据中心优化的。

    有些功能是用不到的,比如数据中心发布节点是可信的,网络情况也比公网要好很多。
    有些功能则是没有的,比如按照机房机架或者 VPC 优化流量,按照发布的特点复用以往数据等等。
    Jirajine
        25
    Jirajine  
       2021-06-16 22:05:03 +08:00 via Android
    p2p 是很合适的,就算没有,多级缓存慢慢更也不是太大问题。

    p2p 也不用自己实现,像这种用 ipfs 搭建 pacman 镜像源 https://github.com/victorb/arch-mirror
    或者直接用 libp2p

    再往前很多游戏客户端都用魔改的 bt 协议。
    billlee
        26
    billlee  
       2021-06-16 22:46:35 +08:00
    算并发数什么的人根本没审题,ffmpeg 的大小有上百 MB,瓶颈在于带宽
    0ZXYDDu796nVCFxq
        27
    0ZXYDDu796nVCFxq  
       2021-06-16 22:57:33 +08:00
    就算是纯静态编译
    https://johnvansickle.com/ffmpeg/ 的安装包算,ffmpeg-release-amd64-static.tar.xz 的大小是 39577132 Bytes

    39577132 * 100 * 10000 / 1024**4 = 36 TB

    随便找两台服务器,每台服务器装 60G 网卡,加起来 120G,一个小时搞定
    39577132 * 100 * 10000 / (120 * 1000**3 / 8) = 2638s
    0ZXYDDu796nVCFxq
        28
    0ZXYDDu796nVCFxq  
       2021-06-16 23:09:30 +08:00
    另外一些计算结果:
    假如使用一种合适的算法,使得 100 万台服务器的更新时间在 1 小时里趋于均匀分布
    则两台服务器每台的 connection per second 为
    100*10000 / 3600 / 2 = 139
    每台服务器每秒能传输的安装包数量为
    60*1000**3 / 8/ 39577132 = 190

    这种性能需求,随便近几年的至强都行了,只要优化下网卡队列和系统内核参数
    binux
        29
    binux  
       2021-06-16 23:31:16 +08:00 via Android
    @FutureApple 广播的服务器炸了,你不会等一等再重试吗?
    iseki
        30
    iseki  
       2021-06-16 23:32:02 +08:00
    自己调度一下,非要同时传输那就上 UDP 广播组播,然后自己解决流控和丢包问题 <- 感觉这是伪需求
    3dwelcome
        31
    3dwelcome  
       2021-06-16 23:32:30 +08:00   1
    @FutureApple "这是个微软的大佬再群里发的问题,他说 windows 更新其实是基于 p2p 的"

    国内 99%互联网用户没有公网 IP,根本没办法相互直连,哪有什么 P2P,是你想太多了。
    Greatshu
        32
    Greatshu  
       2021-06-16 23:37:35 +08:00
    这个不就是各大云厂商内网镜像源吗,上 CDN 就完事了,比如阿里云的内网镜像源

    dig mirrors.aliyuncs.com

    ;; ANSWER SECTION:
    mirrors.aliyuncs.com. 178 IN CNAME mirrors.aliyuncs.com.gds.alibabadns.com.
    mirrors.aliyuncs.com.gds.alibabadns.com. 15 IN A 10.157.200.6
    ryd994
        33
    ryd994  
       2021-06-17 00:27:41 +08:00
    P2P 是有一部分:Delivery Optimization 。但是这要用户同意。
    其次是基于 BITS 的服务器分发: https://docs.microsoft.com/en-us/windows-server/administration/windows-server-update-services/deploy/2-configure-wsus#211-connection-from-the-wsus-server-to-the-internet

    这有何难? AWS S3 做得,Azure Blob Storage 做得,Windows Update 做不得?
    分批次推送就好了啊。不是所有 Windows 机器都同时收到更新的。前后差好几天呢。

    企业内部可以通过 WSUS 和组策略等进一步控制。比如企业想暂停更新之类的。

    别说这是微软的人,我丢不起这人。“如果你有一个数据中心” Azure 这不叫数据中心? Fabric rollout 怎么干的?
    hronro
        34
    hronro  
       2021-06-17 00:50:05 +08:00 via iPhone
    真的有大佬会在 QQ 群里问问题吗?
    kaikai5601
        35
    kaikai5601  
       2021-06-17 01:00:28 +08:00 via iPhone
    @FutureApple 多搞几台思并发啊,而且只 scp 怎么会死掉
    felixcode
        36
    felixcode  
       2021-06-17 02:44:57 +08:00 via Android
    写个脚本让软件自行扩散,类似病毒
    learningman
        37
    learningman  
       2021-06-17 09:23:30 +08:00 via Android
    @3dwelcome 有的,你打开 win10,更新底下是不是有个传输优化,那个就是 p2p 。
    有没有是一回事,能不能用是一回事
    James369
        38
    James369  
       2021-06-17 10:50:15 +08:00
    初始设想,应该采用网络镜像技术
    FS1P7dJz
        39
    FS1P7dJz  
       2021-06-17 11:01:47 +08:00
    是哪个 SJB 会让 100W 设备同时升级?

    讨论这种毫无意义的问题很闲时不时

    而且这种发散问题,每个方向不同的人,讨论的方向都不同

    看起来你们这个群想讨论的只是网络并发 100W 个连接请求这种问题
    而不是真正的"100W 台设备如何升级"这个问题
    onionlc
        40
    onionlc  
       2021-06-17 11:09:03 +08:00
    内网建个 nginx,包放上去,ansible 批量执行去 nginx 拉包更新升级;
    基础设施没做好的话,也得耗费点时间;
    sleepm
        41
    sleepm  
       2021-06-17 11:23:54 +08:00
    https://docs.microsoft.com/zh-cn/windows/msix/desktop/managing-your-msix-deployment-retail
    使用应用商店,哈哈
    同意九楼的,这属于基础设施
    mikeven
        42
    mikeven  
       2021-06-17 14:24:21 +08:00
    现在苹果 10 亿台设备系统的 OTA 都能实现,这很难吗
    SlipStupig
        43
    SlipStupig  
       2021-06-17 14:42:38 +08:00
    Linux 不是有软件源嘛.....直接更软件更新源就好了啊.......这个问题有什么讨论的意义呢
    FutureApple
        44
    FutureApple  
    OP
       2021-06-17 21:35:21 +08:00
    @mikeven #42 那是位置不在一个点啊,同时请求一个 CDN 活着几个 CDN 节点你觉得你的 CDN 节点扛得住?
    @SlipStupig #43
    @onionlc #40
    Kinnice
        45
    Kinnice  
       2021-06-18 07:36:17 +08:00 via Android
    @FutureApple 你小瞧了 cdn 的调度,一个 cdn 的节点负载上升,会调度到其他节点,并不会你同个机房的都去访问那一个节点。CDN 做的比较好的单节点 100G 吃得下。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2904 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 14:09 PVG 22:09 LAX 06:09 JFK 09:09
    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