Разница между горизонтальным и вертикальным масштабированием для баз данных


Я столкнулся со многими базами данных NoSQL и базами данных SQL. Существуют различные параметры для измерения силы и слабости этих баз данных и масштабируемость является одним из них. В чем разница между горизонтальным и вертикальным масштабированием этих баз данных?

9 467

9 ответов:

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

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

                  Horizontal Scaling/Vertical Scaling Visualisation

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

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

хорошими примерами горизонтального масштабирования являются Cassandra, MongoDB,Google Cloud Spanner .. и хорошим примером вертикального масштабирования является MySQL-Amazon RDS (облачная версия MySQL). Он обеспечивает простой способ масштабирования по вертикали путем переключения с небольших на большие машины. Этот процесс часто включает в себя простой.

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

вы можете прочитать больше на эту тему в моих предыдущих сообщениях: масштабирование против масштабирования и общие принципы, лежащие в основе NOSQL Альтернативы

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

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

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

вертикальная масштабируемость, с другой стороны, увеличивает емкость, добавляя больше ресурсов, таких как больше памяти или дополнительный процессор, к машине. Вертикальное масштабирование, которое также называется масштабированием вверх, обычно требует простоя при добавлении новых ресурсов и имеет ограничения, которые определяются оборудованием. Например, когда клиенты Amazon RDS должны масштабироваться по вертикали, они могут переключаться с меньшей на большую машину, но самый большой экземпляр Amazon RDS имеет только 68 ГБ память.

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

существует дополнительная архитектура, которая не была упомянута-службы баз данных на основе SQL, которые позволяют горизонтальное масштабирование без сложности ручного сегментирования. Эти службы выполняют сегментацию в фоновом режиме, поэтому они позволяют запускать традиционную базу данных SQL и масштабировать ее, как и с помощью NoSQL-движков, таких как MongoDB или CouchDB. Две услуги, с которыми я знаком EnterpriseDB для PostgreSQL и Xeround для MySQL. Я видел в глубине post по Xeround, который объясняет, почему масштабирование на базах данных SQL трудно и как они делают это по - разному-относиться к этому с солью, поскольку это сообщение поставщика. Также проверьте Википедии запись в облачной базе данных, есть хорошее объяснение SQL против NoSQL и service против self-hosted, список поставщиков и параметры масштабирования для каждой комбинации. ;)

да масштабирование по горизонтали означает добавление новых компьютеров, но это также означает, что машины равны в кластере. MySQL может масштабироваться горизонтально с точки зрения чтения данных, используя реплики, но как только он достигает емкости сервера mem/disk, вы должны начать сегментировать данные между серверами. Это становится все более сложным. Часто поддержание согласованности данных между репликами является проблемой, поскольку скорость репликации часто слишком медленная, чтобы идти в ногу со скоростью изменения данных.

Couchbase также является фантастической базой данных горизонтального масштабирования NoSQL, используемой во многих коммерческих приложениях и играх с высокой доступностью и, возможно, самым высоким исполнителем в категории. Он автоматически распределяет данные по кластеру, добавление узлов просто, и вы можете использовать товарное оборудование, более дешевые экземпляры виртуальных машин (например, используя большие вместо высоких Mem, высокие дисковые машины в AWS). Он построен с Membase (Memcached), но добавляет постоянство. Кроме того, в случае вы, каждый узел может выполнять чтение и запись и равен в кластере, только с репликацией отработки отказа (не полная репликация набора данных на всех серверах, как в mySQL).

представление-велемудрое, вы можете увидеть превосходную отметку уровня Сиско: http://blog.couchbase.com/understanding-performance-benchmark-published-cisco-and-solarflare-using-couchbase-server

вот отличный пост в блоге об архитектуре Couchbase: http://horicky.blogspot.com/2012/07/couchbase-architecture.html

традиционные реляционные базы данных, разработанные в качестве клиент-серверных систем баз данных. Они могут быть масштабированы горизонтально, но процесс для этого, как правило, является сложным и подверженным ошибкам. Базы данных NewSQL likeNuoDB-это ориентированные на память распределенные системы баз данных, предназначенные для горизонтального масштабирования при сохранении свойств SQL/ACID традиционных СУБД.

для получения дополнительной информации о NuoDB, прочитайте их технический технический документ на http://goo.gl/uzLIWB.

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

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

Это предоставляет вам два варианта, либо вы увеличиваете ресурсы на сервере, который вы используете в настоящее время т. е. увеличиваете объем оперативной памяти, cpu, gpu и другие ресурсы.Это называется вертикальным масштабированием .

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

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

надеюсь, вы получите всю концепцию введения масштабирования в систему

базы данных SQL как Oracle, db2 также поддерживают горизонтальное масштабирование через общий дисковый кластер. Например, Oracle RAC, IBM DB2 purescale или Sybase ASE Cluster edition. Новый узел может быть добавлен в систему Oracle RAC или систему DB2 purescale для достижения горизонтального масштабирования.

но подход отличается от баз данных noSQL (таких как mongodb, CouchDB или IBM Cloudant) тем, что сегментирование данных не является частью горизонтального масштабирования. В базах данных noSQL данные сжимаются по горизонтали пересчет.

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

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

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

с другой стороны, сложные транзакционные запросы имеют высокую производительность, если sql используются такие базы данных, как oracle. NoSql может использоваться для bigdata и горизонтальной масштабируемости путем сегментирования.