假设有一台 master 节点上有一个 100G 的二进制文件,想分发给 10000 台服务器 node1-node10000,master 和 node 节点都是互联互通的,且 node 节点间也是互联互通的,问题就是怎么能在最短时间内分发完毕。我的思路是把大文件切分成 10000 个 10M 的小文件分发给 node,然后 node 间互相分发这些小文件,最后合并成大文件验证校验和。面试官好像不太满意我的解决方案,问问大家有什么好的想法吗?
1
liprais 2021-07-27 21:08:33 +08:00 via iPhone
你说的不就是 bt....
cloudera 就是这样做的 我觉得面试官也没啥好办法 |
2
tanhui2333 2021-07-27 21:16:08 +08:00
url base64 aHR0cDovL2x4dzEyMzQuY29tL2FyY2hpdmVzLzIwMTgvMDcvOTE1Lmh0bQ==
感觉按这个答面试官也不一定满意。 有时候面试跟对接头暗号差不多。 |
3
heyjei 2021-07-27 21:19:43 +08:00
做成 BT 种子分发,CDH 的安装就是这么做的。
|
4
xiaoz 2021-07-27 21:27:23 +08:00 via Android
用 BT 协议,我看腾讯蓝鲸云资产管理中,文件分发就支持每个节点作为 BT 来传输。
|
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 |
6
des 2021-07-27 23:27:09 +08:00 via iPhone
这个不是有人在 v 站问过吗?
不会是同一个公司面试吧? |
7
rrfeng 2021-07-27 23:30:48 +08:00 via Android
p2p 应该没问题吧
黑科技用广播 /组播(也不是不可以 |
8
also24 2021-07-27 23:40:34 +08:00
我觉得首先要确认网络拓扑情况,先搞清楚物理层面的限制,再去设计应用层的事情。
|
9
zhoudaiyu OP |
10
Xs0ul 2021-07-28 03:51:24 +08:00
要搞清楚是要问实现还是算法。实现就像大家说的用 bt,怎么分发靠 bt 自己解决。
算法的话,就是考虑“最短时间”。楼主描述的“分成 10000 个 10M 的小文件”,为什么是 10000 和 10 ? 5000 和 20 会不会更快?然后“node 间互相分发”又是怎么个分法,怎么保证不缺少也不重复 /浪费? |
12
JamesChen 2021-07-28 06:06:24 +08:00
有限定不能用 NAS 存储吗?没限定的话,用 NAS 直接挂载共享 FS 就完事了。有时候程序员容易死脑筋,想得太多,懂得太少,不要在一个糟糕方案的方案下死磕。
|
13
zhoudaiyu OP @JamesChen 首先,我觉得既然是只给了这些资源,而且主要想考察的是分发思路,那就默认不考虑 NAS 等其他硬件了;第二,我理解分发的意思是文件要落在这些机器上;第三,不知道你所谓的死脑筋是如何转进的,使用软件替代硬件就是死脑筋吗?省成本也是死脑筋么?
|
14
hq136234303 2021-07-28 10:06:09 +08:00
切分 。然后每台服务器做运行效率不一样 用窃取算法?
|