В чем разница между масштабируемостью и эластичностью?
Я слышал, что многие люди используют оба термина взаимозаменяемо. Однако, на мой взгляд, между ними есть разница:
Масштабируемость - способность системы увеличивать нагрузку на свои текущие аппаратные ресурсы (увеличивать масштаб);
ЭЛАСТИЧНОСТЬ - способность системы увеличивать нагрузку на свои текущие и дополнительные (динамически добавляемые по запросу) аппаратные ресурсы (масштабирование);
Эластичность тесно связана с развернутыми в облаке приложениями.
Правильно ли я понял разницу между этими двумя нефункциональными характеристиками программного обеспечения? Кто-нибудь может привести конкретные примеры, чтобы мы могли провести более четкую границу между этими двумя терминами?
13 ответов
Масштабируемость - это способность системы приспосабливаться к большим нагрузкам, просто добавляя ресурсы, либо укрепляя оборудование (увеличивая масштаб), либо добавляя дополнительные узлы (уменьшая масштаб).
Эластичность - это способность приспосабливать ресурсы, необходимые для динамического управления нагрузками, обычно в зависимости от масштаба. Таким образом, когда нагрузка увеличивается, вы масштабируете, добавляя больше ресурсов, а когда спрос уменьшается, вы сокращаетесь и удаляете ненужные ресурсы. Эластичность в основном важна в облачных средах, где вы платите за использование и не хотите платить за ресурсы, которые вам не нужны в настоящее время, с одной стороны, и хотите удовлетворить растущий спрос, когда это необходимо, с другой стороны.
_
Масштабируемость: "Увеличение" способности соответствовать "возрастающей" рабочей нагрузке.
Эластичность: "Увеличение или уменьшение" способности соответствовать "увеличивающейся или уменьшающейся" рабочей нагрузке.
Масштабируемость: в среде масштабирования доступные ресурсы могут превышать для удовлетворения "будущих потребностей".
Эластичность: в эластичной среде доступные ресурсы максимально соответствуют "текущим требованиям".
Масштабируемость: Масштабируемость адаптируется только к "увеличению рабочей нагрузки" путем "предоставления" ресурсов "инкрементным" способом.
Эластичность: Эластичность адаптируется как к "увеличению рабочей нагрузки", так и к "уменьшению рабочей нагрузки" путем "автономной" подготовки и выделения ресурсов.
Масштабируемость. Увеличение рабочей нагрузки обеспечивается увеличением мощности одного компьютерного ресурса или увеличением мощности группы компьютерных ресурсов.
Эластичность: изменяющаяся рабочая нагрузка обслуживается динамическими изменениями в использовании компьютерных ресурсов.
Масштабируемость: Масштабируемость позволяет компании удовлетворять ожидаемые потребности в услугах с "долгосрочными, стратегическими потребностями".
Эластичность: Эластичность позволяет компании удовлетворять неожиданные изменения в спросе на услуги с "краткосрочными, тактическими потребностями".
Масштабируемость: "увеличивает" способность обслуживать среду, в которой увеличивается нагрузка.
Эта масштабируемость может быть "Масштабирование" или "Масштабирование".
(Пример:
Масштабирование - увеличение возможностей отдельного сервера
Масштабирование - увеличение возможностей путем добавления нескольких серверов к отдельному серверу.)
Эластичность: это способность "увеличивать или уменьшать" способность служить по желанию.
Масштабируемость: чтобы использовать сравнение, "масштабирование" - это человек, увеличивающий свои возможности для удовлетворения растущих потребностей, а "масштабирование" - это создание команды для удовлетворения растущих потребностей.
Эластичность: чтобы использовать сравнение, киноактер увеличивает или уменьшает свой вес, чтобы удовлетворить различные потребности киноиндустрии.
_
Обычно, когда кто-то говорит, что платформа или архитектура масштабируются, это означает, что затраты на оборудование линейно растут вместе со спросом. Например, если один сервер может обрабатывать 50 пользователей, 2 сервера могут обрабатывать 100 пользователей, а 10 серверов могут обрабатывать 500 пользователей. Если на каждые 1000 пользователей, которых вы получаете, вам нужно в два раза больше серверов, то можно сказать, что ваш дизайн не масштабируется, поскольку вы быстро исчерпали бы деньги по мере роста количества пользователей.
Эластичность используется для описания того, насколько хорошо ваша архитектура может адаптироваться к рабочей нагрузке в режиме реального времени. Например, если у вас есть один вход пользователя каждый час на ваш сайт, то вам действительно нужен только один сервер для этого. Однако, если вдруг 50 000 пользователей одновременно вошли в систему, может ли ваша архитектура быстро (и, возможно, автоматически) выделить новые веб-серверы на лету для обработки этой нагрузки? Если это так, можно сказать, что ваш дизайн эластичен.
С точки зрения AWS:
Масштабируемость относится к способности ваших ресурсов увеличиваться или уменьшаться в размере или количестве.
Чтобы сделать что-то подобное, задействовано много инфраструктуры, поэтому задача не из легких.
Многие сервисы в AWS по умолчанию масштабируемы, что является одной из причин успеха AWS.
Масштабируемость довольно просто определить, поэтому некоторые аспекты эластичности часто приписывают ей.
Эластичность - это способность ваших ресурсов масштабироваться в соответствии с установленными критериями, часто правилами CloudWatch.
Это то, что происходит, когда балансировщик нагрузки добавляет экземпляры всякий раз, когда веб-приложение получает много трафика.
Масштабируемость требуется для эластичности, но не наоборот.
Не все сервисы AWS поддерживают эластичность, и даже те, которые часто нуждаются в настройке определенным образом.
Это может показаться избыточным, но сервисы в AWS, которые начинаются с упругости, часто поддерживают упругость.
-
Таким образом, масштабируемость дает вам возможность увеличивать или уменьшать ваши ресурсы, а эластичность позволяет этим операциям выполняться автоматически в соответствии с настроенными правилами.
Одна картинка стоит тысячи слов. Я нашел его в книге Марка Ричардса и Нила Форда " Основы архитектуры программного обеспечения: инженерный подход ".
Масштабируемость обрабатывает увеличение и уменьшение ресурсов в соответствии с требованиями рабочей нагрузки системы. Так что масштабируемость не обязательно должна выполняться автоматически.
Эластичность - это способность автоматически или динамически увеличивать или уменьшать ресурсы по мере необходимости. Эластичные ресурсы соответствуют текущим потребностям, а ресурсы добавляются или удаляются автоматически для удовлетворения будущих требований, когда это необходимо.
Короче говоря, способность системы автоматически обрабатывать масштабируемость - это эластичность.
Эластичность связана с краткосрочными требованиями к услуге или приложению и их изменением, но масштабируемость поддерживает долгосрочные потребности.
Эластичность - это способность системы увеличивать (или уменьшать) объем вычислений, хранения, сетевых ресурсов и т. Д. На основе определенных критериев, таких как общая нагрузка на систему.
Например, вы можете внедрить бэкэнд-систему, в которой изначально в одном кластере есть 1 сервер, но сконфигурировать ее для добавления дополнительного экземпляра в кластер, если средняя загрузка ЦП всех серверов в минуту превышает заданный порог (например, 70%).
Точно так же вы можете настроить свою систему так, чтобы серверы удалялись из внутреннего кластера, если нагрузка на систему уменьшается, а средняя загрузка ЦП в минуту становится ниже установленного вами порогового значения (например, 30%).
В качестве другого примера вы можете сконфигурировать свою систему, чтобы увеличить общее дисковое пространство вашего внутреннего кластера на порядок 2, если используется более 80% от общего объема доступного в настоящее время хранилища. Если по какой-либо причине на более позднем этапе данные удаляются из хранилища и, скажем, общий объем используемого хранилища становится меньше 20%, вы можете уменьшить общее доступное дисковое пространство до его первоначального значения.
Но некоторые системы (например, устаревшее программное обеспечение) не распространяются, и, возможно, они могут использовать только одно ядро процессора. Таким образом, даже если вы можете увеличить вычислительную мощность, доступную вам по требованию, система не может использовать эту дополнительную емкость в любой форме или форме. Такие системы не масштабируемы. Но масштабируемая система может использовать увеличенную вычислительную мощность и обрабатывать большую нагрузку, не влияя на общую производительность системы.
Масштабируемая система не зависит от эластичности. Традиционно ИТ-отделы могли заменить свои существующие серверы новыми серверами, на которых было больше ЦП, ОЗУ и хранилища, и перенести систему на новое оборудование, чтобы использовать дополнительные вычислительные мощности, доступные для него.
Облачные среды (AWS, Azure, Google Cloud и т. Д.) Обеспечивают гибкость, и некоторые из их основных сервисов также можно масштабировать из коробки. Кроме того, если вы создаете масштабируемое программное обеспечение, вы можете развернуть его в этих облачных средах и воспользоваться гибкой инфраструктурой, которую они предоставляют вам для автоматического увеличения / уменьшения вычислительных ресурсов, доступных вам по требованию.
И масштабируемость, и эластичность относятся к удовлетворению спроса на трафик, но в двух разных ситуациях.
Масштабируемость соответствует предсказуемому спросу на трафик, а эластичность - внезапному спросу на трафик.
Ссылка на изображение: https://www.skylinesacademy.com/blog/2020/3/6/az-900-cloud-concepts-scalability-and-elasticity
Из моего ограниченного понимания этих концепций, пример:
Скажем, у нас есть система из 5 компьютеров, которая выполняет 5 рабочих блоков, если нам понадобится еще один рабочий блок, нам придется использовать еще один компьютер. Это масштабируемая система, но она не эластична. Кто-то должен пойти и получить этот другой компьютер. Кроме того, если новый компьютер приобретен и дополнительный рабочий блок больше не нужен, система застревает с избыточным ресурсом.
Теперь предположим, что та же система использует вместо своих компьютеров облачный сервис, который соответствует ее потребностям. В идеале, когда рабочая нагрузка увеличивается на одно рабочее место, облако обеспечивает систему другим "вычислительным модулем", а когда рабочая нагрузка возвращается вниз, облако постепенно прекращает предоставлять это вычислительное устройство. Это ситуация, когда система является масштабируемой и эластичной.
Масштабируемость относится к способности системы, сети или процесса справляться с растущим объемом работы или нагрузки за счет добавления ресурсов. Масштабируемость часто используется для описания способности системы справляться с растущим объемом работы или трафика предсказуемым и контролируемым образом. В масштабируемой системе ее можно сделать больше или меньше по мере необходимости, чтобы соответствовать изменяющимся требованиям рабочей нагрузки.
Эластичность, с другой стороны, относится к способности системы автоматически увеличивать или уменьшать свои ресурсы в ответ на изменение спроса. Эластичная система может автоматически регулировать свою производительность в соответствии с текущей рабочей нагрузкой без какого-либо ручного вмешательства. Это позволяет системе быть гибкой и быстродействующей, а также минимизировать потери, используя только те ресурсы, которые необходимы.
Попытка максимально упростить:
Масштабируемость
Это похоже на то, сколько ресурсов вы можете «добавить» или сколько каждый ресурс (уже добавленный) можно сделать «больше».
Например:
У нас есть ПК с оперативной памятью 4 ГБ, и по какой-то причине этого недостаточно, и мы хотим 8 ГБ оперативной памяти. Теперь у нас есть два варианта:
- мы могли либо получить еще одну оперативную память на 4 ГБ и «добавить» ее к предыдущему 4 ГБ оперативной памяти. Вместе они составляют 8 ГБ
- ЛИБО мы могли бы просто получить 8-гигабайтный чип оперативной памяти и заменить его на предыдущий. Фактически мы сделали нашу оперативную память «больше» с новым чипом на 8 ГБ.
«Добавить» -> Масштабировать
"Bigger" -> Scale Up (подумайте о весах, если они тяжелые, весы поднимаются :)
Эластичность
Это «насколько быстро» или «насколько» вы можете увеличить или уменьшить данный ресурс или группу ресурсов.
Подумайте о резинке: у нас есть две резинки, одна может «растягиваться» больше, а другая - меньше. Мы говорим, что первый «более эластичный».
Если вы изучаете физику: думайте по инерции. Насколько легко и насколько объект может двигаться или расширяться ..
Если вы изучаете облачные технологии: как быстро и на сколько выделенные ресурсы могут «расшириться» или «сжаться» с учетом нагрузки на приложение.
(Я надеюсь, что хоть что-то из этого поможет. Я не хотел использовать какой-либо книжный язык.)
И масштабируемость, и эластичность относятся к способности системы увеличиваться и уменьшаться в объеме и ресурсах, и в этом смысле они фактически одно и то же. Разница обычно заключается в потребностях и условиях, при которых это происходит. Масштабируемость в основном ручная, прогнозируемая и планируется для ожидаемых условий. Эластичность происходит автоматически и реагирует на внешние раздражители и условия. Эластичность - это автоматическая масштабируемость в ответ на внешние условия и ситуации.