У меня есть php-приложение, которое работает на нескольких серверах приложений за балансировщиком нагрузки.
Давайте предположим, что это приложение используется для отправки массовых писем. Ниже приведен данный процесс:
Пользователь использует API для отправки электронной почты тысячам пользователей
Приложение PHP разбивает эти тысячи адресов электронной почты на кучу писем по 5-5 тысяч и сохраняет их в виде php-массива в файлах .php.
И затем эти файлы обрабатываются один за другим в разных процессах. (Чтобы обработать эти файлы, внутренние API получают следующее имя файла, которое может быть обработано любым сервером)
Эти файлы хранятся в папке, скажем, email_csv
вместе с файлами кода в public_html
. Поскольку каждому серверу приложений требуется доступ к этим файлам .php, поэтому у меня есть один жесткий диск, смонтированный на одном из серверов, а затем смонтированный на каждом из серверов в качестве NFS-сервера (я не очень уверен в техническом термине)
Вот вывод mount
для этого жесткого диска:
10.0.0.74:/home/kadamb/public_html on /home/kadamb/public_html type nfs4 (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,acregmin=2,hard,proto=tcp,port=0,timeo=5,retrans=2,sec=sys,clientaddr=10.0.0.27,local_lock=none,addr=10.0.0.74)
Теперь проблема в том, что именно этот жесткий диск - одна из моих единственных точек отказа. Мне нужно удалить эту зависимость и иметь все серверы на своем жестком диске со всей базой кода. Но я не могу этого сделать из-за требования к общей папке.
Есть два варианта, о которых я подумал:
Используйте S3 для хранения этих файлов, но я искал и обнаружил, что при извлечении файла из S3 существует задержка в 200-300 мс. Другой способ - монтировать S3 на каждом сервере локально, а не вызывать API, но я не уверен, будет ли проблема с задержкой решена с этим или нет.
Использование отдельного жесткого диска для этих файлов, а также монтирование и совместное использование этого на каждом сервере. (и наличие отдельного жесткого диска с кодом на каждом сервере)
Я могу думать только об этих двух.
Есть ли другой (лучший) вариант для реализации этого? Или я должен выбрать один из вышеперечисленных вариантов?
Спасибо
Еще немного подробнее:
В настоящее время жесткий диск распределяется между 22 серверами приложений.
Серверы размещены на AWS, а ОС - Amazon Linux.
Около миллиона файлов создаются каждый день и удаляются после их обработки.