Highload – это программное обеспечение, которое постоянно работает в режиме максимальной нагрузки.
Описание
К Highload-системам относятся, как правило, приложения с определенными заданными параметрами:
- Одновременное подключение большого количества пользователей.
- Приложение работает с огромным объемом данных, для которых требуются мощные вычислительные ресурсы.
- Внутри приложения происходят сложные математические расчеты и вычисления.
Один из примеров высоконагруженных систем – это хранилище данных (DWH). Одновременно работают множество пользователей, для построения и стабильной работы требуются огромные вычислительные ресурсы, а внутри хранилища зачастую происходит сложная обработка информации.
Отличия
Highload-системы существенно отличаются от обычных по ряду причин:
- Жесткость. Highload-архитектура не обладает гибкостью, как обычное ПО. Это связано с особенностью работы приложения с выбранной базой данных. Для эффективного и стабильного взаимодействия нужна монолитная система, а не универсальная.
- Масштабируемость. Высоконагруженная система должна обладать высокой масштабируемостью, так как нагрузка со временем будет расти. Потребуются дополнительные вычислительные мощности, дисковое пространство и другие ресурсы.
- Модульность. Проектируя Highload-систему, архитекторы составляют ее в виде модулей. Такой подход гарантирует возможность замены любого из компонентов в случае выхода его из строя. Другой вариант – расширение возможностей путем добавления новых модулей.
- Время отклика (Latency). Данный параметр предполагает минимально возможное время ответа highload-системы на запрос пользователя. Чем ниже значение данного параметра, тем быстрее происходит реакция приложений.
- Уникальность. Highload-архитектура проектируется под каждую задачу индивидуально с учетом требований к производительности, нагрузке и масштабируемости. Не бывает двух полностью идентичных highload-систем.
- Отказоустойчивость. Критически важные компоненты высоконагруженной системы в обязательном порядке дублируются. Такой подход гарантирует, что в случае выхода из строя одного из узлов его автоматически заменит дублирующий без простоя.
Методы разработки
При создании highload-архитектуры используются разные методы проектирования:
- Каскадная модель. Классический вариант проектирования, при котором каждый следующий этап следует из предыдущего. Такой подход еще называют «водопадом», так как все процессы представлены в виде потока.
- Итерационная модель. Весь процесс проектирования разбивается на итерации сроком от 2 до 6 недель. После каждого этапа команда проекта должны достичь запланированных результатов, а также получить временную функциональную версию высоконагруженной системы.
- Agile. Частный случай итерационной модели, при котором требования формируются динамически. Их выполнение происходит путем создания новой команды под каждую задачу.
- Канбан. Метод проектирования, при котором на каждого члена команды поступает ограниченное количество задач. Новые приходят только после завершения предыдущих. Таким образом нагрузка распределяется по каждому разработчику в зависимости от опыта и технических знаний.
- Экстремальная модель. Исходя из названия, становится понятным, что данный подход подразумевает наличие высокопрофессиональных разработчиков. Они постоянно пишут код, чтобы получить быструю обратную связь и внести корректировки при необходимости. Данный метод всегда используется совместно с другими и только на определенных этапах проектирования.
- Непрерывная интеграция. Данный подход предполагает постоянный выпуск обновлений и добавление новых функций в кратчайшие сроки. Другими словами, мало, но часто. Метод используют, когда есть жесткие ограничения по срокам сдачи проекта, так как при таком подходе легко детерминировать ошибки при разработке.
Вышеперечисленные методы наиболее часто используются при создании архитектуры и сервисов highload. Они, как правило, используются совместно в зависимости от требований технического задания.
Проектирование
Создание архитектуры highload-системы процесс длительный и трудоемкий. Его, как и любую сложную задачу, разбивают на несколько простых этапов. Каждый по отдельности создать и отладить гораздо проще, чтобы потом собрать воедино.
Структура
Сначала определяются требования к высоконагруженной системе: дисковое пространство, производительность, время отклика, масштабируемость и т. д. Как правило, данные собирают, исходя из текущих задач бизнеса, которые необходимо решить.
После определения требований к архитектуре решения формируется структура будущей highload-системы. Обычно она создается в виде таблицы или блок-схемы, где четко расписан каждый компонент и указаны требования.
На данном этапе определяются группы пользователей с разными ролями и правами доступа, которые будут работать в высоконагруженной системе.
Итогом первого этапа является дорожная карта (roadmap), на которой прописываются сроки каждого этапа проекта и формируется команда исполнителей.
Back-end
Второй этап заключается в определении и создании бэкенда проекта. Чтобы выбрать наиболее оптимальное решение, проводят нагрузочное тестирование. Оно состоит из разных проверок и под разные данные.
Обязательно тестируются профили будущих пользователей под разные нагрузки и программное обеспечение. Система мониторинга собирает статистические данные, чтобы в дальнейшем определить итоговый результат.
На основе полученных данных выбирается оптимальное решение (аппаратная и программная часть).
При этом back-end может быть реализован в двух вариантах. Первый предполагает, что все файлы, исходный код и необходимые данные хранятся на отдельных серверах соответственно, между ними создан интерконнект на высоких скоростях, чтобы минимизировать время отклика системы.
Второй вариант предлагает для каждой функции высоконагруженной системы выделять отдельный сервер или несколько в зависимости от нагрузки. Между серверами также существует отдельно выделенная сеть, в которой включен автоматический балансировщик.
Front-end
Основная цель при формировании front-end – снизить нагрузку с back-end и перевести часть исполняемых ресурсов на рабочие станции пользователей. Для этого интерфейс highload-системы формируют под браузеры, где пользователи выполняют большую часть своих повседневных задач.
Загрузка видео, аудио и фото стараются отдать под географически распределенную сетевую инфраструктуру (CDN). Она автоматически распределяет нагрузку и оптимизируют доставку пакетов до конечной точки.
Демо-стенд (Прототип)
После тщательного анализа структуры проекта, как правило, собирается демо-вариант будущей highload-архитектуры. Клиент сможет увидеть общую концепцию на практическом примере, чтобы оценить ее реализацию.
Создание демо-стенда занимает 2-3 дня. Разработчики со своей стороны смогут оценить наиболее уязвимые места высоконагруженной системы, найти ошибки и провести тестирование под максимальную нагрузку.
Если по каким-либо причинам прототип вызвал у клиента негативно впечатление, то демо собирается в другом варианте.
Архитектура
Разработчики создают полноценную архитектуру будущего проекта. Для программистов и инженеров проектируется четкое ТЗ в виде блок-схем и иллюстраций.
Данный шаг поможет избежать ошибок при выборе конфигурации аппаратной части и создании программного кода.
Создание архитектуры привязывается в географическому расположению клиента. Например, если у заказчика несколько офисов, находящихся на большом расстоянии друг от друга, то имеет смысл строить гео-распределенный кластер.
После создания highload-архитектуры проекта, она обязательно отправляется клиенту на согласование.
Тестирование и отладка
Данный этап необходим прежде всего разработчикам, чтобы провести анализ созданной highload-системы на предмет багов и системных ошибок.
Существует несколько вариантов тестирования:
- Test Cases. Это набор условий, которые должны выполняться при выборе требования клиента. Как правило, составляется таблица соответствия, по которой тестируются необходимые требования.
- Unit Test. Создан специально для проверки модулей высоконагруженной системы. Его задача для каждого изменения проводить проверку нетривиальным методом.
- Selenium. Тестирование функциональности продукта, то есть проверка highload-системы решать те задачи, под которые она создавалась.
- Beta. Последний этап тестирования, когда вышеуказанные методы были успешно сданы. Для отладки привлекаются пользователи, которые проводят проверку высоконагруженной системы в «боевых» условиях.
На каждом этапе применяется внутренняя система мониторинга, которая пишет логи для каждого этапа тестирования. Это необходимо для финальной проверки перед сдачей highload-системы клиенту.
По логам проверяются ошибки, которые были выявлены на этапе тестирования. Если какие-либо ошибки не были исправлены, то они переписываются и проводится повторное тестирование, которое привело к появлению данной проблемы.
Эксплуатация
Прежде всего необходимо определиться, где будет происходить эксплуатация высоконагруженной системы – на площадке разработчиков или клиента. В каждом из вариантов есть свои преимущества и недостатки, поэтому сначала данный этап обсуждается с клиентом.
По итогу переговоров с заказчиком составляется отдельное четкое ТЗ на эксплуатацию проекта. В нем прописываются скорость загрузки, допустимый процент ошибок, сроки реализации и т. д. Рекомендуется оценить надежность и отказоустойчивость каждой площадки размещения перед выбором окончательного варианта.
Отдельно прописываются сервисные работы со стороны разработчика. К ним относятся обновление встроенного программного обеспечения, замена аппаратных компонентов, обновление операционных систем и др.
Обратитесь к нам для создания таких систем
Если вы хотите создать собственную высоконагруженную систему, то наша компания готова взять данный проект под ключ. Мы тщательно обсуждаем ТЗ на архитектуру highload-систем и сразу собираем прототип для презентации заказчику. В процессе тестирования продукта вы сможете внести корректировки или расширить техническое задание.
Используем разные методы проектирования в зависимости от требований. В нашей команде работают высокопрофессиональные разработчики и инженеры, которые готовы проконсультировать вас по любому пункту ТЗ.
Обратитесь к нашим специалистам и сэкономьте время и финансовые затраты, получите безупречно работающую высоконагруженную систему со своими сервисами.