У меня есть php-приложение, которое работает на нескольких серверах приложений за балансировщиком нагрузки.

Давайте предположим, что это приложение используется для отправки массовых писем. Ниже приведен данный процесс:

  1. Пользователь использует API для отправки электронной почты тысячам пользователей

  2. Приложение PHP разбивает эти тысячи адресов электронной почты на кучу писем по 5-5 тысяч и сохраняет их в виде php-массива в файлах .php.

  3. И затем эти файлы обрабатываются один за другим в разных процессах. (Чтобы обработать эти файлы, внутренние 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)

Теперь проблема в том, что именно этот жесткий диск - одна из моих единственных точек отказа. Мне нужно удалить эту зависимость и иметь все серверы на своем жестком диске со всей базой кода. Но я не могу этого сделать из-за требования к общей папке.

Есть два варианта, о которых я подумал:

  1. Используйте S3 для хранения этих файлов, но я искал и обнаружил, что при извлечении файла из S3 существует задержка в 200-300 мс. Другой способ - монтировать S3 на каждом сервере локально, а не вызывать API, но я не уверен, будет ли проблема с задержкой решена с этим или нет.

  2. Использование отдельного жесткого диска для этих файлов, а также монтирование и совместное использование этого на каждом сервере. (и наличие отдельного жесткого диска с кодом на каждом сервере)

Я могу думать только об этих двух.

Есть ли другой (лучший) вариант для реализации этого? Или я должен выбрать один из вышеперечисленных вариантов?

Спасибо

Еще немного подробнее:

  1. В настоящее время жесткий диск распределяется между 22 серверами приложений.

  2. Серверы размещены на AWS, а ОС - Amazon Linux.

  3. Около миллиона файлов создаются каждый день и удаляются после их обработки.

0