Планирование нагрузки – задача, которую надо решать еще на этапе разработки интернет-проекта. Надо понимать, что пользователи должны получать ответы на их вопросы и реакцию на действия максимально быстро, а «падение» сервера может повлечь за собой не только моральные, но и материальные последствия. Первый этап решения проблемы с нехваткой производительности – наращивание мощности сервера и оптимизация рабочих кодов, алгоритмов. Но со временем даже эти меры могут оказаться недостаточными.
В этом случае прибегают к масштабированию: объединению нескольких серверов в один кластер. Может выполняться как вертикальное, так и горизонтальное наращивание структуры. Кластеризация обеспечивает стабильность работы оборудования при повышенных нагрузках, позволяет распределять потоки запросов на соседние серверы в случае, если один из них выйдет из строя. Эффективность работы системы зависит от того, насколько качественно реализована балансировка нагрузки. Это комплекс методов, способствующих автоматическому распределению нагрузки между компонентами, входящими в один кластер. Она может выполняться с применением как программных, так и аппаратных инструментов.
Наибольшую сложность поиск оптимального решения представляет при работах с публичными информационными системами, социальными сетями, видеохостингом, интернет-магазинами, досками объявлений. Познакомимся с технологией балансировки более подробно, определим ее цели и методы, на основании которых будет распределяться информационная нагрузка
На сегодня специалистами разработано достаточно много алгоритмов и методов балансировки нагрузки. Основная задача бизнеса – подобрать вариант, в точности советующий особенностям проекта и тем целям, которых планируется достичь.
Если говорить о целях, то наиболее часто это:
При выполнении работ следует еще четко понимать, о чем идет речь: о распределении или балансировке нагрузки. Несмотря на свою схожесть, эти понятия нельзя назвать взаимозаменяемыми. Так, распределение нагрузки предполагает ее равномерное разделение между серверами. А вот балансировка – это уже ее частный случай, учитывающий ряд факторов, подверженных изменению.
На практике широкое применение получили следующие методы распределения:
Предполагает постоянную привязку определенного пользователя к конкретному серверу. Распределение зачастую осуществляется по двум критериям:
Недостаток такого решения – даже незначительные изменения внутри информационной системы будут требовать внесения ручных корректировок.
Продолжим рассматривать предыдущие примеры. Что будет, если активность пользователей 1-1000 из списка станет в какой-то момент времени ощутимо больше, чем из группы 1001-2000? Как будет работать система, если общее число пользователей повысится? Что произойдет, если с одной географической области будет направляться гораздо больше запросов, чем с другой? Активность пользователей также может зависеть от сезона, дня недели, времени суток и других параметров.
Отреагировать автоматически на такие изменения статическое распределение не сможет. А вот псевдодинамический балансировщик нагрузки позволяет нивелировать эти моменты, распределив самостоятельно входящие запросы между серверами или рандомно, или циклически. При этом обязательно будут учитываться и производственные мощности серверов.
Организовать неравномерное и случайное распределение пользовательских запросов между разными серверами можно через DNS-сервер. Необходимо, чтобы он поддерживал имя вашего домена. В этом случае ему сообщается несколько IP-адресов, которые он и будет выдавать (рандомно или циклически). Привязки серверов по адресам в этом случае не предусмотрено.
Но у псевдодинамического метода есть и недостатки. Так, если один из серверов в процессе работы подвиснет или вообще выйдет из строя, те пользователи, которые отправлялись на него, увидят сообщение об ошибке в работе. Повторив запрос, они перейдут на работающий сервер, но подобные ошибки возникнут у других людей. Эти неисправности устраняются исключительно ручной корректировкой IP-адресов на DNS-сервере. Но такие настройки повысят нагрузку на него.
Псевдодинамическое распределение не позволяет неравномерно разделять нагрузку между прикладными серверами. И это еще один из недостатков такого решения.
Балансировщик нагрузки серверов динамического типа основан на специальном аппаратном или программном обеспечении. В работе он отличается повышенной гибкостью, применяет те алгоритмы распределения, которые будут наиболее эффективными в определенном случае. Они автоматически определяют текущую нагрузку на каждый из серверов и сторонние факторы, оказывающие влияние на стабильность обработки пользовательских запросов.
Вариант программных балансировщиков – прокси серверы. Они мгновенно «оценивают» текущее состояние и перенаправляют пользователей к тому узлу, который сможет их обслужить в данный момент времени.
Наряду с методами балансировки, существует и такое понятие, как уровни балансировки. Этот параметр определяет соответствие выбранных алгоритмов работы уровням OSI-модели, в частности:
В случае, когда за один IP-адрес будут отвечать разные серверы говорят о выполнении сетевой балансировки. Достичь такого результата можно следующими способами:
В реализации это самый простой вариант. Здесь пользователь обращается не к определенному серверу, а к самому балансировщику, а он уже перенаправляет его к конкретной машине для обработки. Балансировщик может подбирать рабочий узел по уровню загрузки, путем перебора по кругу и пр. На сетевом уровне такие задачи решались прокси-сервером. Именно он определял, куда передавать запросы, а вот их обработка была уже обязанностью сервера.
Здесь же функционал прокси взял на себя балансировщик. На нем полностью замыкается общение с клиентом. Дальше он уже от своего имени взаимодействует с серверами, переадресует им информацию о пользователе, заголовках и пр.
В данном случае балансировщик также работает как прокси-сервер, но только «умный». Он воспринимает запросы, поступающие от пользователей, анализирует их и перенаправляет на те серверы, которые смогут дать исчерпывающий ответ. То есть здесь уже оценивается характер контента, который нужен клиенту. Яркий пример такого балансировщика – веб-сервер Nginx. В нем предусмотрен модуль Upstream, который и распределяет запросы между фронтендом и бэкендом.
На балансировщике такого типа работает и pgpool. Это своего рода промежуточное звено между клиентом и сервером. Он способен передавать к одной машине запросы на чтение, к другой – на запись.
Наряду с высокой адаптивной производительностью, повышенной стабильностью работы (минимальной отказоустойчивостью), высоким уровнем ремонтопригодности, распределенные системы имеют и ряд недостатков. К наиболее весомым из них относят:
Преимущества, которые гарантирует распределенная система куда более весомые, чем сложности, с которыми можно столкнуться в процессе балансировки нагрузки. Их производительность можно наращивать практически до бесконечности, сохраняя при этом высокую надежность, стабильность работы, ремонтопригодность. А проблемы можно минимизировать, а в ряде случаев и полностью исключить профессионально выполненными работами.
Если ищите отличный и долговечный результат в балансировке нагрузки, общайтесь за услугами к специалистам компании «Xelent». Уже сегодня вы можете получить компетентные консультации по телефону или через форму обратной связи.