Постоянно приходится писать сервисы / утилиты, которые должны работать максимально долго и стабильно. Написать с первого раза стабильное и отказоустойчивое приложение никогда не получалось. Всегда найдется "узел" в программе, который при определённых условиях может упасть, когда абсолютно уверен, что "тут упасть не может".
Таких "узлов" может быть множество: соединение с базой данных (она вдруг может быть не доступна, причем на несколько минут и именно в момент работы вашего сервиса), вызов удаленного сервиса в сети (отключение удаленного сервера / компьютера, на котором располагаются необходимые данные), отправка данных в интернете (в условиях, когда интернета нет или сайт не отвечает) и т.д.
Разрабатывать, приговаривая, что это "проблема сети", "проблема сервера", "проблема компании" не правильно, ибо заказчик будет говорить о том, что именно "твой сервис не работает", а на причины ему плевать.
Поэтому в своих сервисах я применяю комбинацию двух подходов:
1. Каждый потенциально опасный узел, я оборачиваю примерно следующим образом:
2. Если все-таки приложение завершает свою работу, исчерпав количество попыток получить данных, то на каждый сервис я делаю авторестарт через 10 минут, после падения.
Эти действия позволяют поддерживать работоспособность сервиса, даже если "все совсем плохо".
P.S. А как вы боретесь за отказоустойчивость?
apatheticYou are viewing
yelenakazakova's journal