Реклама

Кэш не работал восемь недель. Всё это время он честно писал об этом в лог

#Redis #None #AttributeError #ERROR #Разбираю

Redis у сервиса прогнозов не было восемь недель: контейнер упал с кодом 255 и больше не поднялся. Всё это время каждый запрос считался заново, 1,9 секунды вместо 11 миллисекунд. При этом авария не была тихой. В обработчике ошибки стоит self.redis_client = None с комментарием про заглушку, но заглушки там нет, поэтому каждый вызов get и set падал с AttributeError, ловился своим же except и писал ERROR в лог. Две строки на каждый запрос, восемь недель подряд. Разбираю, почему я этого не видел, почему health сервиса всё это время отдавал вписанное в код «ok» с таймстампом из мая 2025 года, и чем аккуратно обработанный отказ отличается от обычной поломки. Читать далее

16 сентября я полез в сервис прогнозов разбираться с другой задачей и заметил, что эндпоинт загруженности отвечает подозрительно долго. Он должен отдавать готовый ответ из Redis. Отдавал он его за две секунды.

Выяснилось, что Redis у этого сервиса не было восемь недель. Свой контейнер (container_name: redis, порт 6381) завершился с кодом 255 и больше не поднимался. Имя redis в докеровской сети перестало резолвиться, подключение при старте падало, и все восемь недель каждый запрос считался от начала.

Это скучная часть. Интересная дальше.

Код был к этому готов