Где и как хостить высоконагруженный WEB-проект в 2021 году

Высоконагруженными (highload) интернет-проектами считаются сайты, приложения и системы, способные обслужить на порядок больше пользовательских запросов, чем обслужили бы аналогичные проекты с точно такими же ресурсными конфигурациями серверов и стандартными (дефолтными) настройками. Иными словами, высокие нагрузки для любой системы начинаются там, где серверы начинают работать медленно, страницы перестают загружаться, соединения обрываются, а приложения начинают тормозить или утилизируют 100% серверных ресурсов.

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

Какие бывают нагрузки на систему

Нагрузка на сайт или приложение — это, прежде всего, количество запросов пользователей в секунду (PRS). В идеале система должна в течение некоторого количества времени выдерживать двойные и тройные всплески посещаемости. Имеет значение и ресурсоёмкость запросов: например, обработка графического контента с использованием нейросетей требует гораздо больше ресурсов, чем показ заранее оптимизированных фотографий товара на сайте.

Нагрузку дают и другие процессы системы, активно использующие её ресурсы, например:
  • кэширование данных, а также «прогрев» и «сброс» кешей
  • обработка запросов к базам данных (обычно это самая большая нагрузка)
  • обработка очередей плановых заданий на шине данных
  • запись и чтение логов от приложений, web-серверов, баз данных
  • выполнение дисковых операций с большим количеством файлов
  • полнотекстовый поиск
Какой хостинг и обслуживание подойдут для таких требований?

Виды хостинга и типы обслуживания highload-проектов

Хостинг (hosting) — это услуга предоставления в аренду вычислительных ресурсов, оперативной памяти и дискового пространства для размещения сайтов клиента на серверах провайдера (хостера) с постоянным доступом к интернету. В услугу входит и определённая поддержка некоторых сервисов (набор и степень поддержки зависит от вида хостинга). Также хостингом называют услугу размещения оборудования клиента в центрах обработки данных провайдера с подключением его к высокопропускным каналам связи (colocation).

Виртуальный хостинг (Shared)

Ресурсы одного сервера равномерно делятся на тысячи хостируемых сайтов, которые используют один экземпляр работающего ПО. Это самый экономичный, иногда бесплатный, но и ненадёжный вариант размещения проектов. Он не подходит для высоконагруженных проектов в первую очередь тем, что приходится конкурировать за ресурсы, а также тем, что нельзя устанавливать своё ПО и настраивать работающее ПО.

Развёртывание и обслуживание: не предусмотрено — обеспечивается командой системных администраторов провайдера.

Виртуальный выделенный сервер (VPS или VDS)

Это виртуальная машина (ВМ) в аренду, которая находится в облаке. Выделенная она потому, что хостер предоставляет вам в пользование не весь железный сервер или несколько серверов, а определённую вами часть ресурсов физических серверов, объединённых с помощью технологий виртуализации. Так как остальные части оборудования предоставляются для хостинга другим пользователям, этот вариант больше подходит для относительно небольших проектов. Однако услуга «виртуальный выделенный сервер» довольно гибкая и она может подойти под некоторые даже крупные проекты, поэтому рассмотрим этот вариант.

VPS (virtual private server)

Виртуальный частный сервер. Ресурсы сервера резервируются под каждый проект и не пересекаются с другими виртуальными серверами, установленными на той же машине. Используется технология виртуализации на уровне операционной системы (OpenVZ, Virtuozzo, VDSmanager). Это означает, что на каждый VPS можно установить свою копию ОС, но только той, которая изначально установлена на физический сервер — это Linux. Параметры ОС изменять нельзя, файловая система одна, уровень приватности невысокий, поскольку администратор имеет доступ к файлам. Зато можно устанавливать и настраивать «под себя» разное ПО.

VDS (virtual dedicated server)

Виртуальный выделенный сервер. Аппаратные ресурсы сервера гарантированно закрепляются за проектом. Технология виртуализации на уровне ниже ОС (XEN, KVM, Hyper-V, VMware). Это значит, что каждый VDS имеет собственную ОС, есть полный доступ ко всем процессам сервера. Дисковое пространство можно задействовать под любой тип файловой системы. Высокий уровень приватности, поскольку доступ к файлам есть только у владельца виртуального сервера.

Виртуальный сервер часто более экономичен для большого проекта, чем железный сервер, поскольку здесь возможно быстрое масштабирование под пиковые нагрузки и нет простоя мощностей. То есть ресурсы можно наращивать, а производительность изменять на время под конкретные ресурсоёмкие задачи, а затем откатывать обратно или даже уменьшать. Актуально, например, при наплыве пользователей интернет-магазина в Чёрную пятницу один раз в году, или при обучении моделей искусственного интеллекта для аналитики в Big Data.

Развёртывание и обслуживание: команда опытных квалифицированных администраторов провайдера (managed service).

Реальный выделенный сервер (dedicated или bare-metal)

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

Развёртывание и обслуживание: команда собственных системных администраторов и инженеров или managed service в качестве отдельной услуги.

Облачный хостинг (Cloud hosting)

Облачный хостинг — это когда в аренду предоставляется несколько VPS или VDS. Это отдельная инфраструктура, выстроенная на базе постоянно работающих серверов и внутренней и внешней сети провайдера.

Облако (Cloud) — это гибкомасштабируемые серверы с оплатой за фактически потребляемые ресурсы. Облачные сервисы сочетают в себе в виртуальные серверы, объектные хранилища, плавающие IP адреса, межсетевые экраны, балансировщики нагрузки и другие готовые облачные компоненты под любые задачи пользователя. Это PaaS-сервисы — платформа как сервис.

Облака бывают:
  • Частные — облачная IT-инфраструктура принадлежат компании и располагается на её собственном или арендованном железе в собственном дата-центре где ресурсы, возможности масштабирования и бесперебойность ограничены возможностями оборудования и помещения.
  • Публичные — IT-инфраструктура как сервис (Infrastructure-as-a-Service, IaaS) предоставляется клиенту в аренду IaaS-провайдером, который может обеспечить гибкое и почти неограниченное управление ресурсами, бесперебойность за счёт резервных копий на разных гипервизорах, автоматическую миграцию серверных ресурсов при отказах своего оборудования с гарантированным уровнем SLA и безопасность. И в целом IaaS-провайдер отвечает за всё.
  • Выделенные - облачная IT-инфраструктура как сервис предоставляется клиенту в аренду IaaS-провайдером, но при этом все облачные серверы клиента находятся на выделенных мощностях IaaS-провайдера: это выделенные гипервизоры, выделенные дисковые хранилища и даже выделенные коммутаторы. В данной схеме полностью исключена конкуренция за любые виды аппаратных (облачных) ресурсов, а также из-за физической изоляции между оборудованием полностью исключена возможность эксплуатации уязвимостей через доступ между гостевыми ОС, что особенно важно при соблюдении требований 152-ФЗ. Зачастую IaaS-провайдер предоставляет выделенные облака в специальных аттестованных и защищенных контурах.
  • Гибридные — частично инфраструктура размещена в частном облаке или на железе компании (традиционная), а частично — и в публичном облаке.
Развёртывание и обслуживание инфраструктуры осуществляется собственными силами либо managed service.

Своё оборудование в дата-центре (colocation)

Колокэйшн — это размещение сервера клиента в ЦОДе провайдера с подключением к высокоскоростным каналам связи. Услуга подходит для требовательных к ресурсам высоконагруженных проектов, на которых необходимо контролировать всё до уровня «железа», чтобы использовать ресурсы оборудования максимально эффективно.

Развёртывание и обслуживание - команда собственных системных администраторов и инженеров или managed service.

Рекомендации Git In Sky по хостингу для highload-проектов

Где хостить

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

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

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

Как обслуживать

Администрировать highload-проекты в облаках силами штатных специалистов хостинг-провайдера невозможно — это слишком большой объём узкоспециализированной работы. Все хостеры для таких заказов привлекают managed service-партнёров, лучшие из которых работают сразу с несколькими провайдерами и знают все тонкости миграции приложений в облака, их развёртывания и поддержки. Однако как выбрать managed service providers из всего пула подрядчиков, которых может предложить облачный провайдер для администрирования вашего высоконагруженного проекта? Есть критерии выбора.

Как подобрать managed service для поддержки высоконагруженного проекта

Специалисты по поддержке highload-проектов должны понимать: как будет работать инфраструктура вашего проекта и какая архитектура будет у приложений и сервисов; как будет балансироваться нагрузка; каким должен быть мониторинг; как поддерживать отказоустойчивость; какие возможны шаги по горизонтальному и вертикальному масштабированию, чтобы приложения выдержали нагрузку из миллионов посетителей в день; и многое другое. Следующие критерии помогут понять, насколько компетентны предлагаемые вам специалисты:
  • Опыт. Сколько лет команда инженеров оказывает услуги поддержки крупных проектов (лучше, чтобы не менее пяти)? У каких серьёзных компаний они официальные managed service-партнёры? Чем больше опыт, тем вероятней, что команда эффективно выполнит свою работу в нужные вам сроки.
  • Стек технологий. Команда должна иметь в своем арсенале технологический стек для подготовки серверов к работе на высоких нагрузках. Причем, инженеры компании должны обладать опытом использования данного стека на реальных проектах, а не просто исследовать поведение приложений на тестовых стендах. Генерируемый на нагрузочном тестировании трафик для тестового стенда сильно отличается от реального трафика пользователей, и приложение может легко справляться с большим объемом однотипных запросов на нагрузочном тесте, при том что живые пользователи могут создать совсем иной профиль нагрузки. И на нагрузочных тестах к профилю нагрузки можно лишь приблизиться, но точно повторить его можно только с использованием множества ботов или нейросетей и машинного обучения.

    В стек технологий также входят инструменты для превентивного мониторинга ресурсных отказов, утилиты автоматизированного управления конфигурациями серверов; средства профилирования нагрузки на БД, средства анализа и оптимизации SQL запросов; различные утилиты приоритезации процессов и трафика; специальное ПО для профилирования приложений (например, FlameGraph).
  • Формирование стоимости. Стоимость работ команды поддержки проекта должна быть прозрачной для клиента. Например, это могут быть утверждённые тарифы. Но сам процесс ценообразования должен быть гибким и учитывать разные факторы, влияющие на стоимость: компетенции конкретных специалистов, количество часов, необходимое для выполнения каждой задачи, достаточные объемы консультирования для того, чтобы разрешить проблемы с недостаточной осведомленностью всех участников процесса и другие нюансы.
  • Кейсы, схожие по тематике с вашим проектом или из той же ниши бизнеса (медицина, ритейл, e-commerce, образование, государственные структуры). Также у команды в принципе должны быть кейсы с поддержкой большой инфраструктуры, например, на несколько сотен серверов. Возможно, конкретно с вашей тематикой они не знакомы в работе, но опыт поддержки крупных проектов и упорядочивания конфигураций наверняка будет успешно применим и к вашему.
  • Общий язык с командой подрядчика. Когда заказчик взаимодействует с инженерами поддержки, сторонам не всегда удаётся общаться на одном языке, поскольку это люди из разных сфер. Поэтому в команде managed service-специалистов должны быть компетентные менеджеры с техническим бэкграундом, способные стать медиаторами в переговорах. Иначе риски проекта сильно возрастают от возникающего непонимания.

Не пропустите последние новости. Подписывайтесь!
Made on
Tilda