需求场景如下: A 是数据源,不断轮换生产体积巨大的文件(每个几个 G 以上),然后 FTP 传到接口机 B , B 立即同时将文件转送到服务器 C 进行处理(单向增量连续上传),服务器 C 只能部署 FTP 协议和开放 FTP 端口,无 RSYNC 。采用什么方法和技术能够高效率地解决转发的问题,确保 B 不会存在瓶颈。这个场景有个特点就是文件巨大并且希望在 A 上传 B 文件还未完的同时 B 就能开始往 C 同步。本人研究过的方法有 RSYNC+INOTIFY/LFTP(Mirror)/WPUT/Duplicity 等.
以下分别说说各种方法的问题:
- Rsync :如果 C 端允许部署应该是比较科学合理的手段,可惜很多场景下不允许。
- Lftp :B 确实可以在 A 上传文件的往 C 同步,可是每执行 mirror 一次,都是重头开始上传过未完得文件,无法续传。一旦 B=》 C 的速率较快提前传完,那么下一次执行时就会又重新上传过,出现流量冗余,故无法采纳。
- Wput :和 Wget 类似的工具,支持续传到 C (这点比 Lftp mirror 好),而且速度教快, B=》 C 的速率较快提前传完, B 上的 wput 会不断再追 A 来的文件,直到缓冲区溢出中断,无法等待文件增长一段长度再追,故也难以接纳。
- Duplicity :在找办法的过程中发现又许多朋友说这个好,但试了下这个只是针对备份,不是同步源文件。直接忽略了。 希望有大牛分享下思路。谢谢