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

在不考虑安全的前提下,如何设计一个方案,实现 4 个 G 的文件的快速异地传输?比如从北京到上海... 面试的时候没答上来,求大佬们指点迷津

  •  
  •   moran3649 · 2019-08-06 17:30:55 +08:00 · 20320 次点击
    这是一个创建于 1961 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  2019-08-06 19:39:29 +08:00
    萌新第一次发帖没注意标题长度,是这样的,就是不要求安全,仅要求效率,怎么快怎么来
    134 条回复    2019-08-08 07:52:08 +08:00
    1  2  
    uncat
        101
    uncat  
       2019-08-07 10:25:12 +08:00
    1. 接收端 nc 监听本地端口用于接收文件
    2. 购买一台按量付费服务器, 带宽选择按量付费不限峰值
    3. ssh 映射 nc 监听端口到服务器
    4. 发送端 ssh 服务器端的接收端口到本地
    5. 发送端发送文件内容到本地监听端口
    windfarer
        102
    windfarer  
       2019-08-07 10:27:23 +08:00
    @qq976739120 你应该答,叫个饿了么小哥送
    ryd994
        103
    ryd994  
       2019-08-07 10:37:44 +08:00 via Android
    Python -m simplehttpserver 或者任何轻量 HTTP 服务器
    取决于数据特点可以考虑启用 gzip 压缩
    对面用 uget / aria2c 多线程&断点续传

    如果是 Linux 服务器的话完全可以 rsync+ssh,还兼顾安全呢
    qinyusen
        104
    qinyusen  
       2019-08-07 10:41:08 +08:00   ❤️ 2
    上次看到这种问题的时候,是 12TB 数据。。。
    答案是高铁人肉送一下。。。
    harck
        105
    harck  
       2019-08-07 10:47:18 +08:00
    高铁 4 小时 18 分 左右
    飞机 2 小时 20 分左右
    快递 24 小时左右
    AlvaIM
        106
    AlvaIM  
       2019-08-07 10:50:47 +08:00   ❤️ 1
    早上 Mac 收到更新,2 个 G 的更新文件,2 分钟不到就下载完了。 很想知道让坐飞机的是让楼主坐土飞机么?

    让面试考官出题严谨,真是呵呵, 又不是高考,吐槽别人出题不严谨的心理上还没毕业吧。

    面试就是为了考察候选人面对问题处理问题的能力。 开放式的问题考验的也是你提问题的能力, 对一个 Case 连有价值的问题都提不出来,怎么能指望你能解决问题。这个问题又不复杂, 在不同的条件下有很多种不同的方案,包括看似不靠谱的坐飞机方案,但是楼主连问题都没问,接收两端的网络环境啊,有无什么物理限制啊这些。

    最后说道问题本身, 尽可能的快, 那么就包括了 线路选择和尽可能占满带宽,这两个要解决的问题。 包括坐飞机也是线路选择的一个可选模式。
    wodexiaogou
        107
    wodexiaogou  
       2019-08-07 10:51:22 +08:00   ❤️ 1
    他说不考虑安全的前提下,这就已经告诉你答案了啊,用 udp 方式传输
    ipwx
        108
    ipwx  
       2019-08-07 10:53:55 +08:00
    充分利用带宽,在现行网络协议的框架下面,瓶颈是 TCP 丢包造成的拥塞控制协议误判,导致带宽利用率底下。一种方案是多线程传输,所以你架个 HTTP(s) 服务器(譬如 Nginx ),用多线程下载软件(譬如 aria2 )下载就行了。

    然而国内网络的丢包很小,我觉得说不定不用搞这个,也能接近跑满带宽。
    ----

    这个答案怎么样?楼主?
    vocaloid
        109
    vocaloid  
       2019-08-07 11:13:21 +08:00
    @AlvaIM #106 国内下载是快,但是家宽普遍上传速度嘛...
    ych8398527
        110
    ych8398527  
       2019-08-07 11:28:21 +08:00
    百度云开会员
    c0878
        111
    c0878  
       2019-08-07 11:36:05 +08:00
    这是考思考问题的全面性 给的条件越少 你要考虑的点就越多 至少给出几个不同的解决方案并说明这些方案的区别和优缺点
    只说一个 ftp 下载之类的 估计面试官那边得分不会高
    goodryb
        112
    goodryb  
       2019-08-07 11:48:38 +08:00
    比较赞同 #111 的说法,开放性问题就要开放性回答,没有限制条件你就可以自定条件
    zcqshine
        113
    zcqshine  
       2019-08-07 11:52:54 +08:00
    QQ 现在可以传输 4G 的文件了不
    wlsnx
        114
    wlsnx  
       2019-08-07 11:55:55 +08:00
    4G 又不是 4T,直接 rsync 就行了。
    fuyufjh
        115
    fuyufjh  
       2019-08-07 11:58:13 +08:00
    这么简单的场景,无论用 HTTP 还是 FTP 还是 TCP 直接发,都不会有太大区别

    要是我就会问如果北京有个 4T 的文件,怎么给各个省会城市传一份,假设地理位置越近带宽越宽
    zjyl1994
        116
    zjyl1994  
       2019-08-07 11:59:23 +08:00
    4g 不算大啊,公司 vps 开了个 100M 的端口,scp 过去也没多少时间
    前几天刚从成都往上海送了 10G 文件的路过
    miserist
        117
    miserist  
       2019-08-07 12:09:29 +08:00
    帝都,百度云,开会员,上传文件,魔都,百度云,开会员,下文件
    guokeke
        118
    guokeke  
       2019-08-07 12:42:38 +08:00
    4G 直接 rsync 就行,而且追求速度的话,瓶颈永远是带宽,加钱就好了,设计方案再牛逼也没法突破带宽限制,
    除非设计压缩算法。
    bilberry
        119
    bilberry  
       2019-08-07 13:05:11 +08:00
    飞鸽传书,把 U 盘绑到鸽子身上 https://mp.weixin.qq.com/s/RSvEWTzMHEYvY6FBdC4cbQ
    yzmm
        120
    yzmm  
       2019-08-07 13:27:26 +08:00
    把文件分成 1000 份,然后 100 线程 UDP 传,至于接受端收不收得到管我屁事啊。
    问这问题的人不知道是在想啥,如果网速 10GB/S 那么考虑怎么传输真的就重要了?
    wingyiu
        121
    wingyiu  
       2019-08-07 13:31:29 +08:00
    分块 并发 md5 校验 小客户端 合并 udp 考虑双方带宽 先计算跑满
    bertsir
        122
    bertsir  
       2019-08-07 13:49:54 +08:00
    不说带宽的都是耍流氓
    lenmore
        123
    lenmore  
       2019-08-07 14:14:51 +08:00
    4G 不大不小
    1、考虑压缩。
    2、用最简单的工具,比如 QQ,云盘,SFPT
    3、考虑带宽,如果 PC 端的网络带宽不够,可以考虑通过手机 4G 网络传。一般 4G 网络的上传是不限速的,快的可以达到好几 MB。
    lmw2616
        124
    lmw2616  
       2019-08-07 14:16:47 +08:00 via Android
    分包多线程上传,到阿里云,接收方同时下载,
    nicoljiang
        125
    nicoljiang  
       2019-08-07 14:27:59 +08:00
    假如我是面试官,我得到目的大概是:
    1. 看你应激的场景梳理能力;
    2. 看你知识的广度(喜欢折腾技术的 geek 和 培训班 出来的 coder 能看出很大差别);
    3. 看你对网络的特性是否有深入了解(例如:切成 4096 个 1M 的小文件,多线程传输,以充分利用「 TCP 的流量控制 /拥阻控制」算法的特性)

    当然,实际上我并非研发,而是 PM,所以纯属瞎猜。
    casaca
        126
    casaca  
       2019-08-07 15:20:22 +08:00
    发顺丰比较快。
    lihongjie0209
        127
    lihongjie0209  
       2019-08-07 17:09:52 +08:00
    突然想起来可以反问啊

    直接问: ftp/http/rsync 是否可以满足需求, 不满的话把需求再明确一下不就有方向了吗
    radc
        128
    radc  
       2019-08-07 17:17:00 +08:00
    干过带着硬盘去机房直接拷的事 200G 同城打车往返 80 块 :doge:
    xomix
        129
    xomix  
       2019-08-07 17:34:11 +08:00
    拆分 /分布式发送 /分布式接收 /合并
    你能答出来这个就已经合格
    如果能想到用 udp 协议和 hash 校验来替换 tcp,那你的分数就相当高了。
    vmskipper
        130
    vmskipper  
       2019-08-07 17:48:02 +08:00
    北京 上海建一条专门传数据的光纤
    YaakovZiv
        131
    YaakovZiv  
       2019-08-07 21:16:48 +08:00
    阿里和华为有对象存储服务,传上去,然后对端下载,速度就很快,4G,该题目未对带宽限制,根据我以前在家里体验的情况看,预估在 10 分钟左右,可以传输 7G 的文件,无论是单个文件还是多个文件一共 7G。相对来说,这里面附带了对安全的考虑,因为可以设置安全策略限制指定的用户下载资源。
    再有就是,北京的终端 A 和上海的终端 B,同时使用了云磁盘 C,共享磁盘 C,A 终端存储的该 4G 文件可以直接在终端 B 查看使用。
    danmu17
        132
    danmu17  
       2019-08-07 21:31:48 +08:00
    @xomix 问题是在现实世界里,在双方网络都正常的前提下,这样做完全是无用功,不会提高任何效率。好奇在中国哪种水平的公司才会有这种低水平的面试题。
    moran3649
        133
    moran3649  
    OP
       2019-08-08 07:46:33 +08:00 via Android
    各位大佬的指点让我越来越懵逼。 😂
    事实上这是某外包公司的面试问题,楼主也是浪了四个月第一次去面试,很多事情都没想到缩小问题范围,比如带宽限制,考验知识的方向等等。
    hfutzj
        134
    hfutzj  
       2019-08-08 07:52:08 +08:00 via Android
    @alamaya 什么傻逼回答,还有这么多人赞同
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5234 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 01:16 · PVG 09:16 · LAX 17:16 · JFK 20:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.