Согласно документации, AWS EFS (файловая система Amazon Elastic) поддерживает блокировку файлов:
Amazon EFS предоставляет интерфейс файловой системы и семантику доступа к файловой системе (например, строгую согласованность данных и блокировку файлов).
В локальной файловой системе (например, ext4) flock
может использоваться в сценариях оболочки для создания критической секции . Например, этот ответ описывает шаблон, который я использовал в прошлом:
#!/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? Amazon упоминает, что они используют протокол NFSv4, но предоставляет ли он те же гарантии, что и flock
на ext4?
Если нет, как вы можете обеспечить выполнение операции исключительно для всех экземпляров EC2, подключенных к одному и тому же тому EFS? Достаточно, если это работает для процессов, так как я не планирую запускать несколько потоков.
Или я неправильно понял поддержку блокировки, предоставляемую в NFSv4? К сожалению, я не знаю деталей протокола, но обеспечение атомарности в распределенной системе является гораздо более сложной проблемой, чем на локальной машине.
Обновление: небольшой эксперимент
Конечно, это не доказательство, но в моих тестах это работает в нескольких случаях. Сейчас я предполагаю, что шаблон безопасен в использовании. Тем не менее, было бы неплохо знать, если это теоретически правильно.