Как обеспечить масштабируемость облака в 2023 году

Опубликовано: 2023-01-11

Содержание

  1. Что такое масштабируемость?
    • Почему нужно уделять особое внимание масштабируемости?
  2. Типы масштабирования
    • Вертикальная масштабируемость — увеличение масштаба
    • Горизонтальное масштабирование — масштабирование
    • Диагональное масштабирование
  3. Как обеспечить максимальную масштабируемость
    • Провести балансировку нагрузки
    • Перейдите к автоматической масштабируемости веб-сервисов
    • Контейнеры микросервисов, кластеризация
    • Реализовать кэширование
    • Используйте сервисы CDN
  4. Как мы решаем проблемы масштабирования?
  5. Заключение
Содержание

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

Все эти процессы оптимизации системы определяются единым понятием — масштабированием — одной из ключевых специализаций специалистов DevOps. Что такое масштабируемость и, главное, как ее обеспечить в случае вашего конкретного бизнеса, когда большая часть операционных мощностей сосредоточена в облаке? Давайте углубимся в тему.

Облачная масштабируемость Источник изображения: Static.bluepiit

Что такое масштабируемость?

Каково окончательное определение масштабируемости? По сути, это возможность увеличить производительность системы наиболее рациональным способом. На практике это обычно достигается путем сложения вычислительных ресурсов, как аппаратных, так и программных. Однако переписать существующий код в большинстве случаев — довольно радикальное решение, поэтому в 9 из 10 случаев компании останавливаются на увеличении количества серверов или наращивании возможностей существующей серверной системы.

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

Если вы хотите проверить, насколько эффективно работают ваши сетевые протоколы и ресурсы веб-сервера, вы можете использовать любую доступную утилиту нагрузочного тестирования (например, siege), которая будет эмулировать искусственный приток пользователей на ваш сервер с тоннами запросов. Вам просто нужно отслеживать два ключевых параметра: n — определяет общее количество запросов и c — указывает количество одновременных запросов.

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

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

Почему нужно уделять особое внимание масштабируемости?

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

Типы масштабирования

К основным и наиболее распространенным типам процедур масштабирования относятся:

Вертикальная масштабируемость — увеличение масштаба

Вертикальное масштабирование Источник изображения: Дзон

Вертикальное масштабирование — это когда общие бизнес-мощности растут за счет повышения производительности внутренних ресурсов сервера — ЦП, памяти, дисков и сетевых мощностей. Сервер в своем базовом виде остается без изменений.

Горизонтальное масштабирование — масштабирование

Горизонтальное масштабирование Источник изображения: Дзон

В этой области происходит настоящая борьба — масштабирование против масштабирования. Что лучше?

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

Диагональное масштабирование

Это относительно новый термин, который придумал Джон Оллспоу — автор и соучредитель Adaptive Capacity Labs. Таким образом, диагональное масштабирование объединяет лучшее из двух миров и определяет вертикальное масштабирование узлов с горизонтальным масштабированием, которые уже реализованы в существующей серверной инфраструктуре.

Как обеспечить максимальную масштабируемость

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

Провести балансировку нагрузки

Балансировка нагрузки подразумевает комплекс усилий по распределению вычислительных сетевых процессов между несколькими программно-аппаратными ресурсами (дисками, процессорами или отдельными серверами), сосредоточенными в одном сокете или кластере. Основная цель здесь — оптимизировать расходы вычислительных мощностей, повысить производительность сети, сократить временные затраты при обработке сетевых запросов, а также снизить вероятность того, что конкретный сервер ответит на DDoS в какой-то чудесный момент.

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

Процедура балансировки реализуется с помощью целого набора алгоритмов и методов, каждый из которых соответствует следующим уровням модели OSI: сетевому, транспортному и прикладному. В практической реализации это требует использования нескольких физических серверов вместе со специализированным программным обеспечением, подобным веб-серверу Nginx.

Перейдите к автоматической масштабируемости веб-сервисов

Автомасштабирование — это особый подход к динамическому масштабированию в контексте облачных сервисов (то есть масштабирование, подразумевающее настройку вычислительных мощностей в соответствии с объемом сетевой нагрузки). В частности, пользователям сервисов, включающих процедуры автомасштабирования (наиболее известные из которых — Amazon Web Service, Google Cloud Platform и Microsoft Azure), при необходимости предоставляются дополнительные виртуальные машины (которые могут быть автоматически исключены из кластера или контейнера). по мере стабилизации трафика и интенсивности запросов).

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

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

Контейнеры микросервисов, кластеризация

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

Реализовать кэширование

При горизонтальном масштабировании простое кэширование памяти не может быть реализовано сразу для нескольких узлов, поэтому его необходимо оптимизировать. В частности, такие хранилища, как Memcached или Redis, можно использовать для комбинированного распределения данных кеша между итерациями приложения. Эти инструменты работают по разным алгоритмам, поэтому объем кэшируемых данных уменьшается. Кэш-хранилища также хорошо защищены от ошибок репликации и хранения данных.

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

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

Используйте сервисы CDN

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

Как вариант, CDN может быть убыточным решением, если ваша ЦА, несмотря на широкое территориальное распространение, имеет локализации с концентрацией определенных пользователей. Т.е. предположим, что около 60% вашего ТА базируется в США, 30% в Лондоне, а остальные 10% разбросаны по всей планете. В таком случае использование CDN будет рациональным решением только для последних 10% (тогда как в других локациях потребуется установка новых серверов).

Как мы решаем проблемы масштабирования?

В настоящее время среди наших ярких примеров масштабирования, проводимого штатными экспертами, можно назвать построение высокомасштабируемой архитектуры для таких общедоступных облачных хранилищ, как AWS, Microsoft Azure, Google Cloud и Digital Ocean. Мы используем автоматизированные сценарии развертывания среды с помощью Terraform — системы нового поколения для создания, управления и настройки облачной инфраструктуры. Мы основываем наши кластеры серверов на программном обеспечении автоматического масштабирования Kubernetes и вспомогательной технологии контейнеризации Docker.

Заключение

масштабируемость в среде облачных вычислений Источник изображения: CDN.Lynda

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