Безопасно ли использовать redis для долгоживущих задач в Rails через resque?
Насколько безопасно использовать Resque для долгосрочных задач в Rails (например: Resque.enqueue_in(7.days, JobClass)
) с драгоценными камнями resque и resque-scheduler? Приятно отметить, что этот экземпляр работает на Heroku. Какова вероятность потери очереди?
1 ответ
Полу Стойкость
Согласно моим комментариям, недостатком использования Redis (который использует Resque) является вероятность простоя.
В качестве "оперативной памяти" веб-приложений Redis хранит полупостоянные данные. В основном это означает, что он сохраняет ваши данные только во время работы. Любое время простоя приведет к потере вашей очереди.
Это суть вашего вопроса -
Вы можете позволить себе потерять свою очередь?
Ответ только один, на который вы можете ответить.
Есть, однако, ряд факторов, которые я бы рассмотрел:
* Redis не полная база данных... это JSON
key:value
магазин пар.Короче говоря, это следует использовать только для того, чтобы дать вам простой механизм использования фрагментов данных в определенное время. В качестве примера мы используем Redis для хранения идентификаторов пользователей в одной из наших систем.
Это означает, что если вы храните больше данных внутри Redis, чем простые идентификаторы или другие базовые данные, используете ли вы их правильно?
Насколько важна ваша очередь?
Как и в любом приложении, вы хотите сохранить как можно больше пользовательских данных.
Разница, однако, в том, насколько важна очередь для вашей системы.
Я привел пример системы бронирования отелей. Возможно, у вас есть "приветственные" электронные письма, которые вам нужно отправить, "электронные письма с указаниями", чтобы помочь гостям найти отель и т. Д. Являются ли эти "критически важными"?
Я разработал систему электронного маркетинга раньше. Система очередей для этого была обширной; но важна была не "очередь", а все связанные с ней данные.
Таким образом, мы сохранили наши данные в базе данных и использовали Redis только для хранения чистой очереди того, что и когда будет отправлено. Затем мы запускали несколько скриптов каждую минуту (я забыл подробности), которые проходили через очередь Redis.
Суть в том, что я настоятельно рекомендую хранить соответствующие данные в таблице, а затем обрабатывать запросы только по мере необходимости.
Основой очереди является то, что вы должны иметь возможность восстановить ее, если она выйдет из строя. Если вы храните свои значения только в Redis, это станет серьезным препятствием.
Попадание в БД стоит тех данных, которые вы получите в долгосрочной перспективе.