Отказоустойчивость веб-сервисов [сообщение #1086] |
Чтв, 22 Апрель 2010 18:37 |
exist
Сообщений: 226 Зарегистрирован: Март 2005
|
Senior Member |
|
|
Мне интересно ваше мнение, как добиться отказоустойчивости веб-сервисов.
Понятно из чего состоит стандартный веб-сервис - это:
- Веб-сервер
- База данных
- ДНС
- Контент
Самая простая мысль повышения отказоустойчивости - это дублирование сервиса по распределенным серверам. Но как добиться этого - на мой взгляд нетривиальный вопрос.
Какие будут еще мысли?
[Обновления: Птн, 03 Июнь 2011 23:38] Известить модератора
|
|
|
Re: Отказоустойчивость [сообщение #1088 является ответом на сообщение #1086] |
Чтв, 22 Апрель 2010 21:44 |
sergey
Сообщений: 35 Зарегистрирован: Январь 2008 Географическое положение: moscow
|
Member |
|
|
Универсальных решений не существует, поэтому если веб-сервис не умеет работать в кластере, то будут проблемы, которые нужно решать в каждом случае по разному.
Ну например, для сайтов на mysql+php нужно будет обеспечить репликацию как БД mysql, так и файлов (тот самый контент, а также, например, сессионные файлы). Если первое более-менее надежно может быть сделано встроенными средствами, то со вторым придется городить костыли: SAN, решения типа drbd или простой rsync. Соответственно, отказоустойчивость будет довольно относительная - если основная нода упадет, то сервис будет поднят на резервной ноде.
Соответственно, для того, чтобы сделать отказоустойчивый веб-сервис, нужно очень хорошо понимать, как он внутри устроен.
|
|
|
|
Re: Отказоустойчивость [сообщение #1095 является ответом на сообщение #1092] |
Вск, 25 Апрель 2010 15:42 |
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: Отказоустойчивость [сообщение #1097 является ответом на сообщение #1096] |
Втр, 27 Апрель 2010 12:42 |
sergey
Сообщений: 35 Зарегистрирован: Январь 2008 Географическое положение: moscow
|
Member |
|
|
виртуалки для этого давно используются, но тут надо понимать, во что это выльется. во-первых, это будет все равно холодный резерв, во-вторых, данные нужно либо держать на распределенном (трафик, задержки), либо на общем хранилище (должно быть рядом, нужно следить за эксклюзивностью доступа).
в общем, это решение для проекта мощностью более одного сервера.
PS. да, живая миграция между железными нодами в основных системах виртуализации есть, но опять же - расстояние и трафик!
|
|
|
|
|