Что происходит в NFS, если 2 или более серверов пытаются одновременно записать один и тот же файл? - PullRequest
2 голосов
/ 30 сентября 2010

Я работаю над веб-приложением PHP, которое выполняет автоматическое изменение размера изображений, и я думаю о сохранении кэшированных копий на смонтированном NFS NAS, поэтому мне легко очистить кэш при обновлении изображений.

Единственное, что меня беспокоит, так это то, что в целом происходит с NFS, если 2 или более серверов в кластере пытаются создать один и тот же файл кэша изображений одновременно?

Есть довольно хороший шанс, что, когда кэш будет очищен для обновлений контента, они могут столкнуться таким образом, но у меня нет отличного способа проверить этот сценарий в процессе разработки, потому что я работаю только с одним блоком.

Кто-нибудь с опытом в этом?

1 Ответ

4 голосов
/ 30 сентября 2010

Зависит от того, как вы открываете файл.Если вы откроете файл в режиме «добавления», то Unix / Linux будет фактически записывать содержимое в кеш до тех пор, пока вы не создадите символ новой строки, а затем вставит новую строку в конец файла (перезаписав «конец байта (шаблон байта) и записывает новый конец файла.В этом случае, если два человека пытаются записать в один и тот же файл одновременно, обе строки записи пройдут, прикрепляя себя по одной строке за раз в порядке их получения.Таким образом, вы можете ожидать что-то вроде:

This was the old contents
of the file
The first script added
The second script added
this line (script 1)
this line (script 2)

В редком случае, когда две команды «записи» поступают ТОЧНО в одно и то же время (с точностью до наносекунды), тогда операционная система фактически создает состояние прерывания.Это зависит от ОС, как она это обрабатывает, но большинство просто сгенерирует два случайных числа, чтобы решить, кто идет первым.

Если вы откроете файл в режиме «записи» (скажем, вы хотите добавить контент в середину) тогда вам действительно нужно заблокировать файл, чтобы сделать это.Второй скрипт PHP выдаст ошибку, сообщающую, что он не может открыть файл.

...