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

2016-08-29 23:19:49 +08:00
 blisdom

需求场景如下: 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 :在找办法的过程中发现又许多朋友说这个好,但试了下这个只是针对备份,不是同步源文件。直接忽略了。 希望有大牛分享下思路。谢谢
4417 次点击
所在节点    程序员
11 条回复
manhere
2016-08-29 23:23:46 +08:00
btsync ,可是你的 C 限定了 FTP
blisdom
2016-08-29 23:39:42 +08:00
https://github.com/joedicastro/lftp-mirror 刚刚发现这个,可惜看上去还是无法解决问题本质上还是用 lftp 。不过作者在文档末尾对这类问题总结得挺好
blisdom
2016-08-29 23:40:16 +08:00
@manhere 谢谢,环境限制只能用 FTP
also24
2016-08-29 23:47:08 +08:00
所以其实就是想办法把 C 的 21 端口映射到 B 上?
also24
2016-08-29 23:49:32 +08:00
不太清楚我有没有理解错,看描述感觉……

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


生产级别考虑 flume
ooonme
2016-08-30 14:38:04 +08:00
你上面那些都是应用层协议, ftp 是不支持断点的
JoeyChan
2016-08-30 15:48:02 +08:00
B 一定要保留传输的文件吗?如果不需要的话,可在 B 上采用 haproxy 中转直接转发 C 的 FTP ,指定 FTP 的被动传输端口范围即可。
blisdom
2016-08-30 21:24:21 +08:00
thx all above , B 需要缓存一段时间的传输文件。所以没有采用端口转发,昨晚研究了下用 socat 做端口转发,同时分流出文件,但目前还试验未有成功,期待有更好的办法。
blisdom
2016-08-31 08:53:03 +08:00
@ooonme nc 只能端口转发无法实现缓冲;两端是 ftp,flume 貌似 sink 出来的不再是和原文件一样的吧
firefox12
2016-09-01 13:57:06 +08:00
这种东西 ftp 直接做就可以, ftp 可以续传的。 我没看到任何瓶颈可能存在的地方,如果是 1000M 网络,那么每秒接近 112M 的速度, 你需要把硬盘换成 ssd , 10 分钟可以穿 60G 你觉得可能的瓶颈在那里?

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

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

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

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

© 2021 V2EX