Я определенно не эксперт в этом вопросе, но я знаю, что fcntl
, как вы также заявили, не сработает в вашем случае.Консультативные блокировки fcntl имеют смысл только в пределах одной машины.
Так что забудьте меня, если это не по теме.Я использовал File :: NFSLock для решения проблемы кеша / собачьей кучи / штамповки.Несколько серверов приложений считывали и записывали файлы кэша на томе NFS (не очень хорошая идея, но именно с этого мы и начали).
Я подклассифицировал / обернул File :: NFSLock, чтобы изменить его поведение.В частности, мне нужно:
- постоянные блокировки, которые не исчезают, когда объект File :: NFSLock выходит из области видимости.Используя обычный File :: NFSLock, ваша блокировка исчезнет, когда объект выйдет из области видимости.Это было не то, что мне было нужно.
- , что фактические файлы блокировки также содержат имя машины , которая получила блокировку.Идентификатора процесса явно недостаточно, чтобы решить, завершен ли процесс, поэтому я могу безопасно украсть файл блокировки.Поэтому я изменил код так, чтобы записывать файлы блокировки как
machine:pid
вместо просто pid
.
Это прекрасно работало в течение пары лет.
Пока объем запросов не увеличилсяувеличение в 10 раз.То есть в прошлом месяце у меня начались первые проблемы, когда два бэкэнда записывали действительно занятый файл кэша в в то же время , оставляя после себя мертвые блокировки.Это произошло для меня, когда мы достигли примерно 9-10 миллионов просмотров страниц в день, просто чтобы дать вам представление.
Окончательный битый файл кэша выглядел так:
<!-- START OF CACHE FILE BY BACKEND b1 -->
... cache file contents ...
<!-- END OF CACHE FILE BY BACKEND b1 -->
... more cache file contents ... wtf ...
<!-- END OF CACHE FILE BY BACKEND b2 -->
Это может произойти толькоесли два бэкэнда пишут в один и тот же файл одновременно ... Пока не ясно, вызвана ли эта проблема File :: NFSLock + нашими модами или какой-то ошибкой в приложении.
В заключение, если вашприложение не очень загружено и переправлено, затем выберите File :: NFSLock, я думаю, это ваш лучший выбор.Вы уверены, что все еще хотите использовать NFS?