Определение высоконагруженных систем и методов их построения.
Загрузка сервера является важным показателем использования серверного оборудования.
Хит — это запрос клиента к серверу для получения информации.
Нагрузка на сервер определяется как отношение количества клиентских запросов (хитов) ко времени, выраженное в хитах в секунду.
Согласно исследованию Microsoft 2010 года, высоконагруженным сервером можно считать сервер с нагрузкой 100-150 обращений в секунду.
В литературе встречаются такие понятия, как высокопроизводительная система, высоконагруженная система, высоконагруженный кластер, высоконагруженная система, суперкомпьютер, которые иногда используются как синонимы.
Под нами будет пониматься сайт с нагрузкой не менее 150 посещений в секунду.
Кластер — это группа компьютеров, которые работают вместе и образуют единый вычислительный ресурс.
На каждом узле работает своя копия операционной системы, в качестве которой чаще всего используются Linux и BSD. Чтобы понять, как задачи, выполняемые кластером, распределяются между его узлами, необходимо определить масштабируемость.
Масштабируемость — это способность системы справляться с увеличением рабочей нагрузки (повышать свою производительность) при добавлении ресурсов.
Говорят, что система масштабируема, если она может повысить производительность пропорционально дополнительным ресурсам.
Масштабируемость можно оценить через соотношение прироста производительности системы к приросту используемых ресурсов.
Чем ближе это соотношение к единице, тем лучше.
Масштабируемость также означает возможность увеличения дополнительных ресурсов без структурных изменений центрального узла системы.
Масштабирование архитектуры высоконагруженной системы может быть горизонтальным и вертикальным.
Вертикальное масштабирование предназначено для повышения производительности системы за счет увеличения мощности сервера.
Основным недостатком вертикального масштабирования является то, что оно ограничено определенным пределом.
Параметры железа нельзя повышать бесконечно.
Однако на самом деле вертикальная составляющая присутствует практически всегда, а универсального горизонтального масштабирования как такового не существует. Горизонтальное масштабирование заключается в увеличении производительности системы за счет подключения дополнительных серверов.
Именно горизонтальное масштабирование сейчас является стандартом де-факто.
Существует также термин, известный как диагональное масштабирование.
Он предполагает одновременное использование двух подходов.
Наконец, необходимо определить основной принцип, используемый при построении любой кластерной архитектуры.
Это трехуровневая структура системы (рис.
1).
Три звена — это интерфейс, серверная часть и хранилище данных.
Каждое звено выполняет свои функции, отвечает за разные этапы обработки запроса и по-разному масштабируется.
Изначально запрос поступает во фронтенд. Фронтенды обычно отвечают за обслуживание статических файлов, первоначальную обработку запроса и его передачу.
Вторая ссылка, куда поступает запрос, уже предварительно обработанный фронтендом, — это бэкенд. Бэкэнд выполняет вычисления.
На backend стороне, как правило, реализуется бизнес-логика проекта.
Следующий уровень, который вступает в действие при обработке запроса, — это хранилище данных, которое обрабатывается серверной частью.
Это может быть база данных или файловая система.
Обзор программного и аппаратного обеспечения для построения кластерной системы HPC
При построении кластера возникает проблема, как распределить нагрузку между серверами.Для этого используется балансировка нагрузки, которая помимо самого распределения выполняет ряд других задач, например: повышение отказоустойчивости (при выходе из строя одного из серверов система продолжит работу) и защиту от некоторых видов атак.
атаки (например, SYN-флуд).
Балансировка и защита внешнего интерфейса
Один из методов балансировки DNS Round Robin используется для масштабирования внешних интерфейсов.Суть его в том, что на DNS-сервере создается несколько DNS-записей типа А для записи системного домена.
DNS-сервер выдает эти записи в поочередном циклическом порядке.
В простейшем случае DNS Round Robin работает, отвечая на запросы не только одним IP-адресом, но и списком из нескольких адресов серверов, предоставляющих одну и ту же услугу.
С каждым ответом последовательность IP-адресов меняется.
Обычно простые клиенты будут пытаться установить соединения с первым адресом в списке, поэтому разным клиентам будут присвоены адреса разных серверов, которые будут распределять общую нагрузку между серверами.
Для реализации метода подойдет любой DNS-сервер, например Bind. Недостаток этого метода в том, что у некоторых провайдеров есть DNS-серверы, которые принудительно кэшируют записи на длительное время.
Следующий метод балансировки — балансировка на втором уровне стека протоколов.
Балансировка осуществляется с помощью маршрутизатора, чтобы фронтенды принимали соединения, приходящие на IP-адрес системы, и отвечали на них, но не отвечали на ARP-запросы, связанные с этим адресом.
Из программных инструментов для этого метода наиболее распространенным является LVS (Linux Virtual Server), который представляет собой модуль ядра Linux; этот метод балансировки также называется прямой маршрутизацией.
Основная терминология здесь следующая: Директор — фактический узел, выполняющий маршрутизацию; Realserver – узел фермы серверов; VIP или Virtual IP — это всего лишь IP наших виртуальных (собранных из кучи реальных) серверов; DIP и RIP - IP директора и реальных серверов.
На директоре включен этот самый модуль IPVS (IP Virtual Server), настроены правила пересылки пакетов и поднят VIP - обычно как псевдоним внешнего интерфейса.
Пользователи будут проходить через VIP. Пакеты, поступающие на VIP, пересылаются выбранным методом на один из Realservers и там нормально обрабатываются.
Клиенту кажется, что он работает с одной машиной.
Другой метод — балансировка на третьем уровне стека протоколов, то есть на уровне IP. Этот метод работает таким образом, что при возникновении подключения к IP-адресу системы на балансировщике делается Destination NAT, то есть IP-адреса назначения в пакетах заменяются на IP-адреса фронтендов.
Для ответов заголовки пакетов изменяются обратно.
Это делается с помощью netfilter, который является частью ядра Linux.
Поскольку именно фронтенды получают запросы от пользователей, основная задача защиты кластера ложится на фронтенды (или на фронтенд-балансировщик, в зависимости от архитектуры).
Необходимо обеспечить защиту от всех видов хакерских атак (например, SYN-флуда и DDOS).
В основном для защиты используется межсетевой экран, другое название — межсетевой экран, другое название — межсетевой экран.
Брандмауэр блокирует вредоносный трафик с помощью правил фильтрации пакетов, а также может выполнять с трафиком такие действия, как кэширование, преобразование адресов и перенаправление.
GNU/Linux имеет встроенный брандмауэр netfilter, включенный в ядро Linux.
Масштабирование бэкэндов
При создании высоконагруженных веб-сайтов различают легкие и тяжелые http-запросы.Легкие запросы — это запросы статических веб-страниц и изображений.
Тяжелые запросы — это вызовы какой-либо программы, которая динамически генерирует контент. Динамические веб-страницы генерируются программой или скриптом, написанным на языке высокого уровня: чаще всего PHP, ASP.net, Perl и Java. Совокупность этих программ называется бизнес-логикой.
Бизнес-логика — это совокупность правил, принципов, зависимостей поведения объектов предметной области, реализации правил и ограничений автоматизированных операций.
Бизнес-логика расположена на бэкэнде.
Используются две схемы: во-первых, интерфейсный веб-сервер обрабатывает легкие запросы и передает тяжелые на серверные части; во-вторых, фронтенд действует чисто как прокси, но он проксирует легкие запросы к одной группе серверов, а тяжелые — к другой.
Apache часто используется в качестве веб-сервера, используемого на бэкэндах.
Apache — самый популярный HTTP-сервер.
Apache имеет встроенный механизм виртуального хоста.
Apache предоставляет различные модели многопроцессорной обработки (MPM) для использования в разных средах.
Модель prefork, наиболее популярная в Linux, создает определенное количество процессов Apache при запуске и управляет ими в пуле.
Альтернативной моделью является рабочий процесс, который использует несколько потоков вместо процессов.
Хотя потоки легче процессов, их нельзя использовать, пока весь сервер не станет потокобезопасным.
А у модели prefork есть свои проблемы: каждый процесс занимает много памяти.
Сайты с высокой нагрузкой параллельно обрабатывают тысячи файлов, при этом ограничены в памяти и максимальном количестве потоков или процессов.
В 2003 году этой проблемой заинтересовался немецкий разработчик Ян Кнешке и решил, что сможет написать веб-сервер, который будет быстрее Apache, если сосредоточится на правильных методах.
Он разработал сервер Lighttpd как единый процесс с одним потоком и неблокирующим вводом-выводом.
Для выполнения задачи масштабирования можно использовать Lighttpd + Apache, при этом все статические данные будут отправляться клиенту через Lighttpd, а запросы, заканчивающиеся, например, на .
cgi и .
php, будут передаваться в Apache. Еще один популярный сервер для решения проблемы масштабирования — Nginx. Nginx — это HTTP-сервер и обратный прокси-сервер, а также почтовый прокси.
Как прокси-сервер Nginx устанавливается на фронтенде.
Бэкендов может быть несколько, тогда Nginx работает как балансировщик нагрузки.
Данная модель позволяет экономить системные ресурсы за счет того, что запросы принимает Nginx, Nginx передает запрос Apache и быстро получает ответ, после чего Apache освобождает память, а Nginx далее взаимодействует с клиентом (отвечает на простые запросы), который написан для распространения статического контента, большому количеству клиентов, с небольшим потреблением системных ресурсов.
В Microsoft Server IIS используется в качестве внутреннего веб-сервера, а бизнес-логика написана на ASP.net. Еще одним средством масштабирования серверной части является масштабируемый сервер приложений.
Применимо, если бизнес-логика написана на Java, а именно в его серверной версии.
Такие приложения называются сервлетами, а сервер называется контейнером сервлетов или сервером приложений.
Существует множество контейнеров сервлетов с открытым исходным кодом: Apache Tomcat, Jetty, JBoss Application Server, GlassFish и проприетарных: Oracle Application Server, Borland Application Server. Многие серверы приложений поддерживают кластеризацию при условии, что приложение спроектировано и разработано в соответствии с четко определенными уровнями.
Кроме того, для решения критических проблем приложений Oracle Application Server поддерживает «острова кластера» — наборы серверов на уровне J2EE, на которых гораздо проще воспроизводить параметры состояния сеанса, обеспечивая тем самым прозрачное перенаправление клиентского запроса на другой компонент. который может обслужить этот запрос в случае сбоя какого-либо компонента J2EE.
Масштабирование СУБД
И, наконец, при описании программных инструментов, используемых для создания кластерных HPC-систем, необходимо упомянуть инструменты масштабирования хранилища данных.В качестве хранилища данных в Интернете используются базы данных общего назначения, наиболее распространенными из которых являются MySQL и PostgreSQL. Основной метод масштабирования СУБД — шардинг; точнее, шардингом правильнее было бы называть не масштабирование, а разделение данных по машинам.
Суть метода в том, что по мере увеличения объема данных добавляются новые шарды — серверы, которые добавляются при заполнении существующих шардов до определенного предела.
При масштабировании СУБД на помощь приходит технология репликации.
Репликация — это средство связи между серверами баз данных.
С помощью репликации вы можете перемещать данные с одного сервера на другой или дублировать данные на двух серверах.
Репликация используется в технике масштабирования «виртуальных шардов» — с помощью репликации данные распределяются так, что каждый бэкенд-сервер работает со своим виртуальным шардом; информация о том, где физически находится нужный шард, хранится в таблице соответствия.
А также техника репликации в методе масштабирования, основанная на особенностях запросов к базе данных: редкие операции обновления и частые запросы на чтение.
Каждый backend-сервер работает со своим сервером базы данных, они называются SLAVE, на этих серверах происходят операции чтения из таблицы (функция SELECT).
Если в таблицу производится запись (функции INSERT и UPDATE), то запрос поступает на МАСТЕР-сервер и оттуда реплицируется на все серверы.
MySQL использует разные системы хранения данных.
Чаще всего это MyISAM и InnoDB. Существует также хранилище NDB, которое используется в специальном масштабаторе MySQL, называемом кластером MySQL. Кластерная часть MySQL Cluster в настоящее время настроена независимо от серверов MySQL. В MySQL Cluster каждая часть кластера называется узлом, а узлы на самом деле являются процессами.
На одном компьютере может быть любое количество узлов.
В минимальной конфигурации кластера MySQL будет как минимум три узла: менеджер (узел MGM) — его роль заключается в управлении другими узлами внутри кластера MySQL, например, предоставлении данных конфигурации, запуске и остановке узлов, выполнении резервного копирования и т. д. .
; узел базы данных (узел БД) - управляет и хранит базу данных непосредственно, узлов БД столько, сколько фрагментов для репликации, например, при двух репликациях по два фрагмента необходимо четыре узла БД; клиентский узел (API) — пользовательский узел, который будет обращаться к кластеру; в случае кластера MySQL пользовательский узел — это традиционный сервер MySQL, который использует тип хранилища NDB Cluster, обеспечивая доступ к кластерным таблицам.
Распределенные вычисления как альтернативное решение
Иногда вместо построения собственной высоконагруженной системы на основе кластерной архитектуры клиенту проще и выгоднее воспользоваться интернет-сервисами распределенных вычислений.Распределенные вычисления — это способ решения трудоемких вычислительных задач с использованием нескольких компьютеров, чаще всего объединенных в параллельную вычислительную систему.
История распределенных вычислений берет свое начало в 1999 году, когда первокурсник Северо-Восточного университета Шон Фэннинг написал систему обмена файлами MP3 между пользователями.
Этот проект назывался Napster. По примеру Napster развился целый класс P2P (или одноранговых) сетей нового, децентрализованного типа.
P2P файлообменник заключается в том, что пользователь загружает файлы не с сервера, а с компьютеров других пользователей файлообменной сети, IP-адреса которых он получает от специализированного сервера, называемого трекером или хабом.
Файлы загружаются одновременно со всех пиров (участников одноранговой сети) и сопровождаются одновременной загрузкой, поэтому одноранговая сеть представляет собой своего рода распределенное файловое хранилище.
Развилась технология распределенных вычислений, и принципы P2P стали использоваться не только для создания распределенных файловых хранилищ, появились распределенные базы данных, потоки и процессоры.
Грид-вычисления (grid — решетка, сеть) — это форма распределенных вычислений, в которой «виртуальный суперкомпьютер» представлен в виде кластеров, связанных через сеть, работающих вместе для выполнения огромного количества задач.
Грид — это система, которая координирует распределенные ресурсы посредством стандартных, открытых, универсальных протоколов и интерфейсов для обеспечения нетривиального качества обслуживания.
Основная идея, лежащая в основе концепции грид-вычислений, — централизованное удаленное предоставление ресурсов, необходимых для решения различных типов вычислительных задач.
Пользователь может запустить любую задачу с любого компьютера для расчета; ресурсы для этого расчета должны автоматически предоставляться на удаленных высокопроизводительных серверах независимо от типа задачи.
Совместное использование ресурсов, в котором заинтересованы разработчики Grid, — это не обмен файлами, а прямой доступ к компьютерам, программному обеспечению, данным и другим ресурсам, которые необходимы для совместной работы над проблемами и стратегиями управления ресурсами.
Выделяют следующие уровни грид-архитектуры: базовый (содержит различные ресурсы, такие как компьютеры, устройства хранения данных, сети, датчики и т. д.); привязка (определяет протоколы связи и аутентификации); ресурсно-ориентированный (реализует протоколы взаимодействия с ресурсами РВС и управления ими); коллективный (управление каталогом ресурсов, диагностика, мониторинг); прикладные (инструменты для работы с сеткой и пользовательские приложения).
Следующим этапом развития распределенных вычислений стали облачные вычисления.
Лаборатория Беркли определяет это следующим образом: «Облачные вычисления — это не только приложения, предоставляемые в виде услуг через Интернет, но также аппаратные и программные системы в центрах обработки данных, которые обеспечивают эти услуги».
Облачные вычисления — это технология, при которой распределенные ресурсы предоставляются пользователю в виде интернет-сервиса.
С помощью облачных вычислений компании могут предоставлять конечным пользователям удаленный динамический доступ к услугам, вычислительным ресурсам и приложениям (включая операционные системы и инфраструктуру) через Интернет. Облачные вычисления состоят из тысяч серверов, расположенных в физических и виртуальных центрах обработки данных, на которых выполняются десятки тысяч приложений, используемых миллионами одновременно работающих пользователей.
Все возможные методы классификации облаков можно свести к трехуровневой архитектуре облачных систем, состоящей из следующих уровней:
- инфраструктура как услуга (Infrastructure as a Service: IaaS)
- платформа как услуга (Платформа как услуга: PaaS)
- программное обеспечение как услуга (Software as a Service: SaaS)
SaaS — это веб-модель развертывания программного обеспечения, которая делает программное обеспечение полностью доступным через веб-браузер.
Для пользователей SaaS-системы не имеет значения, где установлено программное обеспечение, какую операционную систему оно использует и на каком языке оно написано: PHP, Java или .
СЕТЬ.
И, что самое главное, пользователю не нужно ничего никуда устанавливать.
Например, Gmail — это программа электронной почты, доступная через браузер.
При этом сама Gmail распространяется в облаке серверов, расположенных по всему миру, то есть использует технологию SaaS. PaaS предоставляет пользователю инфраструктуру и функционально полную среду обслуживания и разработки приложений для развертывания пользовательских веб-приложений.
Например, пользователь Google App Engine может написать собственное приложение Python, используя API Google. Iaas предлагает информационные ресурсы, такие как вычислительные циклы или ресурсы хранения, в качестве услуги.
Вместо предоставления доступа к необработанным вычислительным устройствам и системам хранения поставщики IaaS обычно предоставляют виртуализированную структуру как услугу.
Крупнейшими облачными провайдерами на конец 2012 года являются: Amazon Web Services, Windows Azure и Google App Engine. Amazon Web Services (AWS) — это собирательное описание всех предлагаемых Amazon облачных сервисов, охватывающее широкий спектр услуг.
Amazon Elastic Cloud Compute (Amazon EC2) — это сердце облака Amazon. Этот сервис предоставляет API веб-сервисов для предоставления, управления и вывода из эксплуатации виртуальных серверов, возвращая освобожденные ресурсы в облако Amazon. EC2 — это специальная виртуальная сеть, содержащая виртуальные серверы.
Основным средством доступа к Amazon EC2 является интерфейс программирования приложений (API) веб-сервисов.
Amazon предоставляет ряд интерактивных инструментов, работающих на основе API, таких как консоль Amazon Web Services, плагин ElasticFox Firefox и инструменты командной строки Amazon. Windows Azure — облачная платформа, разработанная Microsoft. Windows Azure обеспечивает хранение, использование и изменение данных на компьютерах центров обработки данных Microsoft. С точки зрения пользователя, существует две категории приложений — внутренние, работающие на компьютере пользователя, и облачные, фактически работающие в среде Windows Azure на компьютерах в дата-центре.
Основным компонентом Windows Azure для управления приложениями в облаке является Windows Azure AppFabric, облачная платформа промежуточного программного обеспечения для разработки, развертывания и управления приложениями на платформе Windows Azure. По классификации Windows Azure она относится к облачной платформе типа PaaS, т.е.
клиенту разработчика предоставляются средства для управления облачными приложениями (именно это и обеспечивает компонент AppFabric).
Подводя итог, все рассмотренные архитектуры HPC-систем можно представить в виде следующей блок-схемы:
Использованные источники
- Учебник по высоким нагрузкам - журнал "Хакер: журнал от компьютерных хулиганов" - №7-11 2012г.
- Сборник лучших материалов конференции разработчиков высоконагруженных систем HighLoad++ за 2010 и 2011 годы [Ээлектронный ресурс] - Москва, 2012.
- Радченко Г.
И.
Распределенные вычислительные системы – Челябинск: Фотограф, 2012. – 182 с.
- Риз Дж.
Облачные вычисления: Перевод с английского.
- СПб.
: БХВ-Петербург, 2011. -288 с.
: ил.
- Сафонов В.
О.
Платформа облачных вычислений Microsoft Windows Azure – М.
: Национальный открытый университет «ИНТУИТ», 2013 – 234 с.
, ил.
-
Галереи Flickr
19 Oct, 24 -
Выпущены Qt 5.0.1 И Qt Creator 2.6.2
19 Oct, 24 -
Мемори.ру И 100$
19 Oct, 24