У меня есть веб-сайт, который ежедневно рассылает напоминания своим пользователям в зависимости от их часового пояса и настроек часов. Например: пользователь в Нью-Йорке (Америка / Нью-Йорк) предпочитает получать напоминание в 21:00. в моей текущей реализации (после многих изменений) я храню часовой пояс и notify_hour в таблице настроек и нахожу пользователей со сложным и сложным запросом MySQL.
Запрос был слишком медленным, я добавил индексы, и это сделало его быстрее. После того, как я нахожу пользователей, я пытаюсь отправить электронные письма через внешний SMTP-сервер (sendgrid.com). Я настроил запуск задания cron каждые 10 минут и проверил наличие 200 пользователей. У меня около 2000 активных пользователей. Это работает нормально, как это. Большинство моих пользователей находятся в Иране (Азия / Тегеран), и большинство из них выбрали 9 вечера, чтобы получать напоминания. поэтому час пик между 8 вечера и 11 вечера IRST.
Но администратор сервера говорит, что моя работа cron использует слишком много CPU. около 25%, что является высоким.
Я попытался отладить мой скрипт, они сами быстро запрашивают, но когда дело доходит до отправки электронной почты через SMTP-сервер, это занимает больше времени:
Email Reminder has been sent to 4 People - Query: 0.75444 Seconds
---- System: 11.18443 Seconds. ----
Email Reminder has been sent to 0 People - Query: 0.65488 Seconds
---- System: 0.68821 Seconds. ----
Email Reminder has been sent to 5 People - Query: 0.75551 Seconds
---- System: 3.45176 Seconds. ----
Email Reminder has been sent to 1 People - Query: 2.37117 Seconds
---- System: 9.05586 Seconds. ----
первое число - это длительность запроса, а второе - время загрузки всей системы.
это скрипт, который я использую для задания cron: http://pastebin.com/Eee3Lzys
Класс mailer подключается к серверу smtp при создании и отправляет электронное письмо на каждой итерации скрипта. (простите за мой английский!)
Можете ли вы предложить лучший способ достижения цели или минимизации использования процессора или что-то еще?
Спасибо.