Типичный 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), так как все операции
переносятся с одной машины на другую только в случае в случае отказа первой.
|