Редис спустился и забрал с собой наше приложение. Как смягчить это в будущем?

#ruby-on-rails #redis #actioncable

Вопрос:

Сегодня в нашем приложении Heroku произошел сбой, что означало, что наша компания не могла получить доступ или использовать какие-либо из наших внутренних инструментов. Это было, мягко говоря, тревожно.

После долгой отладки оказалось, что Redis разбился из-за сбоя сервера AWS в Великобритании… веселые времена. Мы используем Redis только для actioncable, поэтому казалось действительно странным, что простой сбой одного подключенного инструмента приведет к отключению всего приложения.

У кого-нибудь раньше была подобная проблема, и вы знаете, как смягчить ее в будущем?

Ответ №1:

Добро пожаловать в клуб 🙂 Существует несколько стратегий, позволяющих предотвратить подобную ситуацию в будущем:

  1. в общем случае вам необходимо реализовать схему прерывания цепи над вашим redis-клиентом.

Реализация зависит от архитектуры вашего приложения, и трудно сказать, используйте ли это — это будет соответствовать вашему дизайну на 100%.

В двух словах: вы описываете правила, которые контролируют, когда весь трафик в Redis вообще не выдается. Например: 10 сбоев подключения в течение 30 секунд. Когда это произойдет, трафик не будет открыт, но через некоторое время произойдет проверка, вернется Redis или нет, и как только он вернется, трафик будет отправлен в redis.

  1. Используйте Redis Sentinel или Redis Cluster (оба должны поддерживаться вашим клиентом redis). В этом случае у вас есть режим отработки отказа — подробнее читайте на сайте Redis.