Какие типы систем должны «масштабироваться», а не «масштабироваться»?

12

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

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

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

Итак, существуют ли системы, которые нельзя масштабировать, и вместо этого их нужно расширять? Что может вызвать это, и как бы вы определили такую ​​систему? (Как правило, они имеют некоторые общие характеристики, которые могут сделать их более легко идентифицируемыми?)

Деми
источник
7
Масштабирование часто намного проще, если ваше программное обеспечение не было разработано для масштабирования. Перепроектирование программного обеспечения либо дорого, либо невозможно, если вы не являетесь владельцем исходного кода или не имеете влияния на разработчиков.
Zoredache
Написание таких систем - очень сложная проблема. Особенно мастер / мастер проекты, которые могут приходить и уходить, когда несколько мастеров пишут в одни и те же записи одновременно. Кто пишет, побеждает?
Мэтт
3
Вас может заинтересовать теорема CAP . По сути, сервис, который требует согласованности и доступности, как определено в теореме, не будет допускать разбиение. Большинство требований реального мира могут пожертвовать некоторой согласованностью для возможной согласованности (вручную или автоматически обрабатывать несогласованность после факта) или жертвовать доступностью, отказываясь обрабатывать запрос, когда некоторые участники недоступны. Поэтому системы, которые требуют как абсолютной согласованности, так и абсолютной доступности, по существу вынуждены расширяться.
Ли Райан
1
Если под «надежной локальной сетью» вы подразумеваете «никогда не бывает сбоев», то вы не проектируете для реального мира.
mfinni

Ответы:

18

Я в основном работаю с приложением, которое имеет нулевой потенциал горизонтального масштабирования . Несмотря на то, что он работает в Linux, приложения, структуры данных и требования к вводу / выводу вынуждают меня «масштабироваться» на прогрессивно более крупные системы, чтобы соответствовать возросшим нагрузкам на пользователей.

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

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

ewwhite
источник
1
«самое простое, что нужно сделать - это бросить аппаратное обеспечение в проблему». Пожалуйста, закон Мура, не прекращайте работать!
CJC
2
@Demetri - Microsoft SQL Server - это самый «высокопрофильный» продукт, который я могу назвать типичным «масштабированием», а не «масштабированием». Масштабирование почти невозможно, если вы не соответствуете очень специфическому набору критериев репликации слиянием.
Марк Хендерсон
3
Или, если вы можете разложить решение на несколько проблем. Например, не запускайте отчеты по базе данных транзакций; ударить реплику, которая работает на другом оборудовании. \
mfinni
1
-1. Я думаю, что вы пропустили, ударил суть проблемы. Ваша проблема не должна быть уменьшена, если вы можете переписать систему для масштабируемой системы. Этот вопрос о системах, проблемная область которых такова, что масштабирование вообще невозможно, даже если они спроектированы с нуля.
Ложь Райан
1
@LieRyan Понимание. Я утверждаю, что приложение, которое я поддерживаю, не может быть масштабировано (это система, похожая на базу данных) ... даже если она была переработана из-за архитектурных ограничений.
Ewwhite
8

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

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

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

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

Таким образом, кажется, что лучший способ получить лучшую производительность от традиционного сервера SQL - это масштабирование! В то время как с NOSQL и NewSQL это одновременно увеличивает и уменьшает масштаб.

Причина, по которой традиционные системы СУБД тесно связаны между собой, заключается в том, что им всем необходимо согласованное представление одних и тех же данных. Когда у вас есть несколько серверов, принимающих обновления одних и тех же данных от разных клиентов, какому из них вы доверяете? Любой метод, который пытается обеспечить согласованность данных с помощью какого-либо механизма блокировки, требует взаимодействия с другими серверами, что либо снижает производительность, либо влияет на качество данных, поскольку любые данные, считываемые с клиента, могут быть устаревшими. И серверы должны решить между собой, какие данные являются самыми последними при записи в одну и ту же запись. Как вы можете видеть, эта сложная проблема усложняется тем фактом, что рабочая нагрузка распределяется по серверам, а не только по процессам или потокам, где доступ к данным все еще довольно быстрый.

Matt
источник
Разве Oracle RAC не обеспечивает масштабирование с 10g?
Dani_l
Она имеет. Но тогда наличие RAC и безупречно работающий RAC - это две разные вещи - это действительно требует особой осторожности, чтобы продолжать работать. Это хороший дизайн, хотя. Если вам это нужно, вы, вероятно, готовы заплатить цену.
TomTom
И обратите внимание на систему общего хранилища, необходимую для Oracle RAC. Это может представлять проблему масштабирования в зависимости от того, как это реализовано.
Мэтт
7

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

Однопотоковый
По любой причине этот рабочий процесс может работать только в одном потоке.

Одна нить означает, что одна система означает увеличение масштабов , чтобы сделать это быстрее.

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

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

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

Это стиль , где масштаб из намного проще.

sysadmin1138
источник
Причина, по которой СУБД тесно связаны, заключается в том, что они тесно связаны с данными. т.е. несколько серверов, обращающихся к одному и тому же ресурсу.
Мэтт