LINUX.ORG.RU

Как вы добиваетесь отказоустойчивости ваших приложений


0

2

Вам нужно что бы ваш сервер, маленький прокси или echo сервер работал всегда. Вы разработчик этого софта. Что вы предпримите.

Я не придумал ничего лучше чем:

1. Мой софт при запуске создает PID файл (для контроля повторного запуска и останова).

2. Я сделал скрипт который проверяет по этому PID файлу работает ли приложение. Если нет запускает его. (проверка по связке PID + имя процесса)

3. Повесил этот скрипт в крон с минутным интервалом.

Вроде бы рабочая конструкция получилась. Но что то не дает мне покоя. Не уж то и друге так делают. А если нет, то как ?


Ответ на: комментарий от Ubuntu1210

Да, протянет некоторое время, но не факт, что его хватит. Тут скорее вопрос насколько важна постоянная работа приложения. Прокси-сервер не выглядит, как критически важное приложение. Для таких хостинг в дата-центрах, желательно в разных концах света, чтобы одним землетрясением не накрыло + лоад-балансер, это разумеется, в придачу к автоматическому перезапуску при падении. Хотя поллинг в 1 минуту подсказывает мне, что не так важна работоспособность этого сервера, что бы делать какие-то допольнительные телодвижения.

Dantix ★★
()

Вам нужно что бы ваш сервер, маленький прокси или echo сервер работал всегда. Вы разработчик этого софта. Что вы предпримите.

1. поставить два(три и более) сервера

2. курить маны про балансировку нагрузки и репликацию.

Повесил этот скрипт в крон с минутным интервалом.

а для таких как ты придумали systemd.

Не уж то и друге так делают. А если нет, то как ?

раньше такие костыли делали, сейчас есть мегакостыль systemd для этой цели.

drBatty ★★
()

Да, это один из возможных подходов, всё правильно делаешь.

Reset ★★★★★
()
Ответ на: комментарий от drBatty

1. поставить два(три и более) сервера

Если в проге есть бага, которая приводит к сегфолту, то три сервера не помогут. Она на всех трех засегфолтится и всё встанет колом. 3 сервера конечно хорошо, но watchdog всё равно нужен.

Reset ★★★★★
()
Ответ на: комментарий от Reset

Если в проге есть бага, которая приводит к сегфолту, то три сервера не помогут. Она на всех трех засегфолтится и всё встанет колом. 3 сервера конечно хорошо, но watchdog всё равно нужен.

если в программе есть бага, то надо искать эту багу, а не костылять watchdog'и.

drBatty ★★
()

Многое зависит от того, какой степени надежности хотелось бы добиться. Вариант с PID используется, но где гарантия, что ваше серверное приложение просто не зависнет?

Еще можно само серверное приложение научить оповещать других о том, что оно в рабочем состоянии. А дальше собственная фантазия: SNMP на специальную внешнюю аппаратуру, которое уже оповестит персонал в случае возникновения проблемы; дублирующий сервер (даже, возможно, на физически другой машине) по принципу master-slave, ожидающий того, что не придет сигнал alive по внутреннему своему протоколу (тут много тонкостей); скрипт-прибивалка-запускалка, ожидающий такого же события и т.д.

Вообще, тема непростая. Я был сопричастным когда-то, но в детали особо никогда не вдавался, поскольку было неинтересно.

dave ★★★★★
()
Ответ на: комментарий от drBatty

если в программе есть бага, то надо искать эту багу, а не костылять watchdog'и.

Багу можно искать вечно, особенно если она в 3rdparty. Например, я уже больше года бьюсь с разрабами libevent'а по поводу bufferevent_openssl, а воз и ныне там. Спасает только watchdog.

Reset ★★★★★
()
Ответ на: комментарий от Dantix

Да, протянет некоторое время, но не факт, что его хватит.

Его хватит чтоб корректно завершить работу приложений и сделать шатдаун. Больше от него ничего и не надо. Если даже в часы X нужна работа серверов man дизельный генератор, дизельные подстанции

comp00 ★★★★
()

Тред с громким названием ( я прям даже расстроился, что никак не добиваюсь) и с тупняком в сабже ( я реабилитировался).

comp00 ★★★★
()

Как вы добиваетесь отказоустойчивости ваших приложений?

Мы просто сразу пишем их без ошибок же!!!!1111

AIv ★★★★★
()

Пара процессов, родитель форкуется и следит за потомком - если тот завершился по сигналу или с ненулевым кодом, то перезапукает его.

tailgunner ★★★★★
()
Ответ на: комментарий от Reset

Багу можно искать вечно, особенно если она в 3rdparty.

ТС ясно сказал:

Мой софт

Например, я уже больше года бьюсь с разрабами libevent'а по поводу bufferevent_openssl, а воз и ныне там. Спасает только watchdog.

согласись - что-то тебя там держит, ибо ты давно-бы уже на них махнул рукой?

drBatty ★★
()
Ответ на: комментарий от drBatty

согласись - что-то тебя там держит, ибо ты давно-бы уже на них махнул рукой?

Держит. Проблемный софт работает на ~1500 серверов из них ~60 с включенным openssl. На этих ~60 он сегфолтится из-за libevent'а раз в неделю в среднем. У меня уже готов рабочий boost::asio backend, который работает стабильно и в случае использования ssl, но это слишком глобальное изменение, как мне кажется, в данном случае использование watchdog'а является меньшим из зол.

Reset ★★★★★
()
Ответ на: комментарий от drBatty

что там с libevent ты разобрался? Может патч напишем?

Я несколько дней потратил только на написание минимального примера с проблемой. Там очень сложный баг, в момент падения стек испорчен, отлаживаться надо с debug логгированием. Дорого получается.

В общем суть там в том, что когда evhttp ходит через https и вдруг начинают возникать таймауты, то в некоторых (!) случаях происходит обращение по левому (удаленному?) указателю и сегфолт.

Reset ★★★★★
()
Последнее исправление: Reset (всего исправлений: 2)
Ответ на: комментарий от Reset

Я несколько дней потратил только на написание минимального примера с проблемой. Там очень сложный баг, в момент падения стек испорчен, отлаживаться надо с debug логгированием. Дорого получается.

ИМХО watchdog'и костылять ещё дороже. Но тебе конечно виднее, ибо я такого случая не наблюдал. Может в этом и проблема? Баг проявляется в каком-то очень специфичном юзкейсе?

drBatty ★★
()

если приложение корректное, оно не отказывает

КО

Harald ★★★★★
()

Повесил этот скрипт в крон с минутным интервалом.

Выше уже писали что реинкарнационный демон тебе не поможет если критические баги в программе и ее окружении. Поэтому - системы мониторинга, автономный режим (если это возможно) отдельных подсистем, внятная система логгирования и обработки ошибок, разумная модульность, возможность собрать образ системы в момент ее краха - чтобы перезапустить-откатить упавшие процессы.

outtaspace ★★★
()

Сервис не должен падать. Никогда.

Перехватывай все сигналы, обрабатывай исключения. Сделай «безопасный» конфиг - в смысле, если исключения, то значения по-умолчанию.

Профилирование, работа под невозможной нагрузкой.

anonymous
()

Шардинг, распараллеливание, безопасные секции/мютексы, репликация, резервирование, логирование и мониторинг, перехват и обработка исключений. ИТД...

ChAnton ★★
()
Ответ на: комментарий от tailgunner

Пара процессов, родитель форкуется и следит за потомком - если тот завершился по сигналу или с ненулевым кодом, то перезапукает его.

Молодец! Вы открыли метод циклического нуля!

anonymous
()
Ответ на: комментарий от anonymous

Не-не. Как известно, программирование является процессом внесения ошибок в программу. Поэтому единственный Ъ путь - писать программу сразу без ошибок и больше ее не трогать.

AIv ★★★★★
()
Ответ на: комментарий от anonymous

А на что конкретно обратить там внимание? Я в принципе не знаком с этой OS.

Cupper
() автор топика
Ответ на: комментарий от anonymous

Не знал что initd и systemd умеют (в том числе нужны для) мониторить рабоспособность процесса.

Варианты типа monit и runit отпали само собой так как на нашей старенькой CentOS их просто нету в репах. Тащить их из вне, никто не будет так как наших стареньких центосов целый зоопарк. И как всегда надо быстро, очень быстро, но что бы работало всегда.

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

Cupper
() автор топика

Думаю в тред ответили нормально, но не называй это отказоустойчивостью

vertexua ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.