Пока у тебя три юзера и один пост в неделю, можно не париться. Один нажал кнопку — получил ответ. Всё молниеносно. А теперь представь, что у тебя тысяча человек одновременно жмут «Опубликовать». И каждый из них хочет, чтобы:
- пост сохранился,
- показался на странице,
- ушёл в рассылку,
- обновил статистику,
- засветился в топе дня,
- и ещё, чтоб бот в Telegram пикнул.
Ты это всё в лоб хочешь обработать? Ну удачи. Продержишься секунд 30. Потом начнётся веселуха: подвисания, таймауты, юзеры с глазами на лбу.
Действия нужно откладывать
Большинство задач, которые ты запускаешь "в ответ" на клик — не срочные. Пост показал — окей. А уведомление подписчикам можно отправить через 5 минут. Или через 15. Им не убудет, а тебе — минус десятки запросов в секунду прямо сейчас.
То же самое со статистикой: хочешь считать просмотры на лету? Или всё же скинешь в буфер и посчитаешь через час, когда трафик просядет? Очевидно же.
Очереди — твой спасательный круг
Вот тут и приходит магия очередей. Нет, не та, где люди в МФЦ умирают от скуки. А та, где задачи выстраиваются в стройную колонну и исполняются по очереди. Кто первый пришёл — тот и пошёл.
Ты ставишь в очередь задачу на рассылку — и она летит по подписчикам, поштучно. Никто не орёт, сервер жив, юзер доволен.
Почтовая рассылка — классика жанра
Если ты отправляешь письма сразу, при каждом событии — ты уже проиграл. Ставь в очередь, обрабатывай партиями. Даже тупой cron, который тянет задачи из очереди раз в минуту — уже спасает тебе задницу.
А если всё построено правильно — можно масштабировать воркеры, жонглировать приоритетами, делать отложенные задачи, хоть через сутки. Красота.
Отложенные задачи — не только для фич
Очереди нужны не только для того, чтобы отправить письма. Бэкапы? В очередь. Индексация? Туда же. Оптимизация, переиндексация, сбор мусора — всё это должно делаться не сейчас, а потом, когда тебе удобно.
Вывод
Если ты до сих пор всё делаешь сразу — ты живёшь на пороховой бочке. Очереди — не прихоть, а базовая техника выживания, если твой сервис растёт. Хочешь, чтобы всё работало быстро? Научись говорить "потом". Особенно серверу.
0 комментариев