在两个实例上加快小文件 (500kb) 的 rsyncing

Posted

技术标签:

【中文标题】在两个实例上加快小文件 (500kb) 的 rsyncing【英文标题】:speed up rsyncing of small files (500kb) over two instances 【发布时间】:2013-06-27 20:59:37 【问题描述】:

我有两个 ec2 实例,webserverproduction。我需要production 将小文件(2-5kb)复制到webserver 和从webserver 复制,而网络服务器无法访问生产。我正在使用 ubuntu 12.04。目前,我在 ssh 上使用 rsync 会有 4-5 秒的延迟。有没有更快的方法来做到这一点?我可以忍受 1 秒的延迟。

我正在考虑在 vpc 中启动实例,并通过网络过程,但我不确定这是否足够快 - 关于这方面的教程也很少。或者,我已经开始阅读有关 nfs 的信息,但我再次不确定它是否能解决问题。

【问题讨论】:

【参考方案1】:

初始 rsync 延迟有几个可能的原因

rsync 在完成任何数据更新之前对双方进行调查以确定有什么不同。如果您有一些大数据块或大量目录条目,这可能需要一段时间。如果您启用了 --checksum,这尤其会成为一个问题,它会执行完整的内容校验和以检查差异。 rsync 通常与 SSH 一起使用,这可能会由于 DNS 滞后和超时而出现延迟,因此您可以检查以确保两台主机的 DNS 记录都有正向 (A) 和反向 (PTR) 记录,并且 DNS 功能正常两端,或者主机通过/etc/hosts等相互认识。

确保首先测试 SSH 连接是否存在延迟,假设您使用 SSH 作为 rsync(默认)的传输机制,并且目标端的 ~/.ssh/authorized_keys 文件中包含 SSH 密钥。如果是这样,您还应该检查该文件,以查看它使用的记录是否涉及具有自身滞后问题的包装脚本 - 如果其他人编写了它并且您是对其进行故障排除的人,这可能会令人惊讶。

另一个问题是您是否应该考虑编写一些代码来使延迟无关紧要。即使是一秒钟的实际更新也会影响事情,rsynced 目录很容易在动态内容中增长,因此以后需要更多的更新时间。在以前的公司中,我们有时不得不维护不同的代码层次结构(比如说两个),并在未使用的代码上执行rsync,然后切换。当然,这可能不适用于您的情况(类似的问题可能会出现在 git 部署更新等中,如果有运行仍然开放源文件的脚本语言,例如 bash 倾向于)。

在本地网络上的一个小目录上进行测试的时间(time ...)显示:

sent 160 bytes  received 13 bytes  115.33 bytes/sec
total size is 3455  speedup is 19.97

real    0m0.499s
user    0m0.008s
sys     0m0.000s

strace可以让你看看时间都去哪儿了:

strace -tt -f -o /tmp/log  rsync -avz  ....

在我看来,在等待目标主机的反馈时,它看起来像是有少量延迟,大致符合我的预期。

【讨论】:

太棒了。关于我需要考虑的问题的详细信息。我能够使用术语找到这个docs.aws.amazon.com/AmazonVPC/latest/UserGuide/… 我可以设置私人和公共机器并在它们之间发送文件!也不需要 NAT。 我将尝试在联网机器上设置一个 redis 服务器/客户端。它每次都会起作用,而 rsync 并非每次都起作用。 嗯.. 我从未见过 rsync 失败,除非磁盘耗尽或网络故障。你的 rsync 命令是什么样的? 一位从事网络工作的朋友建议 rsync 不会很健壮。嗯,为此启动一个redis服务器可能有点矫枉过正。 像大多数工具一样,rsync 可能比其他工具更适合某些任务。它的幂等性因子相当强。如果没有关于您的情况和您尝试解决的命令的更详细信息,将很难为您提供帮助。

以上是关于在两个实例上加快小文件 (500kb) 的 rsyncing的主要内容,如果未能解决你的问题,请参考以下文章

PNG图片怎么压缩

MSSQL ndf文件大小变为0 KB恢复数据的过程

android将相机捕获的图像的文件大小减小到小于500 kb

熟知这几步,MSSQL ndf文件大小变为0 KB不再是难题

android减少摄像头捕获图像的文件大小小于500 kb

MSSQL数据库ndf文件大小变为0KB数据恢复过程