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

2021-07-27 21:04:12 +08:00
 zhoudaiyu

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

1670 次点击
所在节点    问与答
15 条回复
liprais
2021-07-27 21:08:33 +08:00
你说的不就是 bt....
cloudera 就是这样做的
我觉得面试官也没啥好办法
tanhui2333
2021-07-27 21:16:08 +08:00
url base64 aHR0cDovL2x4dzEyMzQuY29tL2FyY2hpdmVzLzIwMTgvMDcvOTE1Lmh0bQ==
感觉按这个答面试官也不一定满意。
有时候面试跟对接头暗号差不多。
heyjei
2021-07-27 21:19:43 +08:00
做成 BT 种子分发,CDH 的安装就是这么做的。
xiaoz
2021-07-27 21:27:23 +08:00
用 BT 协议,我看腾讯蓝鲸云资产管理中,文件分发就支持每个节点作为 BT 来传输。
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
2021-07-27 23:27:09 +08:00
这个不是有人在 v 站问过吗?
不会是同一个公司面试吧?
rrfeng
2021-07-27 23:30:48 +08:00
p2p 应该没问题吧
黑科技用广播 /组播(也不是不可以
also24
2021-07-27 23:40:34 +08:00
我觉得首先要确认网络拓扑情况,先搞清楚物理层面的限制,再去设计应用层的事情。
zhoudaiyu
2021-07-28 00:13:52 +08:00
@liprais 我突然发现我不经意间说出了 P2P 的思想…当时真没想到 P2P 和 BT
@tanhui2333 就是 P2P
@heyjei 当时面试完和面试官聊说到了 CDH,所以我更不理解为啥他不满意我的思路了…
@xiaoz 学到了
@matrix67 谢谢大佬,果然像面试官说的有很多细节的地方可能涉及到很多底层的知识,看似简单其实复杂,看了一下这两个项目确实考虑的很多
@des 难道是某健身软件?
@rrfeng 大佬,我听到了不一样的声音,广播组播怎么实现呢?
@also24 不需要考虑这些…主要是分发算法
Xs0ul
2021-07-28 03:51:24 +08:00
要搞清楚是要问实现还是算法。实现就像大家说的用 bt,怎么分发靠 bt 自己解决。

算法的话,就是考虑“最短时间”。楼主描述的“分成 10000 个 10M 的小文件”,为什么是 10000 和 10 ? 5000 和 20 会不会更快?然后“node 间互相分发”又是怎么个分法,怎么保证不缺少也不重复 /浪费?
zhoudaiyu
2021-07-28 05:46:54 +08:00
@Xs0ul 确实,老哥,那具体怎么做拆分,你有想法吗?
JamesChen
2021-07-28 06:06:24 +08:00
有限定不能用 NAS 存储吗?没限定的话,用 NAS 直接挂载共享 FS 就完事了。有时候程序员容易死脑筋,想得太多,懂得太少,不要在一个糟糕方案的方案下死磕。
zhoudaiyu
2021-07-28 08:46:41 +08:00
@JamesChen 首先,我觉得既然是只给了这些资源,而且主要想考察的是分发思路,那就默认不考虑 NAS 等其他硬件了;第二,我理解分发的意思是文件要落在这些机器上;第三,不知道你所谓的死脑筋是如何转进的,使用软件替代硬件就是死脑筋吗?省成本也是死脑筋么?
hq136234303
2021-07-28 10:06:09 +08:00
切分 。然后每台服务器做运行效率不一样 用窃取算法?
blindlf
2021-08-26 06:07:25 +08:00
@JamesChen 10000 台机器同时从 NAS 取,NAS 带宽不够用吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/792129

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX