Ниже мы будем говорить о том, какие виды высоконагруженных проектов существуют и какие критерии нужно учитывать при их создании. Evergreen имеет опыт проектирования и разработки высоконагруженных систем, и мы будем рады помочь вам с вашим новым проектом.
Обычно к высоконагруженным проектам относят социальные сети, высоконагруженные API, платёжные системы, BigData-системы, распределенные системы, realtime-API и пр.
Сама по себе высокая нагрузка — только термин определяющий состояние проекта, системы в определенный период времени. Интерес обычно представляет не сама нагрузка, а способность системы справиться с ней – быть устойчивой к высокой нагрузке. Происхождение высокой нагрузки может быть четырех видов:
Пользовательская нагрузка самая очевидная: она обозначает количество пользователей одновременно работающих/нагружающих определенную систему.
Внутренняя нагрузка происходит из-за подсистемы или модуля системы. Другими словами, она возникает когда появляется "узкое горлышко", которое забивается при росте числа запросов из-за неспособности пропустить их через подсистему и обработать запрос. Таким образом происходит переполнение запросов. Другой причиной внутренней нагрузки может быть большой объем данных, с которыми работает система добавляет нагрузку при обработке данных.
Например, сайт при размере базы данных 100MB и 200GB будет работать по-разному, хотя количество одновременных пользователей будет одинаково. Во втором случае при неправильно подобранных компонентах произойдут торможения сайта: нагрузка, созданная изнутри объемом данных такова, что аппаратная составляющая просто не справится с обработкой базы данных.
Точечная нагрузка возникает, когда происходит нагрузка только на одну подсистему.
Комплексная нагрузка возникает, когда нагружено сразу несколько (две и больше) систем, и перегруз другой не зависит от первой.
С повышением мощностей серверов, каналов связи и снижением цены на них, абсолютные значения критериев меняются. При этом сами критерии можно считать +/- стандартными:
Например, сейчас высоконагруженными можно считать проекты, которые должны выдерживать постоянную или точечную нагрузку около 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. Просто свяжитесь с нами — и мы с удовольствием проконсультируем вас и поможем решить стоящие перед вами задачи.
Заказать проектирование высоконагруженных систем
Расскажите нам, какой проект вы хотели бы создавать или развивать. Чувствуйте себя свободно - мы рады проконсультировать по любому профессиональному вопросу и сделаем это абсолютно бесплатно, просто позвоните нам или заполните форму.