根据文档,AWS EFS(Amazon Elastic File System)支持文件锁定:
在本地文件系统(例如ext4)中,Amazon EFS提供了文件系统接口和文件系统访问语义(例如强一致性和文件锁定)。
flock
可以在shell脚本中用于创建 临界区。例如,此答案描述了我过去使用过的一种模式:#!/bin/bash
(
# Wait for lock on /var/lock/.myscript.exclusivelock (fd 200) for 10 seconds
flock -x -w 10 200 || exit 1
# Do stuff
) 200>/var/lock/.myscript.exclusivelock
同样的模式能够应用在EFS上吗?亚马逊提到他们使用了NFSv4协议,但是它是否提供与ext4上的flock
相同的保证呢?
如果不能,那么如何确保一个操作在连接到同一EFS卷的所有EC2实例中独占运行?如果它适用于进程,则已足够,因为我不打算运行多个线程。
或者我误解了NFSv4提供的锁定支持吗?不幸的是,我不知道协议的细节,但在分布式系统中提供原子性比在本地机器上更困难。
更新:小规模实验
当然不是证明,但在我的测试中,它可以在多个实例之间工作。目前,我认为这种模式是安全的。但仍然希望知道它在理论上是否可靠。