Распределенная файловая система для кэша приложений и журналов
У меня есть приложение php symfony на одном сервере, и оно масштабируется по горизонтали с помощью докеров на разных узлах. Поэтому здесь я хотел использовать кластерную файловую систему для кэширования и журналов для ее централизации и монтирования в контейнеры докеров.
Я добился этого с помощью glusterfs и протестировал с одним пользователем, который работал хорошо. Но по мере увеличения нагрузки приложение снижалось, а время отклика увеличивалось, и иногда пользователи получали белый экран. Я удалил glusterfs и использовал локальную файловую систему, которая повысила производительность приложения и не увидела увеличения времени отклика при большой нагрузке. Исходя из этого, я предполагаю, что glusterfs не является хорошим выбором в качестве кластерной файловой системы для хранения кэша и журналов.
Итак, вопрос в том, существует ли какая-либо другая файловая система, которая снижает производительность приложения?
Спасибо.
1 ответ
Как вы обнаружили, размещение кеша Symfony и вход в систему с разделяемой ФС - действительно плохая идея. Местная ФС - это путь туда. Хотя, если вы перейдете к конфигурации с несколькими серверами, несколько советов:
- Убедитесь, что сессии хранятся в другом месте, Memcached или Redis - это ИМО путь. Файловые сессии являются узким местом в PHP
- в худшем случае, если вам нужно придерживаться файловых сессий, сделайте ваш сервер сбалансированным по IP ("сессия прикреплена" в nginx). В противном случае пользователи будут отключены.
- переходить от файлов журнала к централизованному регистратору, в идеале что-то через UDP (не блокируя)
- некоторые части кэша Symfony могут быть перемещены из FS для лучшей производительности события: Doctrine может использовать другой тип кэша (опять-таки memcache, APCu...), базовый обратный прокси-сервер Symfony может быть заменен на Varnish.
Я не вижу больше, чтобы сказать, что-то еще, чтобы спросить?