Форум компании ITRM
Информационные технологии

Начало » Отказоустойчивые системы и резервное копирование » Отказоустойчивые системы » Отказоустойчивость веб-сервисов (Отказоустойчивость веб-сервисов)
Отказоустойчивость веб-сервисов [сообщение #1086] Чтв, 22 Апрель 2010 18:37 Переход к следующему сообщения
exist в настоящее время не в онлайне  exist
Сообщений: 226
Зарегистрирован: Март 2005
Senior Member
Мне интересно ваше мнение, как добиться отказоустойчивости веб-сервисов.

Понятно из чего состоит стандартный веб-сервис - это:
- Веб-сервер
- База данных
- ДНС
- Контент

Самая простая мысль повышения отказоустойчивости - это дублирование сервиса по распределенным серверам. Но как добиться этого - на мой взгляд нетривиальный вопрос.

Какие будут еще мысли? Smile

[Обновления: Птн, 03 Июнь 2011 23:38]

Известить модератора

Re: Отказоустойчивость [сообщение #1088 является ответом на сообщение #1086] Чтв, 22 Апрель 2010 21:44 Переход к предыдущему сообщенияПереход к следующему сообщения
sergey в настоящее время не в онлайне  sergey
Сообщений: 35
Зарегистрирован: Январь 2008
Географическое положение: moscow
Member

Универсальных решений не существует, поэтому если веб-сервис не умеет работать в кластере, то будут проблемы, которые нужно решать в каждом случае по разному.

Ну например, для сайтов на mysql+php нужно будет обеспечить репликацию как БД mysql, так и файлов (тот самый контент, а также, например, сессионные файлы). Если первое более-менее надежно может быть сделано встроенными средствами, то со вторым придется городить костыли: SAN, решения типа drbd или простой rsync. Соответственно, отказоустойчивость будет довольно относительная - если основная нода упадет, то сервис будет поднят на резервной ноде.

Соответственно, для того, чтобы сделать отказоустойчивый веб-сервис, нужно очень хорошо понимать, как он внутри устроен.
Re: Отказоустойчивость [сообщение #1092 является ответом на сообщение #1086] Сбт, 24 Апрель 2010 20:56 Переход к предыдущему сообщенияПереход к следующему сообщения
exist в настоящее время не в онлайне  exist
Сообщений: 226
Зарегистрирован: Март 2005
Senior Member
Репликация базы - согласен, rsync для остального контента, как быть с ДНС?

Проблема в том, что если сервера расположены в различных сетях, то надо выдать как можно быстрее информацию корневым ДНС-серверам о смене А-записи, в случае возникновения проблем на одном из серверов. А корневые бывают порой довольно неторопливы. Может быть выход в максимальном уменьшении TTL для А-записей?

А какое мнение по поводу использования nginx для решения этой проблемы?
Re: Отказоустойчивость [сообщение #1095 является ответом на сообщение #1092] Вск, 25 Апрель 2010 15:42 Переход к предыдущему сообщенияПереход к следующему сообщения
sergey в настоящее время не в онлайне  sergey
Сообщений: 35
Зарегистрирован: Январь 2008
Географическое положение: moscow
Member

ну, географически распределенный кластер - это отдельная песня. если позволяет бюджет, то на каждом сайте нужно делать свой кластер, либо ставить фронтэнд-прокси, который будет быстрее реагировать на отказ бэкендов и проксировать запросы на живой сайт пока не обновятся DNS.

т.о. схема может быть такой:
site1
-----
proxyA + proxyB -> backend1..N

site2
-----
proxyA + proxyB -> backend1..N

прокси дублируют друг друга и могут перехватить разделяемые ip-адреса при выпадении соседа (например, с помощью heartbeat). если отваливаются backend'ы (которых, по идее, должно быть несколько), то запросы можно отправлять на второй сайт. DNS отдает А-записи на оба сайта (в засимости от задачи, можно по разному отдавать), если сайт ушел в даун, то отдаем записи живого. это - общее решение, в зависимости от задач и средств можно варьировать состав схемы.

что касается корневых DNS, то ты что-то путаешь - корневые сервера держат лишь NS-записи top-level доменов. поэтому проблемы с медленными DNS находятся в доступной зоне ответственности - сколько нужно, столько в TTL и прописывается.
Re: Отказоустойчивость [сообщение #1096 является ответом на сообщение #1086] Пнд, 26 Апрель 2010 20:53 Переход к предыдущему сообщенияПереход к следующему сообщения
exist в настоящее время не в онлайне  exist
Сообщений: 226
Зарегистрирован: Март 2005
Senior Member
Есть смысл в эту схему добавить идею с использованием виртуальных машин, которые могли бы перемещаться с сервера на сервер в поисках лучшей.. то есть меньшей нагрузки? Smile
Re: Отказоустойчивость [сообщение #1097 является ответом на сообщение #1096] Втр, 27 Апрель 2010 12:42 Переход к предыдущему сообщенияПереход к следующему сообщения
sergey в настоящее время не в онлайне  sergey
Сообщений: 35
Зарегистрирован: Январь 2008
Географическое положение: moscow
Member

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

PS. да, живая миграция между железными нодами в основных системах виртуализации есть, но опять же - расстояние и трафик!
Re: Отказоустойчивость [сообщение #1099 является ответом на сообщение #1086] Втр, 27 Апрель 2010 19:31 Переход к предыдущему сообщенияПереход к следующему сообщения
exist в настоящее время не в онлайне  exist
Сообщений: 226
Зарегистрирован: Март 2005
Senior Member
Что скажете по поводу схемы во вложении?
Re: Отказоустойчивость [сообщение #1100 является ответом на сообщение #1099] Срд, 28 Апрель 2010 09:50 Переход к предыдущему сообщения
sergey в настоящее время не в онлайне  sergey
Сообщений: 35
Зарегистрирован: Январь 2008
Географическое положение: moscow
Member

распространенная архитектура
Следующая тема: Обеспечение отказоустойчивости веб-сайта с использованием сервера горячего резерва
Переход к форуму: