Компоненты систем
Балансировка нагрузки
Балансировка нагрузки позволяет нам распределять входящий сетевой трафик между несколькими ресурсами, обеспечивая высокую доступность и надежность, отправляя запросы только к ресурсам, которые находятся в сети. Это обеспечивает гибкость добавления или изъятия ресурсов в соответствии с требованиями.
Для дополнительной масштабируемости и избыточности мы можем попытаться сбалансировать нагрузку на каждом уровне нашей системы.
Зачем это нужно?
Современные веб-сайты с высокой посещаемостью должны обслуживать сотни тысяч, если не миллионы одновременных запросов от пользователей или клиентов. Для рентабельного масштабирования для соответствия этим большим объемам передовой опыт современных вычислений обычно требует добавления дополнительных серверов.
Балансировщик нагрузки может располагаться перед серверами и направлять запросы клиентов на все серверы, способные выполнять эти запросы, таким образом, чтобы максимизировать скорость и использование емкости. Это гарантирует, что ни один сервер не будет перегружен, что может привести к снижению производительности. Если один сервер выходит из строя, балансировщик нагрузки перенаправляет трафик на оставшиеся онлайн-серверы. Когда в группу серверов добавляется новый сервер, балансировщик нагрузки автоматически начинает отправлять ему запросы.
Распределение нагрузки
Это основная функциональность, предоставляемая балансировщиком нагрузки, и она имеет несколько распространенных вариантов:
- На основе хоста: распределяет запросы на основе запрошенного имени хоста.
- На основе пути: использование всего URL-адреса для распределения запросов, а не только имени хоста.
- На основе содержимого: проверяет содержимое сообщения запроса. Это позволяет распространять на основе содержимого, такого как значение параметра.
Слои
Вообще говоря, балансировщики нагрузки работают на одном из двух уровней:
- Сетевой уровень: Это балансировщик нагрузки, который работает на транспортном уровне сети, также известном как уровень 4. Он выполняет маршрутизацию на основе сетевой информации, такой как IP-адреса, и не может выполнять маршрутизацию на основе содержимого. Часто это специализированные аппаратные устройства, которые могут работать на высокой скорости.
- Прикладной уровень: Это балансировщик нагрузки, который работает на уровне приложений, также известном как уровень 7. Балансировщики нагрузки могут полностью считывать запросы и выполнять маршрутизацию на основе содержимого. Это позволяет управлять нагрузкой на основе полного понимания трафика.
Типы
Давайте рассмотрим различные типы балансировщиков нагрузки:
Программное обеспечение
Программные балансировщики нагрузки обычно легче развернуть, чем аппаратные версии. Они также имеют тенденцию быть более экономичными и гибкими, и они используются в сочетании со средами разработки программного обеспечения. Программный подход дает нам гибкость настройки балансировщика нагрузки в соответствии с конкретными потребностями нашей среды. Повышение гибкости может быть достигнуто за счет необходимости выполнять дополнительную работу по настройке балансировщика нагрузки. По сравнению с аппаратными версиями, которые предлагают закрытый подход, программные балансировщики дают нам больше свободы для внесения изменений и обновлений.
Программные балансировщики нагрузки широко используются и доступны либо в виде устанавливаемых решений, требующих настройки и управления, либо в виде управляемой облачной службы.
Аппаратное обеспечение
Как следует из названия, аппаратный балансировщик нагрузки использует физическое локальное оборудование для распределения приложений и сетевого трафика. Эти устройства могут обрабатывать большой объем трафика, но часто имеют высокую цену и довольно ограничены с точки зрения гибкости.
Аппаратные балансировщики нагрузки включают проприетарное микропрограммное обеспечение, которое требует обслуживания и обновлений по мере выпуска новых версий и исправлений безопасности.
DNS
Балансировка нагрузки DNS — это практика настройки домена в системе доменных имен (DNS) таким образом, что клиентские запросы к домену распределяются по группе серверов.
К сожалению, балансировка нагрузки DNS имеет врожденные проблемы, ограничивающие ее надежность и эффективность. Что наиболее важно, DNS не проверяет сбои или ошибки сервера и сети. Он всегда возвращает один и тот же набор IP-адресов для домена, даже если серверы не работают или недоступны.
Алгоритмы маршрутизации
Теперь давайте обсудим часто используемые алгоритмы маршрутизации:
- Циклический перебор: запросы распределяются между серверами приложений поочередно.
- Взвешенный циклический перебор: основывается на простом методе циклического перебора для учета различных характеристик сервера, таких как вычислительная мощность и пропускная способность обработки трафика, с использованием весов, которые могут быть назначены администратором через записи DNS.
- Наименьшее количество подключений: новый запрос отправляется на сервер с наименьшим количеством текущих подключений к клиентам. Относительная вычислительная мощность каждого сервера учитывается при определении того, какой из них имеет наименьшее количество подключений.
- Наименьшее время отклика: отправляет запросы на сервер, выбранный по формуле, которая сочетает в себе самое быстрое время отклика и наименьшее количество активных подключений.
- Наименьшая пропускная способность: этот метод измеряет трафик в мегабитах в секунду (Мбит/с), отправляя клиентские запросы на сервер с наименьшим трафиком в Мбит/с.
- Хэширование: распределяет запросы на основе определяемого нами ключа, например IP-адреса клиента или URL-адреса запроса.
Преимущества и функции балансировщика
Балансировка нагрузки также играет ключевую роль в предотвращении простоев. Другими преимуществами балансировки нагрузки являются следующие:
- Масштабируемость
- Избыточность
- Гибкость
- Эффективность
Вот некоторые наиболее часто используемые функции балансировщиков нагрузки:
- Автомасштабирование: запуск и отключение ресурсов в зависимости от условий спроса.
- Закрепленные сеансы: возможность назначать одного и того же пользователя или устройство одному и тому же ресурсу, чтобы поддерживать состояние сеанса на ресурсе.
- Проверки работоспособности: возможность определить, не работает ли ресурс или работает ли он плохо, чтобы удалить ресурс из пула балансировки нагрузки.
- Постоянные соединения: разрешение серверу открывать постоянное соединение с клиентом, таким как WebSocket.
- Шифрование: обработка зашифрованных соединений, таких как TLS и SSL.
- Сертификаты: представление сертификатов клиенту и аутентификация клиентских сертификатов.
- Сжатие: Сжатие ответов.
- Кэширование. Балансировщик нагрузки на уровне приложения может предлагать возможность кэширования ответов.
- Ведение журнала. Регистрация метаданных запросов и ответов может служить важным контрольным журналом или источником аналитических данных.
- Отслеживание запросов: присвоение каждому запросу уникального идентификатора для регистрации, мониторинга и устранения неполадок.
- Перенаправления: возможность перенаправить входящий запрос на основе таких факторов, как запрошенный путь.
- Фиксированный ответ: возврат статического ответа на запрос, например сообщения об ошибке.
Резервные балансировщики нагрузки
Как вы, должно быть, уже догадались, балансировщик нагрузки сам по себе может быть единственной точкой отказа. Чтобы преодолеть это, можно использовать второй или N балансировщиков нагрузки в кластерном режиме.
А в случае обнаружения сбоя и сбоя активного балансировщика нагрузки его может взять на себя другой пассивный балансировщик нагрузки, что сделает нашу систему более отказоустойчивой.
Примеры
Ниже приведены некоторые решения для балансировки нагрузки, обычно используемые в отрасли:
- Эластичная балансировка нагрузки Amazon
- Балансировка нагрузки Azure
- Балансировка нагрузки GCP
- Балансировщик нагрузки DigitalOcean
- Nginx
- HAProxy
Кластеризация
Reference 1На высоком уровне компьютерный кластер представляет собой группу из двух или более компьютеров или узлов, которые работают параллельно для достижения общей цели. Это позволяет распределять рабочие нагрузки, состоящие из большого количества отдельных параллелизуемых задач, между узлами в кластере. В результате эти задачи могут использовать объединенную память и вычислительную мощность каждого компьютера для повышения общей производительности.
Чтобы построить компьютерный кластер, отдельные узлы должны быть подключены к сети, чтобы обеспечить связь между узлами. Затем программное обеспечение можно использовать для объединения узлов и формирования кластера. У него может быть общее запоминающее устройство и/или локальное хранилище на каждом узле.
Как правило, по крайней мере один узел назначается ведущим узлом и действует как точка входа в кластер. Узел-лидер может нести ответственность за делегирование входящей работы другим узлам и, при необходимости, агрегирование результатов и возврат ответа пользователю.
В идеале кластер функционирует так, как если бы это была единая система. Пользователю, обращающемуся к кластеру, не нужно знать, является ли система кластером или отдельным компьютером. Кроме того, кластер должен быть спроектирован таким образом, чтобы свести к минимуму задержку и предотвратить возникновение узких мест при обмене данными между узлами.
Типы и конфигурации
Компьютерные кластеры обычно можно разделить на три типа:
-
отказоустойчивые кластеры (High-availability clusters, HA, кластеры высокой доступности)
-
кластеры с балансировкой нагрузки (Load balancing clusters)
-
вычислительные кластеры (Computing clusters)
Кластеры с балансировкой нагрузки внешне очень похожи на HA-кластеры, однако если LBC-кластеры автоматически являются и HA-кластерами, обеспечивая высокий уровень доступа, то обратное утверждение неверно и HA-кластеры не могут выступать в роли LBC.
Идея кластеров с балансировкой нагрузки очень проста. Если у нас имеется HA-кластер, узлы которого дублируют друг друга (разделяя общую внешнюю память), то почему бы не распределить поступающие запросы равномерно между всеми узлами кластера? Пользователь, заходящий на Web (например), автоматически перенаправляется на наименее загруженный узел, что позволяет всем узлам работать параллельно и легко масштабировать мощность кластера. Выход одного узла из строя не приведет к падению всей системы. Производительность кластера уменьшится, но функционировать система не перестанет.
Двумя наиболее часто используемыми конфигурациями кластеризации высокой доступности (HA) являются «активный-активный» и «активный-пассивный».
Кластер «активный-активный» обычно состоит как минимум из двух узлов, на каждом из которых одновременно запущены службы одного типа. Основная цель активно-активного кластера — добиться балансировки нагрузки. Балансировщик нагрузки распределяет рабочие нагрузки по всем узлам, чтобы предотвратить перегрузку любого отдельного узла. Поскольку для обслуживания доступно больше узлов, также будет улучшена пропускная способность и время отклика.
Подобно конфигурации кластера «активный-активный», кластер «активный-пассивный» также состоит как минимум из двух узлов. Однако, как следует из названия «активный-пассивный», не все узлы будут активными. Например, в случае двух узлов, если первый узел уже активен, второй узел должен быть пассивным или находиться в режиме ожидания.
Балансировка нагрузки и кластеризация
Балансировка нагрузки имеет некоторые общие черты с кластеризацией, но это разные процессы. Кластеризация обеспечивает избыточность и повышает емкость и доступность. Серверы в кластере знают друг о друге и работают вместе для достижения общей цели. Но при балансировке нагрузки серверы не знают друг о друге. Вместо этого они реагируют на запросы, полученные от балансировщика нагрузки.
Мы можем использовать балансировку нагрузки в сочетании с кластеризацией, но она также применима в случаях, когда используются независимые серверы, которые имеют общую цель, такую как запуск веб-сайта, бизнес-приложения, веб-службы или какого-либо другого ИТ-ресурса.
Преимущества и проблемы
Наиболее очевидная проблема, связанная с кластеризацией, — это повышенная сложность установки и обслуживания. Операционная система, приложение и его зависимости должны быть установлены и обновлены на каждом узле.
Это становится еще более сложным, если узлы в кластере неоднородны. Использование ресурсов для каждого узла также должно тщательно контролироваться, а журналы должны быть объединены, чтобы убедиться, что программное обеспечение работает правильно.
Кроме того, хранением становится сложнее управлять, общее устройство хранения должно предотвращать перезапись узлов друг друга, а распределенные хранилища данных должны поддерживаться в синхронизации.
Четыре ключевых преимущества кластерных вычислений заключаются в следующем:
- Высокая доступность
- Масштабируемость
- Производительность
- Экономический эффект
Примеры
Кластеризация широко используется в отрасли, и часто многие технологии предлагают тот или иной режим кластеризации. Например:
- Контейнеры (например, Kubernetes, Amazon ECS)
- Базы данных (например, Cassandra, MongoDB)
- Кэш (например, Redis)
Сеть доставки контента (CDN)
Сеть доставки контента (CDN) — это географически распределенная группа серверов, которые работают вместе для обеспечения быстрой доставки интернет-контента. Как правило, статические файлы, такие как HTML/CSS/JS, фотографии и видео, обслуживаются из CDN.
Сеть доставки контента (CDN) повышает доступность и избыточность контента, одновременно снижая затраты на полосу пропускания и повышая безопасность. Обслуживание контента из CDN может значительно повысить производительность, поскольку пользователи получают контент из ближайших к ним центров обработки данных, и нашим серверам не нужно обслуживать запросы, которые выполняет CDN.
Как работает CDN?
В CDN исходный сервер содержит оригинальные версии контента, в то время как пограничные серверы многочисленны и распределены по разным местам по всему миру.
Чтобы свести к минимуму расстояние между посетителями и сервером веб-сайта, CDN хранит кэшированную версию своего контента в нескольких географических местоположениях, известных как периферийные местоположения. Каждая периферийная локация содержит несколько кэширующих серверов, отвечающих за доставку контента посетителям в непосредственной близости от нее.
После кэширования статических ресурсов на всех серверах CDN для определенного местоположения все последующие запросы посетителей веб-сайта на статические ресурсы будут доставляться с этих пограничных серверов, а не с источника, что снижает нагрузку на источник и улучшает масштабируемость.
Например, когда кто-то в Великобритании запрашивает наш веб-сайт, который может быть размещен в США, он будет обслуживаться из ближайшего периферийного местоположения, такого как периферийное местоположение в Лондоне. Это намного быстрее, чем когда посетитель делает полный запрос на исходный сервер, что увеличивает задержку.Вот некоторые широко используемые в мире CDN:
Отечественные CDN
Типы
CDN обычно делятся на два типа:
- Push CDN. Push CDN получают новый контент всякий раз, когда на сервере происходят изменения.
Мы берем на себя полную ответственность за предоставление контента, загрузку непосредственно в CDN
и переписывание URL-адресов, чтобы они указывали на CDN. Мы можем настроить срок действия
содержимого и время его обновления. Контент загружается только в том случае, если он новый или
измененный, что сводит к минимуму трафик, но увеличивает объем хранилища.
Сайты с небольшим объемом трафика или сайты с контентом, который не часто обновляется, хорошо работают с push CDN. Контент размещается в CDN один раз, а не извлекается через регулярные промежутки времени. - Pull CDN. В ситуации Pull CDN кэш обновляется на основе запроса. Когда клиент отправляет
запрос, который требует, чтобы статические ресурсы были извлечены из CDN, если в CDN их нет, он
извлечет недавно обновленные ресурсы с исходного сервера и заполнит свой кеш этим новым ресурсом,
а затем отправит это новый кэшированный ресурс пользователю.
В отличие от Push CDN, это требует меньшего обслуживания, поскольку обновления кэша на узлах CDN выполняются на основе запросов от клиента к исходному серверу. Сайты с интенсивным трафиком хорошо работают с вытягивающими CDN, поскольку трафик распределяется более равномерно, и в CDN остается только недавно запрошенный контент.
Недостатки
Как мы все знаем, хорошие вещи требуют дополнительных затрат, поэтому давайте обсудим некоторые недостатки CDN:
- Дополнительные расходы: использование CDN может быть дорогостоящим, особенно для услуг с высоким трафиком.
- Ограничения: некоторые организации и страны заблокировали домены или IP-адреса популярных CDN.
- Расположение: если большая часть нашей аудитории находится в стране, где CDN не имеет серверов, данные на нашем веб-сайте могут перемещаться дальше, чем без использования какой-либо CDN.
О прокси
Прокси-сервер — это промежуточная часть аппаратного/программного обеспечения, находящаяся между клиентом и внутренним сервером. Он получает запросы от клиентов и ретранслирует их на исходные серверы. Как правило, прокси-серверы используются для фильтрации запросов, регистрации запросов или иногда преобразования запросов (путем добавления/удаления заголовков, шифрования/дешифрования или сжатия).
Слово proxy переводится с английского как «доверенное лицо», что хорошо передает его смысл.
Существует два типа прокси:
Прямой прокси
Прямой прокси-сервер, часто называемый прокси-сервером, прокси-сервером или веб-прокси, — это сервер, который находится перед группой клиентских компьютеров. Когда эти компьютеры делают запросы к сайтам и службам в Интернете, прокси-сервер перехватывает эти запросы, а затем связывается с веб-серверами от имени этих клиентов, как посредник.
Вот некоторые преимущества прямого прокси:
- Блокировать доступ к определенному контенту
- Разрешает доступ к контенту с географическим ограничением
- Обеспечивает анонимность
- Избегайте других ограничений просмотра
- Хотя прокси обеспечивают анонимность, они все же могут отслеживать нашу личную информацию. Установка и обслуживание прокси-сервера может быть дорогостоящим и требует настройки.
Обратный прокси
Обратный прокси — это сервер, который находится перед одним или несколькими веб-серверами и перехватывает запросы от клиентов. Когда клиенты отправляют запросы на исходный сервер веб-сайта, эти запросы перехватываются обратным прокси-сервером.
Разница между прямым и обратным прокси тонкая, но важная. Упрощенно можно было бы сказать, что прямой прокси-сервер сидит перед клиентом и гарантирует, что ни один исходный сервер никогда не связывается напрямую с этим конкретным клиентом. С другой стороны, обратный прокси-сервер находится перед исходным сервером и гарантирует, что ни один клиент никогда не связывается напрямую с этим исходным сервером.
Введение обратного прокси-сервера приводит к увеличению сложности. Один обратный прокси-сервер — это единая точка отказа, настройка нескольких обратных прокси-серверов (т. е. отказоустойчивость) еще больше увеличивает сложность.
Вот некоторые преимущества использования обратного прокси:
- Улучшенная безопасность
- Кэширование
- SSL-шифрование
- Балансировка нагрузки
- Масштабируемость и гибкость
Подождите, разве обратный прокси не похож на балансировщик нагрузки? Ну, нет, поскольку балансировщик нагрузки полезен, когда у нас есть несколько серверов. Часто балансировщики нагрузки направляют трафик на набор серверов, выполняющих одну и ту же функцию, в то время как обратные прокси-серверы могут быть полезны даже с одним веб-сервером или сервером приложений. Обратный прокси-сервер также может действовать как балансировщик нагрузки, но не наоборот
Ниже приведены некоторые часто используемые прокси-технологии:
Хранилище данных
Хранилище — это механизм, который позволяет системе сохранять данные временно или постоянно. Эта тема в основном пропускается в контексте проектирования системы, однако важно иметь общее представление о некоторых распространенных типах методов хранения, которые могут помочь нам в тонкой настройке компонентов хранилища. Давайте обсудим некоторые важные концепции хранения:
RAID
RAID (избыточный массив независимых дисков) — это способ хранения одних и тех же данных на нескольких жестких дисках или твердотельных накопителях (SSD) для защиты данных в случае отказа диска.
Однако существуют разные уровни RAID, и не все они предназначены для обеспечения избыточности. Давайте обсудим некоторые часто используемые уровни RAID:
- RAID 0: также известный как чередование, данные распределяются равномерно по всем дискам в массиве.
- RAID 1: также известный как зеркальное отображение, по крайней мере два диска содержат точную копию набора данных. Если диск выйдет из строя, другие продолжат работать.
- RAID 5: Чередование с контролем четности. Требуется использование не менее 3 дисков, чередование данных по нескольким дискам, например RAID 0, но также распределение четности по дискам.
- RAID 6: Чередование с двойной четностью. RAID 6 похож на RAID 5, но данные четности записываются на два диска.
- RAID 10: сочетает в себе чередование и зеркальное отображение из RAID 0 и RAID 1. Он обеспечивает безопасность за счет зеркального отображения всех данных на дополнительных дисках с использованием чередования на каждом наборе дисков для ускорения передачи данных.
Давайте сравним все возможности разных уровней RAID:
- Функции RAID 0 RAID 1 RAID 5 RAID 6 RAID 10
- Описание Чередование Зеркальное отображение Чередование с контролем четности Чередование с двойной четностью Чередование и зеркальное отображение
- Минимум дисков 2 2 3 4 4
- Производительность чтения Высокая Высокая Высокая Высокая Высокая
- Производительность записи Высокая Средняя Высокая Высокая Средняя
- Стоимость Низкая Высокая Низкая Низкая Высокая
- Отказоустойчивость Нет Сбой одного диска Сбой одного диска Сбой двух дисков Сбой до одного диска в каждом подмассиве
- Загрузка мощностей 100% 50% 67%-94% 50%-80% 50%
Объемы
Том — это фиксированный объем памяти на диске или ленте. Термин «том» часто используется как синоним самого хранилища, но один диск может содержать более одного тома или том может охватывать более одного диска.
Файловое хранилище
Хранилище файлов — это решение для хранения данных в виде файлов и представления их конечным пользователям в виде иерархической структуры каталогов. Основным преимуществом является предоставление удобного решения для хранения и извлечения файлов. Чтобы найти файл в файловом хранилище, требуется полный путь к файлу. Он экономичен и легко структурирован и обычно находится на жестких дисках, а это означает, что они выглядят одинаково для пользователя и на жестком диске.
Пример: Amazon EFS, файлы Azure, Google Cloud Filestore и т. д.
Блочное хранилище
Блочное хранилище делит данные на блоки (чанки) и сохраняет их как отдельные части. Каждому блоку данных присваивается уникальный идентификатор, который позволяет системе хранения размещать меньшие фрагменты данных там, где это наиболее удобно.
Блочное хранилище также отделяет данные от пользовательских сред, позволяя распределять эти данные по нескольким средам. Это создает несколько путей к данным и позволяет пользователю быстро извлекать их. Когда пользователь или приложение запрашивает данные из блочной системы хранения, базовая система хранения повторно собирает блоки данных и представляет данные пользователю или приложению.
Пример: Amazon EBS.
Хранилище объектов
Хранилище объектов, также известное как хранилище на основе объектов, разбивает файлы данных на части, называемые объектами. Затем он сохраняет эти объекты в одном репозитории, который может быть распределен по нескольким сетевым системам.
Пример: Amazon S3, хранилище BLOB-объектов Azure, облачное хранилище Google и т. д.
NAS
NAS (сетевое хранилище) — это устройство хранения, подключенное к сети, которое позволяет хранить и извлекать данные из центрального места для авторизованных пользователей сети. Устройства NAS являются гибкими, а это означает, что, если нам понадобится дополнительное хранилище, мы можем добавить его к тому, что у нас есть. Это быстрее, дешевле и предоставляет все преимущества общедоступного облака на месте, предоставляя нам полный контроль.
HDFS
Распределенная файловая система Hadoop (HDFS) — это распределенная файловая система, предназначенная для работы на обычном оборудовании. HDFS обладает высокой отказоустойчивостью и предназначена для развертывания на недорогом оборудовании. HDFS обеспечивает высокоскоростной доступ к данным приложений и подходит для приложений с большими наборами данных. Он имеет много общего с существующими распределенными файловыми системами.
HDFS предназначена для надежного хранения очень больших файлов на компьютерах в большом кластере. Он хранит каждый файл в виде последовательности блоков, все блоки в файле, кроме последнего блока, имеют одинаковый размер. Блоки файла реплицируются для обеспечения отказоустойчивости.