Я долго задавался вопросом, существуют ли системы, которые должны «масштабироваться» (на более мощный и более дорогой сервер), а не «масштабироваться» путем разделения на множество небольших серверов.
Существуют ли такие системы, и если да, то есть ли что-то конкретное, что вызывает необходимость масштабирования систем, а не их масштабирования? (Например, это может быть связано с транзакциями в базе данных жалоб ACID или другими строгими требованиями к целостности данных.)
Поскольку масштабирование кажется намного более затратным, чем масштабирование, кажется, что вы хотели бы избежать, если это возможно, но я не уверен, всегда ли этого можно избежать или нет.
Итак, существуют ли системы, которые нельзя масштабировать, и вместо этого их нужно расширять? Что может вызвать это, и как бы вы определили такую систему? (Как правило, они имеют некоторые общие характеристики, которые могут сделать их более легко идентифицируемыми?)
Ответы:
Я в основном работаю с приложением, которое имеет нулевой потенциал горизонтального масштабирования . Несмотря на то, что он работает в Linux, приложения, структуры данных и требования к вводу / выводу вынуждают меня «масштабироваться» на прогрессивно более крупные системы, чтобы соответствовать возросшим нагрузкам на пользователей.
Многие устаревшие бизнес-приложения и транзакционные приложения имеют такие ограничения. Это одна из причин, по которой я подчеркиваю, что отрасль фокусируется на облачных решениях, а архитектура веб-масштаба, разработанная на основе DevOps, игнорирует значительный процент вычислительного мира.
К сожалению, системы масштабирования, которые я описываю, на самом деле несексуальны , поэтому индустрия склонна игнорировать их ценность или умалять навыки, необходимые для работы с крупными критическими системами (например, крупный рогатый скот против домашних животных ).
источник
С точки зрения разработчика, я могу сказать, что почти каждый традиционный основной движок баз данных может только увеличиваться, а масштабирование - очень запоздалая мысль.
В последние годы в связи с необходимостью большей масштабируемости и высокой доступности систем были предприняты усилия по расширению существующих баз данных. Но поскольку дизайну мешает унаследованный код, он очень сильно привязан, а не является фундаментальным для дизайна. Вы столкнетесь с этим, если попытаетесь масштабировать большинство известных баз данных. Добавление подчиненных серверов может быть довольно сложным в настройке, и вы заметите, что оно имеет значительные ограничения, некоторые из которых могут потребовать перенастройки таблиц базы данных.
Например, большинство из них являются главными / (мульти) подчиненными, а не мультимастерными проектами. Другими словами, у вас может быть целый сервер, который просто сидит и не может обрабатывать запросы. Некоторые делают, но с ограничениями ... например, дизайн только для нескольких ведомых. Таким образом, у вас может быть один сервер, который принимает записи, а все остальные предоставляют данные только для чтения. Вы заметите, что, когда вы настраиваете эти системы, это не всегда простой процесс, и трудно работать хорошо. Во многих случаях это очень сильно мешает сложению.
С другой стороны, есть несколько новых движков баз данных, которые разрабатываются с одновременным и многоуровневым дизайном с самого начала. NOSQL и NewSQL - новый класс дизайна.
Таким образом, кажется, что лучший способ получить лучшую производительность от традиционного сервера SQL - это масштабирование! В то время как с NOSQL и NewSQL это одновременно увеличивает и уменьшает масштаб.
Причина, по которой традиционные системы СУБД тесно связаны между собой, заключается в том, что им всем необходимо согласованное представление одних и тех же данных. Когда у вас есть несколько серверов, принимающих обновления одних и тех же данных от разных клиентов, какому из них вы доверяете? Любой метод, который пытается обеспечить согласованность данных с помощью какого-либо механизма блокировки, требует взаимодействия с другими серверами, что либо снижает производительность, либо влияет на качество данных, поскольку любые данные, считываемые с клиента, могут быть устаревшими. И серверы должны решить между собой, какие данные являются самыми последними при записи в одну и ту же запись. Как вы можете видеть, эта сложная проблема усложняется тем фактом, что рабочая нагрузка распределяется по серверам, а не только по процессам или потокам, где доступ к данным все еще довольно быстрый.
источник
По моему мнению, разграничение масштабирования вверх / вниз определяется тем, насколько параллельным может быть рабочий процесс и насколько тесно параллельные потоки должны координироваться друг с другом.
Однопотоковый
По любой причине этот рабочий процесс может работать только в одном потоке.
Одна нить означает, что одна система означает увеличение масштабов , чтобы сделать это быстрее.
Тесно связанный параллелизм
Это многопоточная система, где потоки должны быть тесно связаны друг с другом. Возможно, межпроцессное взаимодействие должно быть очень быстрым, или все это должно управляться с помощью одного менеджера памяти. Большинство систем РСУБД представляют собой параллельные вычисления.
По большей части, эти системы лучше масштабируются , чем вне, хотя есть исключения. Например, рабочие процессы, которые будут работать в кластере стиля единого образа системы , с одним пространством памяти, но с большой задержкой между потоками, могут облегчить масштабирование. Но с такими системами SSI очень сложно работать, поэтому большинство инженеров просто делают большую коробку.
Слабосвязанный параллелизм
Это многопоточная / процессная система, где потоки в порядке с большими задержками между собой. Или вообще не нужно разговаривать друг с другом. Масштабированные веб-сервисы и фермы рендеринга являются классическими примерами такой системы. Подобные системы намного проще сделать больше, чем тесно связанный параллелизм, вот почему этот стиль системы вызывает большое волнение.
Это стиль , где масштаб из намного проще.
источник