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

401 000обновлений профиля клиента в месяц на одном из наших проектов
7 000регистраций пользователей в месяц
400 млнхранимых записей в базе данных
Подробнее
Награды 6 наград 4 номинации в UI/UX
рейтинги Профиль Evergreen — Clutch Рейтинг Evergreen — CMSMagazine Профиль Evergreen — Behance Все Все

Высоконагруженный проект — система, рассчитанная на работу с постоянной или пиковой высокой нагрузкой. Обычно это системы, которые обрабатывают тысячи RPS (запросов в секунду) и оперируют с БД в сотни гигабайт.

Подробнее о практических аспектах разработки высоконагруженных сайтов читайте тут. Ниже мы будем говорить о том, какие виды высоконагруженных проектов существуют и какие критерии нужно учитывать при их создании.

Evergreen имеет опыт проектирования и разработки высоконагруженных систем, и мы будем рады помочь вам с вашим новым проектом.

Высоконагруженные проекты

Обычно к высоконагруженным проектам относят социальные сети, высоконагруженные API, платёжные системы, BigData-системы, распределенные системы, realtime-API и пр.

Сама по себе высокая нагрузка — только термин определяющий состояние проекта, системы в определенный период времени. Интерес обычно представляет не сама нагрузка, а способность системы справиться с ней – быть устойчивой к высокой нагрузке. Происхождение высокой нагрузки может быть четырех видов:

  • пользовательская;
  • внутренняя;
  • точечная;
  • комплексная.

Пользовательская нагрузка самая очевидная: она обозначает количество пользователей одновременно работающих/нагружающих определенную систему.

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

Например, сайт при размере базы данных 100MB и 200GB будет работать по-разному, хотя количество одновременных пользователей будет одинаково. Во втором случае при неправильно подобранных компонентах произойдут торможения сайта: нагрузка, созданная изнутри объемом данных такова, что аппаратная составляющая просто не справится с обработкой базы данных.

Точечная нагрузка возникает, когда происходит нагрузка только на одну подсистему.

Комплексная нагрузка возникает, когда нагружено сразу несколько (две и больше) систем, и перегруз другой не зависит от первой.

Критерии высоконагруженного проекта

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

  • количество одновременных запросов, пиковых, асинхронных нарастающих запросов по сетевым протоколам http(s), tcp/ip, udp, socket;
  • объем обрабатываемых данных в базах данных;
  • объем передаваемой информации в запросе. 

Например, сейчас высоконагруженными можно считать проекты, которые должны выдерживать постоянную или точечную нагрузку около 8000 rps без дополнительный манипуляций со стороны DevOps инженеров. При этом проекты, в которых общий объем базы данных превышает 200GB, тоже будет считаться высоконагруженными. Равно как и проекты, в которых между подсистемами “перемещаются” запросы объемом в 1GB каждый.

 

База данных для высоконагруженных проектов

Для разработки таких проектов мы в Evergreen используем в первую очередь облачные решения стека AWS. 

Размещать базы данных высоконагруженных проектов в облаке проще, поскольку при возникновении проблем с производительностью всегда можно моментально увеличить объем доступных ресурсов (процессор, память, диск), оптимизировать/устранить узкие места и затем также быстро откатить количество ресурсов до приемлемого уровня.

С проектами on-premise в этом плане сложнее: всегда нужно заниматься оптимизацией и контролем показателей, поскольку резко увеличить количество ресурсов, как в случае с размещение в облаке, не выйдет.

С одной стороны, высоконагруженная (Highload) система постоянно готова к масштабированию. Например, когда мы имеем адекватное, пропорциональное соотношение процессорного времени и количества запросов, которое база данных (БД) обрабатывает за единицу времени. С другой стороны, система готова к проведению работ по оптимизации.  

Если решение выбрано на собственных серверах, то SSD диски для сервера базы данных должны быть не просто “хоть какими-то” (хостинг провайдеры часто продают ssd хостинги с дисками для домашних ПК, которые плохо справляются с работой 4K блоков, и маленьким IOPS). Диски, сети и горячая замена оборудования всегда остаются узким местом в идеально сложенной хайлоад системе, поэтому нужно максимально аккуратно выбирать их с самого начала.

Для нагруженной архитектуры (НА) очень важны оптимальный выбор СУБД, построение запросов к БД, их оптимизация, выбор правильных типов данных и их длины. У нас в Evergreen есть опыт работы с различными реляционными (Galera Cluster for MySQL, PostgreSQL и т.п.) и объектными (MongoDB, Elasticsearch, AWS Document DB и т.п.) СУБД.  Также у нас есть опыт работы с системами кеширования и балансировки нагрузки.

Управление разработкой высоконагруженных проектов

Чтобы не создавать себе проблем на этапе разработки, нужно архитектурно закладывать основные паттерны, свойственные нагруженной архитектуре (НА). Например, партиционирование данных (разбивка однотипных данные между нодами баз данных) и т.п. 

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

Вашей системе приходится постоянно работать с большой нагрузкой, и она не справляется с обработкой всех входящих запросов? Закажите разработку высоконагруженного проекта в Evergreen. Просто свяжитесь с нами — и мы с удовольствием проконсультируем вас и поможем решить стоящие перед вами задачи.

 

Заказать проектирование высоконагруженных систем

Расскажите нам, какой проект вы хотели бы создавать или развивать. Чувствуйте себя свободно - мы рады проконсультировать по любому профессиональному вопросу и сделаем это абсолютно бесплатно, просто позвоните нам или заполните форму.