Вертикальное и горизонтальное масштабирование приложений
Вертикальное масштабирование — scaling up — увеличение количества доступных для ПО ресурсов за счет увеличения мощности применяемых с серверов.
Горизонтальное масштабирование — scaling out — увеличение количества нод, объединенных в кластер серверов при нехватке CPU, памяти или дискового пространства.
И то и другое является инфраструктурными решениями. Они требуются в разных ситуациях когда веб проект растет.
Для примера можно рассмотреть сервера баз данных. Для больших приложений это всегда самый нагруженный компонент системы.
Возможности для масштабирования для серверов баз данных определяются применяемыми программными решениями. Чаще всего это реляционные базы данных (MySQL, Postgresql) или NoSQL (MongoDB, Cassandra и др).
Горизонтальное масштабирование для серверов баз данных при больших нагрузках значительно дешевле
Веб-проект обычно начинают на одном сервере, ресурсы которого при росте заканчиваются.
- перенести базу на более мощный сервер
- добавить еще один сервер небольшой мощности с объединить машины в кластер
MySQL является самой популярной RDBMS и, как и любая из них, требует для работы под нагрузкой много серверных ресурсов. Масштабирование возможно, в основном, вверх. Есть шардинг (для его настройки требуется вносить изменения в код) и репликация, которая может быть сложной в поддержке.
Вертикальное масштабирование
NoSQL масштабируется легко. С, например, MongoDB будет значительно выгоднее материально масштабироваться вертикально. При этом не потребует трудозатратных настроек и поддержки получившегося решения. Шардинг осуществляется автоматически.
Таким образом с MySQL нужен будет сервер с большим количеством CPU и оперативной памяти, такие сервера имеют значительную стоимость.
Горизонтальное масштабирование
С MongoDB можно добавить еще один средний сервер и полученное решение будет стабильно работать давая дополнительно отказоустойчивость.
Scale-out или горизонтальное масштабирование является закономерным этапом развития инфраструктуры. Любой сервер имеет ограничения и когда они достигнуты или когда стоимость более мощного сервера оказывается неоправданно высокой добавляются новые машины. Нагрузка распределяется между ними. Также это дает отказоустойчивость.
Добавлять средние сервера и настраивать кластеры нужно начинать когда возможности для увеличения ресурсов одной машины исчерпаны. Или когда приобретение сервера мощнее оказывается невыгодно.
Приведенный пример с реляционными базами данных и NoSQL является ситуацией, которая имеет место чаще всего. Масштабируются также фронтэнд и бэкенд сервера.
Читайте про балансировку средствами Nginx и балансер HAPROXY.
Categories: Базы данных, Высокие нагрузки
Горизонтальное и вертикальное масштабирование | Microsoft Azure
Вводные сведения о масштабируемости баз данных при облачных вычислениях
Данные повсюду: что скрывается за понятием «масштабируемость»
Обеспечение масштабируемости базы данных — самая приоритетная задача для разработчиков современных приложений. Предположим, новое приложение становится популярным. Спрос на него возрастает от нескольких пользователей до миллионов пользователей по всему миру. На этом этапе эффективное масштабирование критически необходимо разработчикам приложений, чтобы адаптироваться к спросу и свести к минимуму время простоя.
Это обсуждение различий между горизонтальным и вертикальным масштабированием сосредоточено на способах, с помощью которых масштабируемость позволяет адаптироваться к огромным объемам разнообразных данных и управлять ими, изменяя объемы данных и шаблоны рабочих нагрузок, которые создаются в облаке, на мобильных устройствах, в социальных сетях и источниках больших данных.
Подробнее о базах данных
Сравнение горизонтального и вертикального масштабирования
На самом базовом уровне масштабируемость баз данных можно разделить на два типа:
Вертикальное масштабирование: наращивание или снижение вычислительной мощности или ресурсов баз данных по мере необходимости. Для автоматической адаптации к требованиям рабочих нагрузок применяется либо изменение уровней производительности, либо эластичные пулы баз данных.
Горизонтальное масштабирование: добавление дополнительных баз данных или разделение крупной базы данных на узлы меньшего размера с использованием секционирования данных методом сегментирования. Обеспечивает ускоренное и более удобное управление базами данных на серверах.
Подробнее о сегментировании баз данных
Вертикальное масштабирование
Вертикальное масштабирование используется, когда необходимо быстро реагировать на проблемы с производительностью, которые нельзя решить с помощью классической методики оптимизации базы данных, например изменения запросов или индексирования. Вертикальное масштабирование помогает справиться с пиками в рабочих нагрузках, когда текущий уровень производительности не может удовлетворить все требования. Вертикальное увеличение масштаба позволяет добавлять дополнительные ресурсы, чтобы легко адаптироваться к пиковым рабочим нагрузкам. Затем, если ресурсы больше не нужны, можно выполнить вертикальное уменьшение масштаба, чтобы вернуться к исходному состоянию и сократить затраты на облако.
Вертикальное масштабирование выполняется в следующих случаях:
- Рабочие нагрузки достигают определенного ограничения производительности, например ограничения, касающегося ЦП или операций ввода-вывода.
- Вам нужно быстро реагировать, чтобы устранить проблемы с производительностью, которые нельзя решить путем классической оптимизации базы данных.
- Вам требуется решение, позволяющее изменять уровни служб, чтобы адаптироваться к изменению требований к задержке.
Горизонтальное масштабирование
Разработчики приложений начинают применять горизонтальное масштабирование, если им не удается получить достаточно ресурсов для рабочих нагрузок даже на самых высоких уровнях производительности. При горизонтальном масштабировании данные разбиваются на несколько баз данных (или сегментов) между серверами. Масштаб каждого сегмента можно вертикально увеличивать или уменьшать по отдельности.
Как секционирование данных повышает масштабируемость? При вертикальном увеличении масштаба отдельной базы данных путем добавления таких ресурсов, как виртуальные машины, в конечном итоге будет достигнуто физическое ограничение оборудования. Каждая секция данных размещается на отдельном сервере, поэтому, если разделить данные на несколько сегментов, можно практически без ограничений горизонтально увеличивать масштаб системы.
Некоторые типы технологий баз данных, особенно нереляционные базы данных или базы данных NoSQL, разрабатываются с уникальными возможностями горизонтального увеличения масштаба данных путем сегментирования. Это позволяет таким базам данных управлять объемными, несвязанными, неопределенными или быстро изменяющимися данными.
Кроме того, некоторые реляционные службы баз данных (SQL), изначально предлагавшие услуги вертикального увеличения или уменьшения масштаба, начинают предоставлять интересные возможности, позволяя достичь уровня масштабируемости нереляционных баз данных. Службы гипермасштабирования, такие как Гипермасштабирование Базы данных SQL Microsoft Azure и Гипермасштабирование Базы данных Azure PostgreSQL, дают пользователям возможность быстро масштабировать хранилище до 100 ТБ, обеспечивают ориентированную на облако гибкую архитектуру, позволяя увеличивать объем хранилища в соответствии с потребностями, а также включать почти моментальные операции резервного копирования и быстрые операции восстановления баз данных за несколько минут.
Горизонтальное масштабирование выполняется в следующих случаях:
- У вас есть географически распределенные приложения, каждое из которых должно обращаться к части данных в регионе. Каждое приложение будет обращаться только к сегменту, связанному с этим регионом, не затрагивая другие сегменты.
- У вас есть глобальный сценарий сегментирования (например, балансировка нагрузки) с большим количеством географически распределенных клиентов, которые вставляют данные в выделенные им сегменты.
- Если ограничения производительности превышаются даже на самых высоких уровнях производительности службы или если ваши данные не помещаются в одну базу данных.
Автомасштабирование
Автоматическое масштабирование — это процесс автоматического и динамического согласования ресурсов с требованиями к производительности системы. По мере увеличения объема работы приложениям могут потребоваться дополнительные ресурсы для поддержки необходимых уровней производительности или удовлетворения растущих потребностей. Если потребность уменьшается и дополнительные ресурсы больше не нужны, вы можете сократить расходы на облако с помощью автоматической службы, которая отменит выделение неиспользуемых ресурсов.
Автоматическое масштабирование использует преимущества эластичности облачных сред. Это упрощает управление, уменьшая необходимость для системных операторов постоянно принимать решения о добавлении либо удалении ресурсов или проверке производительности системы.
Есть два основных способа масштабирования приложений: вертикальное и горизонтальное. Вертикальное масштабирование реже выполняется автоматически, так как при нем часто требуется, чтобы система была временно недоступна во время повторного развертывания.
Автоматическое масштабирование чаще выполняется при горизонтальном масштабировании, так как горизонтальное увеличение или уменьшение масштаба означает просто добавление или удаление экземпляров ресурса. При этом ваше приложение продолжает работу без прерывания во время подготовки новых ресурсов. Если потребность уменьшается, вы можете беспрепятственно и без простоев завершить работу ресурсов, а также отменить их выделение.
Многие поставщики облачных систем, такие как Microsoft Azure, поддерживают автоматическое горизонтальное масштабирование.
- Подробнее о быстром автоматическом масштабировании базы данных NoSQL с помощью Azure Cosmos DB
- Подробнее об обеспечении масштабируемости с помощью Базы данных SQL Azure
Часто задаваемые вопросы
Подробнее о терминах облачных вычислений
-
База данных — это любая коллекция взаимосвязанных сведений, которая хранится и упорядочивается для упрощения управления и доступа. Новые данные и типы данных создаются с головокружительной скоростью. Поэтому обеспечить упорядоченность, доступность и защиту этих данных становится непросто. Для обработки огромных объемов данных часто используются системы управления базами данных (СУБД), которые включают в себя слой средств управления.
Для адаптации к огромному объему разнообразных данных, создаваемых в облаке, на мобильных устройствах, а также в социальных сетях и источниках больших данных, разрабатываются все новые типы баз данных и технологии.
Подробнее о базах данных
-
Базы данных NoSQL, часто называемые нереляционными или not only SQL (не только SQL), —это разнообразные технологии, которые позволяют по-разному хранить данные и извлекать их из традиционной реляционной базы данных (SQL).
Базы данных NoSQL не нуждаются в предопределенной схеме и могут использовать несколько моделей данных. Это делает их чрезвычайно эффективными при обработке больших объемов неструктурированных данных и масштабировании проектов баз данных для больших данных.
Подробнее о базах данных NoSQL
-
PostgreSQL — это надежная база данных с открытым кодом, которая работает с реляционными и нереляционными запросами. Решение известно своей надежностью и способностью обеспечить целостность данных. PostgreSQL широко используется в таких сферах, как финансовые услуги, производство, государственные географические информационные системы и веб-технологии. Разработчики с помощью PostgreSQL создают приложения, а администраторы доверяют этому решению защиту данных.
Подробнее о PostgreSQL
-
Кэширование — это распространенный способ, используемый разработчиками и ИТ-специалистами для повышения производительности и масштабируемости системы. При кэшировании часто запрашиваемые данные временно копируются в быстрое хранилище данных, расположенное ближе к приложению. Если это быстрое хранилище данных находится ближе к приложению, чем исходный оригинал, кэширование может значительно улучшить время отклика для клиентских приложений путем более быстрой обработки данных. Разработчики часто создают приложения с возможностью кэширования обработанных данных, а затем перепрофилируют кэш для ускоренного обслуживания запросов (по сравнению со стандартными базами данных).
Подробнее о кэшировании
-
Сегментирование данных — это тип горизонтального секционирования данных, который позволяет разделить большую базу данных на базы данных меньшего размера, которыми проще и быстрее управлять, используя разные серверы.
Подробнее о сегментировании баз данных
-
Платформа как услуга (PaaS) — это служба от поставщика облачных служб, которая предоставляет среду по запросу для разработки, тестирования и доставки приложений, а также управления ими. Модель «платформа как услуга» упрощает и ускоряет разработчикам задачу создания веб-приложений или мобильных приложений без настройки и администрирования базовой инфраструктуры серверов, хранилища, сети и баз данных, которые необходимы при разработке.
Дополнительные сведения о PaaS
Ресурсы
Краткие руководства и учебные модули
Миграция баз данных
Облачная масштабируемость в Azure
Сравните преимущества вертикального и горизонтального масштабирования и подберите для себя комплексный подход, который соответствует вашему сценарию, в локальной, многооблачной и пограничной средах. Семейство служб баз данных Azure предлагает широкий выбор полностью управляемых реляционных баз данных, баз данных NoSQL и баз данных в памяти, объединяющих собственные компоненты и компоненты с открытым кодом, чтобы удовлетворить потребности современных разработчиков приложений.
Экономьте время и средства благодаря автоматизированному управлению инфраструктурой, в том числе решениями автоматизации для обеспечения масштабируемости, доступности и безопасности.
Выбор подходящих баз данных Azure в соответствии с вашими потребностями
Связанные продукты и услуги
Azure SQL
Семейство облачных баз данных SQL, предоставляющее гибкие возможности для миграции, модернизации и разработки приложений
Azure Cosmos DB
Быстродействующая база данных NoSQL с открытыми API-интерфейсами для любого масштаба
Azure PostgreSQL
Полностью управляемая и масштабируемая интеллектуальная среда PostgreSQL
База данных SQL Azure
Управляемая интеллектуальная база данных SQL в облаке
Управляемый экземпляр SQL Azure
Управляемый и всегда актуальный экземпляр SQL в облаке
Использование SQL Server на виртуальных машинах
Перенос рабочих нагрузок SQL Server в облако с самой низкой совокупной стоимостью владения
База данных Azure для MySQL
Полностью управляемая масштабируемая база данных MySQL
Azure Maria DB
Управляемая служба базы данных MariaDB для разработчиков приложений
Кэш Azure для Redis
Ускорьте работу приложений за счет кэширования с высокой пропускной способностью и малым временем задержки
Масштабирование без ограничений с помощью управляемых баз данных
Сосредоточьтесь на создании приложений и облегчите себе работу, а управление вашими базами данных обеспечит Microsoft Azure
Начать
Бесплатная учетная запись готова к настройке в любой момент
Начните бесплатноЧто подходит для вашего приложения?
Думайте о долгосрочной жизнеспособности
Когда спрос на ваше приложение резко возрастает, вы быстро осознаете необходимость поддерживать доступность, время безотказной работы и емкость приложения в условиях возросшей нагрузки. Вы масштабируете или масштабируете?
Другими словами, горизонтальное масштабирование или вертикальное масштабирование – правильная стратегия для вашего бизнеса?
Разница между этими двумя типами масштабирования заключается в способе добавления вычислительных ресурсов в вашу инфраструктуру. Благодаря вертикальному масштабированию («масштабированию вверх») вы увеличиваете вычислительную мощность существующих экземпляров/узлов. При горизонтальном масштабировании («масштабировании») вы получаете дополнительную емкость в системе, добавляя больше экземпляров в свою среду, распределяя нагрузку по обработке и памяти между несколькими устройствами.
Полезная аналогия для понимания этого различия состоит в том, чтобы думать о масштабировании, как если бы оно улучшало вашу машину. Вертикальное масштабирование похоже на снятие с производства вашей Toyota и покупку Ferrari, когда вам нужно больше лошадиных сил. В своем сверхбыстром автомобиле вы можете перемещаться на высокой скорости с опущенными окнами и выглядеть потрясающе. Но, хотя Феррари потрясающие, они не очень практичны — они дорогие, и, в конце концов, они могут довезти вас только до того, как у них кончится бензин (не говоря уже о том, что всего два места! ).
Горизонтальное масштабирование работает аналогичным образом в том смысле, что оно дает вам дополнительную мощность, но это не означает отказ от Toyota в пользу Ferrari. Вместо этого это похоже на добавление еще одного транспортного средства в автопарк. Вы можете думать о горизонтальном масштабировании как о нескольких транспортных средствах, которыми вы можете управлять одновременно. Может быть, ни одна из этих машин не является Феррари, но не , а из них должны быть: во всем парке у вас есть все лошадиные силы, которые вам нужны.
Почему масштабирование лучше, чем увеличение
Выбирая между горизонтальным и вертикальным масштабированием, вы также должны учитывать, что поставлено на карту при увеличении или уменьшении масштаба.
В сценарии обмена Toyota на Ferrari вы заменяете более медленный сервер на более крупный и быстрый.
Когда вы делаете это, вы ограничиваете себя, пока машина отключается для обновления. И что произойдет в будущем, когда ваш трафик снова возрастет, и вам придется повторять обновления? Существует только конечное количество раз, когда вы можете решить свою проблему, «увеличив масштаб» таким образом.
Горизонтальное масштабирование почти всегда предпочтительнее вертикального, потому что вы не столкнетесь с нехваткой ресурсов. Вместо того, чтобы переводить сервер в автономный режим на время перехода к более качественному серверу, горизонтальное масштабирование позволяет поддерживать существующий пул вычислительных ресурсов в сети, одновременно добавляя новые к тому, что у вас уже есть. Когда ваше приложение масштабируется по горизонтали, вы получаете преимущество эластичности.
Вы можете сделать именно это, когда ваша инфраструктура размещена в управляемой облачной среде. При масштабировании до облака вы получаете больше возможностей для создания и развертывания приложений.
Amazon Elastic Compute Cloud (EC2), например, действует как виртуальный сервер с неограниченной емкостью. Вы выбираете процессор, емкость хранилища, сетевые параметры и операционную систему, которые вам нужны, и настраиваете свою емкость по мере роста ваших вычислительных потребностей.
При контейнеризации приложений можно использовать Amazon Elastic Container Service (ECS) или Amazon Elastic Kubernetes Service (EKS). Вы можете использовать службы оркестрации контейнеров для развертывания, управления и масштабирования приложений. Эти сервисы автоматизируют подготовку узлов, исправление и обновление, чтобы вы могли сосредоточиться на других аспектах своего приложения.
Бессерверные функции AWS Lambda также обеспечивают гибкость при горизонтальном масштабировании. Эти функции позволяют запускать ваш код без предоставления серверов или управления ими, а также автоматически масштабировать вычислительную мощность по мере необходимости.
Если вы разрабатываете свои приложения с помощью интерфейсов прикладного программирования (API) GraphQL, AWS AppSync подключается к Lambda и другим источникам данных. AppSync автоматически масштабируется вверх и вниз в зависимости от объема запросов.
Масштабирование в облако позволяет комбинировать любые из этих облачных служб и многое другое с гибкостью, соответствующей изменяющейся конфигурации и использованию вашего приложения.
Другие преимущества горизонтального масштабирования в облачной среде включают:
- Мгновенная и непрерывная доступность
- Отсутствие ограничений на аппаратную мощность
- Стоимость может быть привязана к использованию
- Вы не всегда платите за пиковый спрос
- Встроенная избыточность
- Простота масштабирования и изменения размера в соответствии с вашими потребностями
Как добиться эффективного горизонтального масштабирования
Существуют важные передовые методы, которые необходимо учитывать, чтобы сделать предложение услуг совместимым с горизонтальным масштабированием.
Во-первых, сделать ваше приложение без сохранения состояния на стороне сервера, насколько это возможно . Каждый раз, когда ваше приложение должно полагаться на отслеживание на стороне сервера того, что оно делает в данный момент, этот пользовательский сеанс неразрывно связан с этим конкретным сервером. Если, с другой стороны, все связанные с сеансом особенности хранятся на стороне браузера, этот сеанс может беспрепятственно проходить буквально через сотни серверов. Возможность взаимозаменяемо передавать один сеанс (или тысячи или миллионы отдельных сеансов) между серверами является воплощением горизонтального масштабирования.
Вторая цель, которую нужно держать в поле зрения, — разработать приложение с сервис-ориентированной архитектурой. Чем больше ваше приложение состоит из автономных, но взаимодействующих логических блоков, тем больше вы сможете независимо масштабировать каждый из этих блоков по мере необходимости. Обязательно разрабатывайте приложение с независимыми уровнями сети, приложения, кэширования и базы данных. Это очень важно для экономии средств, потому что без этой микросервисной архитектуры вам придется масштабировать каждый компонент вашего приложения в соответствии с уровнями спроса на уровни сервисов, которые больше всего страдают.
Наслаждайтесь лучшим из обоих решений
Увеличение масштаба или уменьшение масштаба не обязательно означает выбор «или-или». Пока вы разбиваете свои монолитные приложения на микросервисы, вы также можете масштабироваться, чтобы тем временем справляться с возросшей нагрузкой.
Начните с разделения частей вашего приложения с наибольшей нагрузкой. Таким образом, вы можете масштабировать эти микросервисы по мере необходимости.
Когда вы подходите к масштабированию таким образом, то, что осталось от исходного приложения, не нужно масштабировать так сильно. Вы можете постепенно завершить переход от монолитного приложения к микросервисам, продолжая увеличивать масштабы, если спрос резко возрастет.
Ваше облачное, масштабируемое приложение и DevOps
Вы усердно работали над созданием своего приложения. Теперь пришло время вывести его на рынок и подготовить к ошеломляющему росту. Управляемый облачный сервис AWS и команда высококвалифицированных облачных архитекторов, которые могут внедрить автоматизацию DevOps, — это наиболее эффективный способ обеспечить успешное масштабирование вашего приложения.
Начните решать свои проблемы с масштабированием, запланировав 30-минутное SA On-Demand, на котором вы сможете поговорить с одним из наших инженеров о шагах, которые необходимо предпринять, чтобы подготовиться к автоматическому масштабированию!
Горизонтальное Против. Вертикальное масштабирование: как они соотносятся?
Мы все хотим роста, но часто оказываемся не в состоянии справиться с ним. Это немного похоже на поход в спортзал, поднятие тяжестей и наблюдение за реальными результатами только для того, чтобы понять, что вы больше не влезаете в свою старую одежду. Теперь вам нужно решить, хотите ли вы изменить их или купить новую одежду. Мы можем использовать эту очень простую аналогию, чтобы понять разницу между горизонтальным и вертикальным масштабированием.
Хотя, если быть честным, этого может быть недостаточно, чтобы понять все детали или доступные вам варианты. Это то, что остальная часть этого руководства направлена на то, чтобы сделать.
В этом подробном руководстве мы расскажем, что такое горизонтальное и вертикальное масштабирование, как они сравниваются, как масштабирование применяется к локальному и облачному масштабированию, а также когда следует выбирать горизонтальное или вертикальное масштабирование.
Содержание
- Что такое масштабируемость?
- Что такое горизонтальное масштабирование?
- Что такое вертикальное масштабирование?
- Горизонтальное Против. Вертикальное масштабирование
- Что выбрать и когда?
- Локальные по сравнению с. Облачное масштабирование
Что такое масштабируемость?
Масштабируемость описывает эластичность системы. Хотя мы часто используем его для обозначения способности системы к росту, это определение не является исключительным. Мы можем уменьшать масштаб, масштабировать и масштабировать соответственно.
Если вы используете веб-сайт, веб-службу или приложение, их успех зависит от объема получаемого сетевого трафика. Обычно недооценивают объем трафика, который будет потреблять ваша система, особенно на ранних этапах. Это может привести к сбою сервера и/или снижению качества вашего обслуживания.
Таким образом, масштабируемость описывает способность вашей системы адаптироваться к изменениям и требованиям. Хорошая масштабируемость защищает вас от простоев в будущем и гарантирует качество ваших услуг.
Но какие варианты у вас есть, когда дело доходит до реализации масштабирования и обеспечения масштабируемости вашего бизнеса? Вот тут-то и появляются горизонтальное и вертикальное масштабирование.
Что такое горизонтальное масштабирование?
Горизонтальное масштабирование (также известное как горизонтальное масштабирование) означает добавление дополнительных узлов или машин в вашу инфраструктуру, чтобы справиться с новыми требованиями. Если вы размещаете приложение на сервере и обнаруживаете, что оно больше не имеет мощности или возможностей для обработки трафика, добавление сервера может быть вашим решением.
Это очень похоже на делегирование нагрузки между несколькими сотрудниками вместо одного. Однако недостатком этого может быть дополнительная сложность вашей операции. Вы должны решить, какая машина что делает и как ваши новые машины работают с вашими старыми машинами.
Можно считать это противоположностью вертикального масштабирования.
Что такое вертикальное масштабирование?
Вертикальное масштабирование (также известное как масштабирование) описывает добавление дополнительных ресурсов в систему, чтобы она удовлетворяла потребности. Чем это отличается от горизонтального масштабирования?
В то время как горизонтальное масштабирование относится к добавлению дополнительных узлов, вертикальное масштабирование описывает добавление большей мощности к вашим текущим машинам. Например, если вашему серверу требуется большая вычислительная мощность, вертикальное масштабирование будет означать обновление ЦП. Вы также можете вертикально масштабировать память, хранилище или скорость сети.
Кроме того, вертикальное масштабирование может также означать полную замену сервера или перенос рабочей нагрузки сервера на обновленный.
Горизонтальное Против. Вертикальное масштабирование
Еще раз повторим, что самое большое центральное функциональное различие между ними состоит в том, что горизонтальное масштабирование часто заставляет вас переделывать то, как вы реализуете свои сервисы или уровни. Например, давайте рассмотрим простую трехуровневую архитектуру.
У вас есть уровень представления (пользовательский интерфейс/клиент), уровень логики (виртуальный сервер/службы) и уровень данных (хранилище/базы данных). В случае горизонтального масштабирования вы можете делегировать каждый уровень (или функции, отвечающие за них) другому узлу.
Однако, возможно, вы уже используете эти уровни на разных серверах, но обнаруживаете, что один из этих серверов работает неэффективно или больше не соответствует требованиям. Опять же, вы можете масштабировать этот сервер вертикально или горизонтально. Вы можете обновить его, добавив дополнительные ресурсы, или добавить еще один сервер, чтобы разделить рабочую нагрузку.
Для дальнейшей иллюстрации рассмотрим базы данных. Если вы размещаете свою базу данных на одном выделенном сервере и она становится слишком большой, горизонтальное масштабирование будет означать добавление нового узла, разделение и совместное использование данных между старым сервером и новым.
В нашей аналогии с поднятием тяжестей горизонтальное масштабирование означало бы покупку новой одежды, а вертикальное масштабирование — изменение вашей старой одежды, чтобы она соответствовала вашим новым достижениям.
С учетом сказанного давайте рассмотрим простую разбивку преимуществ и недостатков вертикального и горизонтального масштабирования.
Преимущества горизонтального масштабирования
- Масштабирование проще с аппаратной точки зрения — Все, что требуется для горизонтального масштабирования, — это добавить дополнительные машины в текущий пул. Это избавляет от необходимости анализировать, какие характеристики системы необходимо обновить.
- Меньше периодов простоя — Поскольку вы добавляете машину, вам не нужно выключать старую машину при масштабировании. Если все сделано эффективно, может никогда не возникнуть необходимость в простоях, и клиенты с меньшей вероятностью пострадают.
- Повышенная отказоустойчивость и отказоустойчивость . Если вы полагаетесь на один узел для всех ваших данных и операций, вы рискуете потерять все это в случае сбоя. Распределение его между несколькими узлами спасает вас от потери всего.
- Повышенная производительность — если вы используете горизонтальное масштабирование для управления сетевым трафиком, это позволяет использовать больше конечных точек для подключений, учитывая, что нагрузка будет делегирована между несколькими машинами.
Недостатки горизонтального масштабирования
- Повышенная сложность обслуживания и эксплуатации — Несколько серверов сложнее обслуживать, чем один сервер. Кроме того, вам потребуется добавить программное обеспечение для балансировки нагрузки и, возможно, виртуализации. Резервное копирование ваших машин также может стать немного более сложным. Вам нужно будет убедиться, что узлы синхронизируются и взаимодействуют эффективно.
- Увеличение первоначальных затрат — Добавление новых серверов намного дороже, чем обновление старых.
Преимущества вертикального масштабирования
- Экономичность — Обновление уже существующего сервера стоит меньше, чем покупка нового. Кроме того, у вас меньше шансов добавить новое программное обеспечение для резервного копирования и виртуализации при вертикальном масштабировании. Расходы на техническое обслуживание потенциально могут остаться прежними.
- Менее сложная технологическая связь — Когда один узел обрабатывает все уровни ваших сервисов, ему не нужно будет синхронизироваться и взаимодействовать с другими машинами для работы. Это может привести к более быстрому ответу.
- Более простое обслуживание . Обслуживание не только дешевле, но и менее сложно из-за количества узлов, которыми вам нужно управлять.
- Меньше необходимости вносить изменения в программное обеспечение — Вы с меньшей вероятностью измените принцип работы программного обеспечения на сервере или его реализацию.
Недостатки вертикального масштабирования
- Более высокая вероятность простоя — Если у вас нет резервного сервера, который может обрабатывать операции и запросы, вам потребуется значительное время простоя для обновления вашей машины.
- Единая точка отказа . Выполнение всех операций на одном сервере повышает риск потери всех данных в случае аппаратного или программного сбоя.
- Ограничения на обновление — существует ограничение на количество обновлений машины. Каждая машина имеет свой порог для оперативной памяти, хранилища и вычислительной мощности.
Что выбрать и когда?
Как горизонтальное, так и вертикальное масштабирование имеют свои преимущества и ограничения. Поскольку для организаций не существует универсального решения, вам необходимо масштабировать его в соответствии с вашими потребностями и ресурсами. Вот несколько факторов, которые следует учитывать, а также тип масштабирования, который лучше всего подходит для данной ситуации:
- Стоимость — первоначальные затраты на оборудование для горизонтального обновления выше. Если вы работаете с ограниченным бюджетом и вам нужно быстро и дешево добавить больше ресурсов в свою инфраструктуру, то вертикальное масштабирование может быть лучшим вариантом для вас.
- Забота о будущем — Добавление дополнительных обновленных компьютеров посредством горизонтального масштабирования повысит общий порог производительности вашей организации. Существует предел того, насколько вы можете масштабировать один узел по вертикали, и он может не справиться с требованиями будущего.
- Топографическое распределение — Если вы планируете иметь клиентов по всей стране или по всему миру, неразумно ожидать, что все они будут получать доступ к вашим услугам с одного компьютера в одном месте. В такой ситуации вам потребуется горизонтально масштабировать свои ресурсы, чтобы поддерживать соглашение об уровне обслуживания (SLA).
- Надежность — Горизонтальное масштабирование может предложить вам более надежную систему. Это увеличивает избыточность и гарантирует, что вы не полагаетесь на одну машину. Если одна машина выходит из строя, другая может временно компенсировать слабину.
- Возможность обновления и гибкость . Если вы запускаете уровни своего приложения на отдельных машинах, их легче отделить и обновить без простоев.
- Производительность и сложность . Производительность будет зависеть от того, как работают ваши службы и как они взаимосвязаны. Простые незамысловатые приложения не выиграют от запуска на нескольких машинах. На самом деле, это может ухудшить его качество. Иногда лучше оставить приложение как есть и обновить оборудование в соответствии со спросом. Для горизонтального масштабирования может потребоваться переписать код или добавить виртуальную машину, объединяющую все серверы.
Локальная версия или локальная Масштабирование в облаке
Для большей части этого руководства мы решили не усложнять задачу, используя для наших примеров локальное необлачное масштабирование. Однако облачное масштабирование работает почти так же.
Поставщик облачных услуг (CSP) может реализовать горизонтальное масштабирование на основе гиперконвергентной инфраструктуры или использовать виртуальные распределенные службы.
Первый довольно распространен среди частных и гибридных облачных решений. В большинстве случаев ваш облачный провайдер справится с масштабированием. Это означает, что вам или вашему ИТ-руководству не придется беспокоиться о том, какое новое оборудование потребуется для удовлетворения новых требований.
У поставщиков услуг, таких как Azure и AWS, есть автоматическое масштабирование.
Они могут увеличивать и уменьшать ресурсы в соответствии с вашими требованиями в любой момент времени. Они могут увеличиваться или уменьшаться, когда трафик к вашему приложению находится на пике, и уменьшаться, когда спрос снижается. Это обеспечивает организациям более эффективное и экономичное масштабирование. Это еще одна причина задуматься о миграции в облако.
Стоимость: главный определяющий фактор
Несмотря на ваши устремления или потребности организации, в конечном итоге ваше решение может определить стоимость. Хотя горизонтальное масштабирование звучит великолепно с функциональной точки зрения, вы не можете себе это позволить (прямо сейчас). Тем не менее, по-прежнему важно помнить, что локальное вертикальное и горизонтальное масштабирование могут быть не единственными доступными вам вариантами.
Вы можете интегрировать и то, и другое или перенести инфраструктуру вашей организации к поставщику облачных услуг и позволить ему выполнять масштабирование за вас. Последнее может оказаться для вас более целесообразным с финансовой и прагматической точки зрения, особенно в долгосрочной перспективе.
Однако, как вы на самом деле это докажете? Если вы переходите на облачное решение, как вы определяете свои текущие и будущие расходы на облачные технологии?
Облачная платформа управления затратами может быть лучшим способом сделать это. Вы можете определить и доказать, что миграция и автоматическое масштабирование в облаке в конечном итоге будут более рентабельными, чем локальное масштабирование.
CloudZero помог таким компаниям, как ResponseTap, повысить предсказуемость затрат и повысить эффективность масштабирования, позволив им точно видеть, какие функции и продукты влияют на их расходы на AWS.