Легко подумать, что обслуживание большой аудитории требует серверной комнаты размером со склад. Однако это не всегда так. Если ваш сайт статичен, небольшая машина может обслуживать сотни тысяч посетителей. Представьте себе простой 500 МГц Celeron, работающий под управлением Linux и Apache. Подключение к линии T3 (45 миллионов бит в секунду). Эта конфигурация способна обрабатывать очень большие объемы трафика. Провайтеры арендуют весь этот комплекс менее чем за 1000 долларов в месяц.
Но вот в чем проблема. Самые популярные сайты не являются маленькими. Они быстро упираются в ограничения. Одна машина не может масштабироваться бесконечно.
«Если вам приходится иметь дело с миллионами посетителей и динамическим контентом, ваша машина выйдет из строя».
Ограничения проявляются при достижении определенного порога. Во-первых, вам может потребоваться поддерживать миллионы посетителей ежедневно. У одного процессора есть свои ограничения. Во-вторых, это аппаратные сбои. Если один из ваших серверов выходит из строя, ваш сайт становится недоступным, пока вы не замените его новым и не настроите заново. В-третьих, большие или сложные страницы быстро расходуют ресурсы. В-четвертых, если страница должна динамически изменяться для каждого пользователя, серверу приходится работать интенсивнее. Наконец, фоновая обработка добавляет задержку. Большинство крупных сайтов соответствуют всем этим критериям и поэтому требуют обширной инфраструктуры.
Три самые важные стратегии масштабирования
Если бюджет позволяет, инженеры могут выбрать три основных пути во время пиковых нагрузок.
- Купить огромную машину с неограниченной мощностью и избыточностью.
- Разделить нагрузку между многими меньшими машинами.
- Комбинировать оба метода.
Распределенный подход наиболее распространен в крупных веб-приложениях. Вы, возможно, даже видели это в действии, не осознавая этого. Если URL-адрес немного меняется каждый раз, когда вы посещаете и обновляете веб-сайт (например, www1.xyz.com и www2.xyz.com ), это является подсказкой. Этот сайт использует серию независимых компьютеров. Все они используют программное обеспечение веб-сервера. Все они используют одну и ту же копию веб-страницы.
Настоящая магия заключается в том, как распределяются входящие запросы. Это может происходить двумя основными способами.
Балансировка нагрузки на основе DNS
Система доменных имен (DNS) переводит имена, удобные для чтения человеком, в IP-адреса. Некоторые конфигурации DNS используют подход круговой очереди (round-robin). DNS-серверы циклически перебирают список доступных IP-адресов каждый раз, когда поступает запрос.
Это естественным образом распределяет нагрузку. Каждый сервер получает часть трафика. Они не общаются друг с другом о нагрузке. Они предоставляют только статический или предварительно сгенерированный контент, к которому имеют доступ.
Коммутатор балансировки нагрузки
Более продвинутый подход включает использование балансировщика нагрузки. Весь сетевой трафик сначала достигает центрального коммутатора. Эта машина действует как регулировщик движения. Перенаправляет запрос на доступный сервер.
Коммутатор не просто гадает. Он проверяет каждый сервер, чтобы определить, какой из них наименее загружен. Это гарантирует равномерное распределение работы. Компания HowStuffWorks применила этот подход. Балансировщик нагрузки компании распределяет трафик между тремя различными веб-серверами. Если один из них выходит из строя, два других поддерживают работу сайта. Без простоев для пользователя.
Эта избыточная конфигурация имеет очевидные преимущества. Выход из строя одной машины не приводит к сбою всего сайта. Вы также можете увеличивать емкость поэтапно. Нужна большая мощность? Добавьте еще одну машину. Это гибко.
Есть один недостаток. Эти распределенные машины по-прежнему часто полагаются на централизованные базы данных для обработки транзакций. По мере роста трафика эта база данных становится узким местом.
Одна огромная машина
Не все распределяют нагрузку. TerraServer от Microsoft выбирает путь «одной большой машины».
TerraServer хранит терабайты спутниковых изображений. Он обрабатывает миллионы запросов на эти данные. Он использует мощное корпоративное оборудование. Возьмем, к примеру, Digital AlphaServer 8400. Он имеет восемь 64-битных процессоров с частотой 440 МГц. Содержит 10 ГБ оперативной памяти с проверкой и исправлением ошибок.
Это огромная мощность в одном корпусе. Это избегает сложности координации сети между несколькими серверами. Но это дорого. Если один AlphaServer выходит из строя, сервис останавливается.
Выбор зависит от вашей бизнес-модели. Статический контент благоприятствует простым настройкам. Динамические транзакции требуют избыточности. Приложения, интенсивно использующие данные, могут требовать сырой вычислительной мощности.
Если вы хотите узнать больше, существует множество ресурсов. W3C устанавливает стандарты. Microsoft опубликовала технический документ о балансировке нагрузки в Windows NT. IBM предоставляет «красную книгу» (red book) о балансировке серверов. Статья о распределенных коллаборативных веб-серверах описывает эту теорию.
Но основная реальность остается простой. Трафик масштабируется. Аппаратные ресурсы ограничены. Инженеры строят мост между этими двумя факторами. То, как вы его строите, зависит от того, для чего на самом деле будет использоваться ваш веб-сайт.
