在两个实例上加快小文件 (500kb) 的 rsyncing
Posted
技术标签:
【中文标题】在两个实例上加快小文件 (500kb) 的 rsyncing【英文标题】:speed up rsyncing of small files (500kb) over two instances 【发布时间】:2013-06-27 20:59:37 【问题描述】:我有两个 ec2 实例,webserver
和 production
。我需要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 密钥。如果是这样,您还应该检查该文件,以查看它使用的记录是否涉及具有自身滞后问题的包装脚本 - 如果其他人编写了它并且您是对其进行故障排除的人,这可能会令人惊讶。
另一个问题是您是否应该考虑编写一些代码来使延迟无关紧要。即使是一秒钟的实际更新也会影响事情,rsync
ed 目录很容易在动态内容中增长,因此以后需要更多的更新时间。在以前的公司中,我们有时不得不维护不同的代码层次结构(比如说两个),并在未使用的代码上执行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的主要内容,如果未能解决你的问题,请参考以下文章
android将相机捕获的图像的文件大小减小到小于500 kb