V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhoudaiyu
V2EX  ›  问与答

问一个关于今天被问到的大文件分发策略的面试题

  •  
  •   zhoudaiyu · 2021-07-27 21:04:12 +08:00 via iPhone · 1673 次点击
    这是一个创建于 1247 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设有一台 master 节点上有一个 100G 的二进制文件,想分发给 10000 台服务器 node1-node10000,master 和 node 节点都是互联互通的,且 node 节点间也是互联互通的,问题就是怎么能在最短时间内分发完毕。我的思路是把大文件切分成 10000 个 10M 的小文件分发给 node,然后 node 间互相分发这些小文件,最后合并成大文件验证校验和。面试官好像不太满意我的解决方案,问问大家有什么好的想法吗?

    15 条回复    2021-08-26 06:07:25 +08:00
    liprais
        1
    liprais  
       2021-07-27 21:08:33 +08:00 via iPhone
    你说的不就是 bt....
    cloudera 就是这样做的
    我觉得面试官也没啥好办法
    tanhui2333
        2
    tanhui2333  
       2021-07-27 21:16:08 +08:00
    url base64 aHR0cDovL2x4dzEyMzQuY29tL2FyY2hpdmVzLzIwMTgvMDcvOTE1Lmh0bQ==
    感觉按这个答面试官也不一定满意。
    有时候面试跟对接头暗号差不多。
    heyjei
        3
    heyjei  
       2021-07-27 21:19:43 +08:00
    做成 BT 种子分发,CDH 的安装就是这么做的。
    xiaoz
        4
    xiaoz  
       2021-07-27 21:27:23 +08:00 via Android
    用 BT 协议,我看腾讯蓝鲸云资产管理中,文件分发就支持每个节点作为 BT 来传输。
    matrix67
        5
    matrix67  
       2021-07-27 22:16:27 +08:00
    阿里巴巴的 Dragonfly 借助 P2P 与 CDN 技术,缩减镜像传输时间,提升分发效率,加速业务应用交付;
    https://d7y.io/zh-cn/index.html

    uber 的 Kraken 项目
    https://github.com/uber/kraken
    des
        6
    des  
       2021-07-27 23:27:09 +08:00 via iPhone
    这个不是有人在 v 站问过吗?
    不会是同一个公司面试吧?
    rrfeng
        7
    rrfeng  
       2021-07-27 23:30:48 +08:00 via Android
    p2p 应该没问题吧
    黑科技用广播 /组播(也不是不可以
    also24
        8
    also24  
       2021-07-27 23:40:34 +08:00
    我觉得首先要确认网络拓扑情况,先搞清楚物理层面的限制,再去设计应用层的事情。
    zhoudaiyu
        9
    zhoudaiyu  
    OP
       2021-07-28 00:13:52 +08:00 via iPhone
    @liprais 我突然发现我不经意间说出了 P2P 的思想…当时真没想到 P2P 和 BT
    @tanhui2333 就是 P2P
    @heyjei 当时面试完和面试官聊说到了 CDH,所以我更不理解为啥他不满意我的思路了…
    @xiaoz 学到了
    @matrix67 谢谢大佬,果然像面试官说的有很多细节的地方可能涉及到很多底层的知识,看似简单其实复杂,看了一下这两个项目确实考虑的很多
    @des 难道是某健身软件?
    @rrfeng 大佬,我听到了不一样的声音,广播组播怎么实现呢?
    @also24 不需要考虑这些…主要是分发算法
    Xs0ul
        10
    Xs0ul  
       2021-07-28 03:51:24 +08:00
    要搞清楚是要问实现还是算法。实现就像大家说的用 bt,怎么分发靠 bt 自己解决。

    算法的话,就是考虑“最短时间”。楼主描述的“分成 10000 个 10M 的小文件”,为什么是 10000 和 10 ? 5000 和 20 会不会更快?然后“node 间互相分发”又是怎么个分法,怎么保证不缺少也不重复 /浪费?
    zhoudaiyu
        11
    zhoudaiyu  
    OP
       2021-07-28 05:46:54 +08:00 via iPhone
    @Xs0ul 确实,老哥,那具体怎么做拆分,你有想法吗?
    JamesChen
        12
    JamesChen  
       2021-07-28 06:06:24 +08:00
    有限定不能用 NAS 存储吗?没限定的话,用 NAS 直接挂载共享 FS 就完事了。有时候程序员容易死脑筋,想得太多,懂得太少,不要在一个糟糕方案的方案下死磕。
    zhoudaiyu
        13
    zhoudaiyu  
    OP
       2021-07-28 08:46:41 +08:00 via iPhone
    @JamesChen 首先,我觉得既然是只给了这些资源,而且主要想考察的是分发思路,那就默认不考虑 NAS 等其他硬件了;第二,我理解分发的意思是文件要落在这些机器上;第三,不知道你所谓的死脑筋是如何转进的,使用软件替代硬件就是死脑筋吗?省成本也是死脑筋么?
    hq136234303
        14
    hq136234303  
       2021-07-28 10:06:09 +08:00
    切分 。然后每台服务器做运行效率不一样 用窃取算法?
    blindlf
        15
    blindlf  
       2021-08-26 06:07:25 +08:00
    @JamesChen 10000 台机器同时从 NAS 取,NAS 带宽不够用吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3286 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:49 · PVG 19:49 · LAX 03:49 · JFK 06:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.