Rambler's Top100
Статьи
Андрей КИСЕЛЕВ  28 декабря 2020

Как обеспечить работоспособность высоконагруженной системы

Высоконагруженные системы обрабатывают большие объемы данных и потому представляют значительную ценность для бизнеса. Сбои и другие проблемы качества их работы влекут за собой дополнительные затраты для компаний. 

Так, по оценкам Gartner, потери крупных компаний от простоя критических систем достигают $300 тыс. в час.

Что же такое высокая нагрузка

Высокая нагрузка – понятие относительное. Для разных систем показатели могут быть разными. Если провести аналогию с обычным архивом или библиотекой, то вместо серверов, пакетов разработчика и прочего можно представить посетителя-человека, каталог и полки с книгами. В обычный день библиотекарь может подойти к каждому, помочь выбрать нужную литературу, затем выдать и забрать книги. Два-три человека могут выполнять такую работу достаточно оперативно. Но в период сессии, скажем, на библиотеку «нападают» сразу сотни студентов. Если библиотекари по обычной схеме общаются с каждым, то только 5% читательских запросов будут обработаны вовремя, образуется очередь, могут быть сданы некондиционные, испорченные книги, библиотека понесет убытки. То же самое относится и к информационной системе – если она не справляется с возросшим количеством запросов, значит, пришло время что-то менять.

Вот несколько определений высокой нагрузки от ИT-специалистов и пользователей, которые разбираются в теме. Итак, нагрузка высокая:
  • если традиционных подходов к работе ИT-инфраструктуры недостаточно;
  • для обслуживания запросов одного сервера не хватает;
  • возникающие проблемы не могут быть решены типовыми средствами.
Можно сказать, что высоконагруженная система – это система, которая имеет возможности для масштабирования и достаточно ресурсов для работы с текущими нагрузками. 

Создание высоконагруженных систем

Если вы решили создать приложение с высокой нагрузкой, важно рассмотреть следующие аспекты.

Доступность. Время безотказной работы напрямую связано с репутацией и производительностью многих компаний.

Производительность. Скорость работы системы влияет на удовлетворенность сотрудников своим трудом.

Надежность. Один и тот же запрос всегда должен возвращать пользователям одни и те же данные, чтобы они были уверены: если какие-либо данные записаны/внесены в систему, то в дальнейшем можно рассчитывать на их неизменяемость и сохранность.
Масштабируемость. Востребованными могут быть различные параметры системы: сколько дополнительного трафика она может обрабатывать, насколько легко увеличить емкость хранилища, сколько транзакций можно обрабатывать сверх текущих возможностей.

Управляемость. Следует обеспечить легкую диагностику и возможность понять суть проблемы при ее возникновении, простое обновление или модификацию.

Стоимость. Включает в себя расходы на аппаратное и программное обеспечение. Однако нужно учитывать и другие параметры, необходимые для развертывания и обслуживания системы: время, затрачиваемое разработчиками на сборку системы, обучение персонала и т.д.

Высокая нагрузка может порождаться большим количеством активных пользователей, транзакций, объемом данных или сложными алгоритмами их обработки, а также фоновыми процессами.

Устойчивости системы к высокой нагрузке нелья добиться написанием некоего кода, который копируется-вставляется, после чего все «летает». Такую устойчивость обеспечивают: проектирование и реализация структуры метаданных и алгоритмов с учетом обработки больших объемов данных/интенсивности работы с системой, подбор оборудования, соответствующая настройка ОС и ПО, регламенты обслуживания, непрерывный мониторинг показателей работы системы, использование специализированных средств (например, механизмов копий баз данных и дата-акселератора), снижение доли универсальных решений в пользу достижения высоких показателей производительности системы. 

Ключевые источники проблем для высоконагруженных систем – объем данных, их корректировка, поиск, обработка и анализ, информационное моделирование, сложность запросов и скорость изменений. Поэтому при проектировании таких систем важно учитывать возможности аппаратного комплекса, в том числе с точки зрения масштабирования, доступности и надежности, а также квалификацию команды поддержки, юридические ограничения и пр. Кастомизированные механизмы нужно создавать с учетом стандартов разработки для обеспечения максимальной производительности критичных функций системы. Кроме того, нужно полностью осознавать связанные со сбоями в работе системы риски и их приемлемость для компании.

Следующим этапом будет попытка ответить на ряд вопросов:
  • как обеспечить правильность и полноту данных даже в случае сбоев;
  • как поддерживать высокую производительность приложений для пользователей системы;
  • как увеличить масштаб в случае роста нагрузки и т.д.
Правильная эксплуатация

Надежность высоконагруженной системы, т.е. ее способность продолжать нормальную работу даже в случае возникновения проблемы, не в последнюю очередь определяется эксплуатацией. Здесь необходимо упомянуть использование технологий кластеризации для обеспечения высокой доступности системы, политику резервного копирования данных, а также наличие регламентов эксплуатации, обслуживания и восстановления после сбоев. Хорошо продуманные регламенты управления сбоями должны включать в себя простое пошаговое руководство по восстановлению системы после практически любого возможного сбоя.

Так, в крупных центрах обработки данных аппаратные сбои (нарушения электропитания, отказы жестких дисков или оперативной памяти) происходят постоянно. Одним из способов решения проблемы является создание распределенной высоконагруженной архитектуры. Еще один способ предотвращения сбоев – повышение уровня резервирования отдельных компонентов системы для снижения частоты отказов (установка резервного источника питания, RAID-массива дисков с резервированием и т.д.). Когда один из компонентов выходит из строя, резервный компонент берет на себя его функциональность. Таким образом полностью избежать сбоя невозможно, но в большинстве случаев вариант вполне приемлем, поскольку можно восстановить систему из резервной копии за короткое время.

Если говорить о глобальном резервировании, то все правила взаимодействия между серверами переносятся на дата-центры – необходимо иметь запас прочности сети ЦОДов, чтобы продолжать работу с потерей одного узла без значительного ущерба для качества предоставляемых услуг.

Для обеспечения надежности системы рекомендуется применять следующие подходы:
  • отделить те части системы, которые влияют на работу системы, от частей, которые наиболее подвержены человеческих ошибкам;
  • реализовать все формы тестирования, включая модульное, комплексное, ручное тестирование, пентест, а также нагрузочное тестирование – контроль влияния доработок системы на производительность;
  • разработать инструменты для восстановления системы в случае сбоя в кратчайшие сроки, чтобы минимизировать воздействие;
  • внедрить систему показателей, мониторинга и протоколирования в качестве средства для диагностики ошибок и выяснения причин сбоев.
Необходимо помнить, что система масштабируема настолько, насколько эффективно масштабируется ее самый слабый компонент, поэтому следует постоянно искать в системе узкие места. Разрабатывайте высоконагруженную систему с учетом будущего наращивания и отслеживайте все, что происходит с оборудованием, с помощью хорошо реализованной системы мониторинга компонентов системы. 

Андрей Киселев, эксперт по созданию высоконагруженных ERP-систем, КРОК
Заметили неточность или опечатку в тексте? Выделите её мышкой и нажмите: Ctrl + Enter. Спасибо!