【发布时间】:2018-06-25 22:07:21
【问题描述】:
我正在尝试在谷歌云中的多个实例之间同步操作。
在我创建新实例的图像的主文件夹中,我有几个文件命名如下:1.txt、2.txt、3.txt、...50000.txt。
我在名为gs://bucket/current_file.txt 的谷歌云存储桶中有另一个文件,该文件在一行中包含一个数字,表示所有正在运行的谷歌云实例正在处理的最新文件。最初,该文件如下所示:
0
现在我正在一个一个地创建多个谷歌实例。实例有一个这样的启动脚本:
gsutil cp gs://bucket/current_file.txt /home/ubuntu/;
past_file=`tail /home/ubuntu/current_file.txt`;
current_file=$((past_file+1));
echo $current_file > /home/ubuntu/current_file.txt;
gsutil cp /home/ubuntu/current_file.txt gs://bucket/;
process.py /home.ubuntu/$current_file.txt;
所以这个脚本下载当前正在被另一个实例处理的文件的值,然后它加1,然后开始处理这个增加的文件。还更新了gs://bucket/current_file.txt,以便其他实例知道他们可以开始处理的下一个文件的名称。当我只运行 1 个实例时,gs://bucket/current_file.txt 会正确更新,但是当我运行多个实例时,有时gs://bucket/current_file.txt 中的值会上升到一个值,然后又不规律地回落到一个减小的值。
我的假设是两个不同的实例试图同时上传同一个文件,并弄乱了文本文件中的整数值。
是否有可能锁定文件,以便其他实例等待一个实例覆盖gs://bucket/currrent_file.txt?
如果没有,有人可以建议任何其他机制,一旦它被一个实例处理,我可以通过它更新 current_file 编号,然后可以与其他实例通信,以便他们可以在完成处理后开始处理以下文件手头有文件吗?
【问题讨论】:
标签: google-cloud-platform google-cloud-storage