4

我正在编写代码以使用 Fabric 部署到所有 Web 机器,并且想知道rsync 与上传项目并行化和最短时间方面是如何工作的。

有没有基准?

我可以并行同步到 100 台机器吗?限制因素是什么?

  rsync_project(
        env.root,
        exclude=RSYNC_EXCLUDE,
        delete=True,
        extra_opts=extra_opts,
    )

同样,upload_project 的限制因素是什么?sftp 的数量限制是多少?

@parallel
def testapp():
    with cd('~/projects'):
        upload_project('./receiver', '/home/sysadmin/projects')

从直觉的角度来看,上传项目应该更好,因为 tar 只需要完成一次,然后是 sftp。还是上面显示的示例多次?

Fabric 是否会进行某种节流以确保网络不会阻塞到极限?

有人可以帮忙吗?

4

1 回答 1

2

在对 rsync 和 upload_project 进行基准测试之前,您必须知道 rsync 仅传输差异数据。当您的部署只包含很少的更改时,rsync 将变得比 upload_project 更高效。

delete=True表示本地已删除的文件将被远程删除。这可能是你想要的。

如果您坚持,我不得不说基准测试结果将取决于文件编号和它们的大小。例如,如果你有 1K 大小的 1G 文件,rsync 会比 upload_project 慢很多。因为后者总是打包一个 tar/gzip 然后传输这个大文件。

最后,fabric 没有“tar 缓存”,它会在每次部署时重复 tar,因为代码写成:

    finally:
        run("rm -f %s" % tar_file)
finally:
    local("rm -rf %s" % tmp_folder)

但是你可以添加一些缓存或者手动注释掉它们。

对于网络问题,fabric 将它们留给具有拥塞窗口的 sftp,以确保网络不会阻塞。

于 2012-05-28T17:30:52.243 回答