Статьи :
Влияние отправки писем на загрузку страницы
25 января 2014, 19:03 |
В данной статье мы рассмотрим кейс из нашей практики, связанный с отправкой писем из скриптов.Постановка задачиСтандартный подход к проектированию скриптов, скажем, регистрации или обратной связи, выглядит следующим образом: имеется скрипт, и где-то в середине в него вставлена отправка письма (или писем). На первый взгляд, ничего необычного нет – посетитель заполнил форму, данные ушли на сервер, тот отправил письмо, посетителю показали результат. Однако здесь есть слабое место – время отправки письма почтовой системой. Что, если она или даже просто сам сервер будут значительно загружены? В этом случае посетитель нажмет кнопку действия, и будет долго и мучительно ждать, когда же ему отобразится хоть что-нибудь. Разумеется, такой вариант неприемлем. Более того, проблема может проявляться эпизодически (то есть, то нет), что сильно затруднит ее диагностику и исправление. Практическая частьОписанная выше проблема с отправкой писем как раз и возникла у одного из заказчиков. Условно в его системе были "клиент" (взаимодействующий с пользователями) и "сервер". Клиент делает запрос на сервер, тот отправляет нужное письмо из списка. По утверждению заказчика, сервер достаточно мощный, но почему-то скрипт на клиенте стал изредка отпадывать по тайм-ауту (5 секунд). Для поиска источника проблемы в серверный скрипт был добавлен мониторинг времени отправки, который обнаружил следующую картину (время в секундах):
Как видно, время отправки писем прыгает непредсказуемо. Причем, причина была где-то именно в почте, так как при отключении отправки писем всё работало стабильно. Для решения задачи в систему была добавлена так называемая "почтовая очередь", куда складывались необходимые уведомления. Далее они разбирались уже отдельным скриптом, который работал в фоновом режиме и никому не мешал. Вывод: отправка писем "на лету" из скрипта, конечно, допустима, но лучше отделять этот процесс (интерфейс отдельно, почта – отдельно). Иначе возможны ситуации, когда система будет долго (и, как кажется посетителю, необоснованно) "висеть" именно на отправке, а такие вещи никому не нравятся. |