Схемы балансировки нагрузки для web-серверов

автор: Александр Качанов
перевод: n|a

Web-сайты из нескольких серверов

Типичный web-сайт состоит из одного web-севрера, которые обрабатывает HTTP-запросы. Этот сервер может динамически генерировать HTML-страницы, используя ASP, или просто отдавать статические страницы. Сервер может быть также взаимодействовать с базой данных, работающей на той же самой машине, либо на соседней. Эта конфигурация представлена на следующей схеме:

По мере увеличения числа пользователей производительность сервера начнет падать. Что в таком случае делать? Как правило, сначала анализируют всю систему программного обеспечения на сервере и удаляют узкие места и упрощают алгоритмы. Web-сервер можно усилить, увеличив число процессоров, объем оперативной памяти, и установив более быстрые жесткие диски. Однако в конце концов вы достигните точки, когда в значительной улучшить работу системы уже будет не возможно. Для интернет-приложений такая ситуация может возникнуть буквально за несколько дней. Очевидным решением этой проблемы является распределение или балансировка нагрузки между несколькими web-серверами.

Даже если вы не имеете дело с большими объемами данных, существуют и другие причины, по которым конфигурации с одним сервером не надежны. Основное предположение любого IT-специалиста заключается в том, что любая машина может выйти из строя. И если этой машиной является web-сервер, в лучшем случае пользователи не смогут получить доступ к сайту. В худшем случае, они могут потерять данные прямо в процессе совершения транзакции. Для коммерческого сайта это может иметь катастрофические последствия. Представьте себе, например, web-систему торговли акциями какой-нибудь брокерской конторы. Когда web-сайт недоступен, клиенты брокерской конторы могут потерять большие деньги в ожидании, пока система опять вернется в строй.

Кроме того, не забывайте, что остановка оборудования на обслуживание является обычным делом. Систематически публикуются множество бюллетеней, требующих в целях безопасности установить на приложение "заплаты" или обновления на операционную систему или какое-либо системное приложение. Регулярно требуется менять оборудование. Если у вас только один единственный сервер, для всех этих изменений вам придется полностью отключать сервер. Либо проводить обслуживание в "тихие" нерабочие часы, чем IT-персонал будет не сильно доволен.

И наконец, вопрос тестирования. Процесс разработки Web-приложений связан практически с постоянным внесение исправлений в сайт. Очень неплохо было бы сначала выложить новый вариант на отдельный сервер и дать внутренним пользователям проверить правильность его работы на сайте. Таким образом можно предотвратить ненужные вопросы и звонки от пользователей.

На следующем рисунке представлена конфигурация web-сайта из нескольких машин.

Запросы поступают на один из нескольких серверов. Этот сервер обрабатывает запрос и, если требуется, считывает данные из базы данных, или пишет в нее. Если какой-либо из web-серверов "падает", другие web-сервера просто принимают на себя дополнительные запросы. Эта конфигурация обеспечивает распределение нагрузки (load balancing) в том смысле, что нагрузка по обработке запросов распределяется между несколькими серверами. Такая конфигурация также обеспечивает отказоустойчивость системы (fault tolerance) в том смысле, что при выходе из строя одной машины сам web-сайт не выходит из строя.

Отклоняясь от темы, обратите внимание, что у нас web-серверов больше, чем серверов базы данных. Обычно, один сервер базы данных может справиться с нагрузкой, создаваемой несколькими web-серверами. Но и этот узел можно развязать, для чего потребуется несколько распределение нагрузки между несколькими серверами базы данных. С этой целью мы конфигурируем сервера баз данных в систему избыточной надежности (redundant configuration). То есть, у нас будет дополнительная (или избыточная) машина, чьей единственной задачей будет взять на себя нагрузку в том случае, когда "упадет" основная машина. Такая система также называется "противоотказная" (fail-over), так как все операции переносятся с одной машины на другую только в случае в случае отказа первой.

1. Нет денег на Cray? А зачем?
2. Web-сайты из нескольких серверов
3. Схемы распределения нагрузки во многомашинной системе
- Круговой DNS
- Аппаратное распределение нагрузки
- Программное распределение нагрузки
- Смешанные решения
4. Пару слов о "привязке"
5. Заключение

Rambler's Top100
Rating All.BY
Akavita
Valid XHTML 1.0!