Что для вас значит масштабируемость? - PullRequest
18 голосов
/ 18 октября 2008

Я опубликовал аналогичный вопрос о том, насколько масштабируемым является linq. Было так много разных взглядов на то, что на самом деле означало масштабируемость в некоторых недавних разговорах, поэтому я также задал вопрос Что для вас значит масштабируемость?

Ответы [ 10 ]

15 голосов
/ 18 октября 2008

Я смотрю на масштабируемость с двух точек зрения:

Увеличение

Если я добавлю больше ОЗУ в коробку, на которой что-то запущено, какую дополнительную производительность и емкость я получу? Если одно мое приложение может обрабатывать еще 300 соединений и работать на 15% быстрее, когда я добавляю 2 ГБ ОЗУ на свой сервер, а другое приложение может обрабатывать только 100 подключений и работать на 5% быстрее, приложение А явно более масштабируемое.

Масштабирование

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

Это, кстати, один из основных накопителей n-уровня.

9 голосов
/ 18 октября 2008

Масштабируемость означает способность справляться с ростом в любой из следующих двух областей:

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

2) Возможность обрабатывать все большую и большую нагрузку, которая может быть связана с несколькими запросами одновременно в веб-разработке или с большими наборами данных для простого веб-сайта, управляемого базой данных, например, Не могли бы вы создать приложение, которое обрабатывает таблицы с сотнями тысяч строк, которые по-прежнему считаются «быстрыми»?

Обычно для меня масштабируемость означает способность к росту.

6 голосов
/ 18 октября 2008

Я не думаю, что масштабируемость имеет смысл ни на йоту без контекста.

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

(ОК, поэтому ответ на все эти вопросы обычно "Да"; затем добавьте слово "Как" к этим вопросам.)

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

Или представьте себе сайт социальной сети, в котором реализована потрясающая новая функция, которая позволяет увидеть, находятся ли ваши друзья в сети, и пообщаться с ними через приятный пользовательский интерфейс Ajax-y. Внезапно, без увеличения пользовательской базы, число HTTP-запросов, обрабатываемых вашими серверами в день, подскочило в двадцать раз, и ваши опасения по поводу масштабируемости вашей базы данных отошли на второй план. (Если, конечно, вы не включили базу данных в приложение чата. Хорошее мышление!)

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

3 голосов
/ 19 октября 2008

Я считаю масштабируемость мерой плавности кривой затрат и производительности.

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

3 голосов
/ 18 октября 2008

Просто чтобы добавить в пост @Lou Franco.

PLINQ даже имеет странную «суперлинейную» производительность в некоторых сценариях с ограниченными накладными расходами (согласно некоторым из их демонстраций). Попробуйте.

Если вы работаете в C ++, Microsoft также планирует выпустить функции параллелизма, которые, по-видимому, не связаны с затратами времени выполнения, и дополнительные инструменты параллелизма на основе задач, которые помогут вам лучше звонить.

3 голосов
/ 18 октября 2008

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

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

1 голос
/ 18 октября 2008

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

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

0 голосов
/ 19 октября 2008

Воу !, громкое слово ....

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

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

0 голосов
/ 18 октября 2008

Масштабируемость означает, что я могу втиснуть n ресурсов в систему, и они будут расти как в пространстве, так и во времени между O (log (n)) и O (n log n). Это несколько нереально, но я так думаю о «масштабируемости».

0 голосов
/ 18 октября 2008

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

Могу ли я обрабатывать больше (трафик, данные, обработка), добавляя больше аппаратного оборудования? даже используя «облачные серверы» amazon ec2, google app engine и тому подобное?

...