#ruby-on-rails #redis #actioncable
Вопрос:
Сегодня в нашем приложении Heroku произошел сбой, что означало, что наша компания не могла получить доступ или использовать какие-либо из наших внутренних инструментов. Это было, мягко говоря, тревожно.
После долгой отладки оказалось, что Redis разбился из-за сбоя сервера AWS в Великобритании… веселые времена. Мы используем Redis только для actioncable, поэтому казалось действительно странным, что простой сбой одного подключенного инструмента приведет к отключению всего приложения.
У кого-нибудь раньше была подобная проблема, и вы знаете, как смягчить ее в будущем?
Ответ №1:
Добро пожаловать в клуб 🙂 Существует несколько стратегий, позволяющих предотвратить подобную ситуацию в будущем:
- в общем случае вам необходимо реализовать схему прерывания цепи над вашим redis-клиентом.
Реализация зависит от архитектуры вашего приложения, и трудно сказать, используйте ли это — это будет соответствовать вашему дизайну на 100%.
В двух словах: вы описываете правила, которые контролируют, когда весь трафик в Redis вообще не выдается. Например: 10 сбоев подключения в течение 30 секунд. Когда это произойдет, трафик не будет открыт, но через некоторое время произойдет проверка, вернется Redis или нет, и как только он вернется, трафик будет отправлен в redis.
- Используйте Redis Sentinel или Redis Cluster (оба должны поддерживаться вашим клиентом redis). В этом случае у вас есть режим отработки отказа — подробнее читайте на сайте Redis.