巨型文件 FTP 连续增量同步方法讨论 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
blisdom
V2EX    程序员

巨型文件 FTP 连续增量同步方法讨论

  •  
  •   blisdom 2016-08-29 23:19:49 +08:00 5042 次点击
    这是一个创建于 3330 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求场景如下: A 是数据源,不断轮换生产体积巨大的文件(每个几个 G 以上),然后 FTP 传到接口机 B , B 立即同时将文件转送到服务器 C 进行处理(单向增量连续上传),服务器 C 只能部署 FTP 协议和开放 FTP 端口,无 RSYNC 。采用什么方法和技术能够高效率地解决转发的问题,确保 B 不会存在瓶颈。这个场景有个特点就是文件巨大并且希望在 A 上传 B 文件还未完的同时 B 就能开始往 C 同步。本人研究过的方法有 RSYNC+INOTIFY/LFTP(Mirror)/WPUT/Duplicity 等.

    以下分别说说各种方法的问题:

    1. Rsync :如果 C 端允许部署应该是比较科学合理的手段,可惜很多场景下不允许。
    2. Lftp :B 确实可以在 A 上传文件的往 C 同步,可是每执行 mirror 一次,都是重头开始上传过未完得文件,无法续传。一旦 B=》 C 的速率较快提前传完,那么下一次执行时就会又重新上传过,出现流量冗余,故无法采纳。
    3. Wput :和 Wget 类似的工具,支持续传到 C (这点比 Lftp mirror 好),而且速度教快, B=》 C 的速率较快提前传完, B 上的 wput 会不断再追 A 来的文件,直到缓冲区溢出中断,无法等待文件增长一段长度再追,故也难以接纳。
    4. Duplicity :在找办法的过程中发现又许多朋友说这个好,但试了下这个只是针对备份,不是同步源文件。直接忽略了。 希望有大牛分享下思路。谢谢
    11 条回复    2016-09-01 13:57:06 +08:00
    manhere
        1
    manhere  
       2016-08-29 23:23:46 +08:00 via iPhone
    btsync ,可是你的 C 限定了 FTP
    blisdom
        2
    blisdom  
    OP
       2016-08-29 23:39:42 +08:00
    https://github.com/joedicastro/lftp-mirror 刚刚发现这个,可惜看上去还是无法解决问题本质上还是用 lftp 。不过作者在文档末尾对这类问题总结得挺好
    blisdom
        3
    blisdom  
    OP
       2016-08-29 23:40:16 +08:00
    @manhere 谢谢,环境限制只能用 FTP
    also24
        4
    also24  
       2016-08-29 23:47:08 +08:00
    所以其实就是想办法把 C 的 21 端口映射到 B 上?
    also24
        5
    also24  
       2016-08-29 23:49:32 +08:00
    不太清楚我有没有理解错,看描述感觉……

    B 上开 iptables 把本机的 21 端口上的流量全部转发到 C 上似乎就可以?
    ooonme
        6
    ooonme  
       2016-08-30 14:37:05 +08:00 via iPhone
    linux 没学好啊…管道不就是干这个的,另外告诉你个命令 nc ,只要开支持 socket 都 ok ,运维级就 ok


    生产级别考虑 flme
    ooonme
        7
    ooonme  
       2016-08-30 14:38:04 +08:00 via iPhone
    你上面那些都是应用层协议, ftp 是不支持断点的
    JoeyChan
        8
    JoeyChan  
       2016-08-30 15:48:02 +08:00
    B 一定要保留传输的文件吗?如果不需要的话,可在 B 上采用 haproxy 中转直接转发 C 的 FTP ,指定 FTP 的被动传输端口范围即可。
    blisdom
        9
    blisdom  
    OP
       2016-08-30 21:24:21 +08:00
    thx all above , B 需要缓存一段时间的传输文件。所以没有采用端口转发,昨晚研究了下用 socat 做端口转发,同时分流出文件,但目前还试验未有成功,期待有更好的办法。
    blisdom
        10
    blisdom  
    OP
       2016-08-31 08:53:03 +08:00 via iPhone
    @ooonme nc 只能端口转发无法实现缓冲;两端是 ftp,flume 貌似 sink 出来的不再是和原文件一样的吧
    firefox12
        11
    firefox12  
       2016-09-01 13:57:06 +08:00
    这种东西 ftp 直接做就可以, ftp 可以续传的。 我没看到任何瓶颈可能存在的地方,如果是 1000M 网络,那么每秒接近 112M 的速度, 你需要把硬盘换成 ssd , 10 分钟可以穿 60G 你觉得可能的瓶颈在那里?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1002 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 18:34 PVG 02:34 LAX 11:34 JFK 14:34
    Do have faith in what you're doing.
    ubao 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