109: (Default)
109 ([personal profile] 109) wrote2008-02-21 11:53 am

линейная масштабируемость

в продолжение.
откуда вообще взялся странный миф, что любая произвольная система должна линейно масштабироваться? это же всё равно что сказать, что для любой задачи должно существовать решение алгоритмической сложности O(N).

[identity profile] anatolix.livejournal.com 2008-02-21 08:33 pm (UTC)(link)
Во-первых не любая конечно - это опять расширение изначального тезиса.

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

Под "online запросами" понимаем что-нибудь очень быстрое типа отдачу web страницы, или транзации по кредитке - типа десятые доли секунды или меньше.

Во-первых если система выдерживает 1M запросов в секунду то она обычно либо масштабируется линейно(в крайнем случае как n*ln(n) или похожие сложноси) либо не существует. Т.к. при масштабировании как O(n*n) сейчас столько машин ни у кого нет.

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

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

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

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

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

P.S. кстати можешь вспомнить какой нибудь реальный алгоритм которые регулярно отрабатывает на больше, чем на 1000 машин и имеет сложность как минимум n*n и находится в условиях экспоненциального увеличения данных в зависимости от роста интернета например?

[identity profile] 109.livejournal.com 2008-02-22 10:38 pm (UTC)(link)
read-only queries масштабируются линейно, спору нет. и вообще с этим текстом я полностью согласен, as long as the message is "кое-что масштабируется линейно", а не "всё масштабируется линейно".

кстати можешь вспомнить какой нибудь реальный алгоритм которые регулярно отрабатывает на больше, чем на 1000 машин и имеет сложность как минимум n*n и находится в условиях экспоненциального увеличения данных в зависимости от роста интернета например?

мнэ... может не в точности что ты спрашиваешь, но вот один из моих проектов. есть у нас local entity feeds. local entity - это что угодно, имеющее координаты. магазин, ресторан, человек, мост через речку. feeds поступают как от фирм, продающих эти данные, так и от кроулинга интернета.

проблемы: 1. есть существенное перекрытие в данных и 2. данные не идеальны (где-то телефон неправильный, где-то название с ашипкой, и т.д.)

соответственно, надо дедупить, матч/мёржить и автокорректить. сложность, как очевидно, О(n*n) от размера данных. гм... может, не очевидно - поясняю. данные, которые мы получаем, уже покрывают практически каждый бизнес в штатах; большинство бизнесов - несколько раз. дальнейший рост размера данных будет происходить за счёт увеличения оверлапа.

[identity profile] anatolix.livejournal.com 2008-02-23 11:17 am (UTC)(link)
Ну во первых идя которую ты описал она все-таки не про online запросы.

Во вторых не совсем понял логику, я правильно понимаю что ты исходишь из того, что тебе придется сравнить все entity со всеми? А помоему это совершенно излишне - мы такую штуку написали для кластеризации музыки(то же самое - есть иерархически организованные данные артист-альбом-трек, названия все похожи но с ошибками/добавками/бонус треками). Отлично кластеризуется по шинглам, без сравнения каждого с каждым.

[identity profile] 109.livejournal.com 2008-02-23 09:09 pm (UTC)(link)
нет, конечно не со всеми. сравниваем с маленьким сабсетом, размер которого, тем не менее, пропорционален произведению суммарного количества данных на долю дупликатов. то есть N*N.

[identity profile] ivan-gandhi.livejournal.com 2008-02-21 10:04 pm (UTC)(link)
Ты читал последнего добса? Там вообще идейка задвигается что хорошие распределённые системы должны быть сублинейными.

[identity profile] ex-chrobin.livejournal.com 2008-02-22 09:07 am (UTC)(link)
это про break amdahl's law? что-то я не врубаюсь, где там о сублинейности.

[identity profile] 109.livejournal.com 2008-02-22 10:40 pm (UTC)(link)
дай ссылку. но вообще - непонятно. полно же задач, принципиально нелинейных.

[identity profile] elk.livejournal.com 2008-02-21 10:28 pm (UTC)(link)
А кто носитель этого мифа? В первоначальной теме было про другое.
Поддерживая дискуссию, однако, надо заметить, что любая система масштабируется с вероятностью 0.5 : либо масштабируется, либо - нет :)

[identity profile] 109.livejournal.com 2008-02-22 10:41 pm (UTC)(link)
ну как же про другое. там много раз было прямым текстом сказано слово "линейно".

[identity profile] faceted-jacinth.livejournal.com 2008-02-22 11:01 pm (UTC)(link)
это же всё равно что сказать, что для любой задачи должно существовать решение алгоритмической сложности O(N)
---
Во-первых, допускается O(n log n), но это уже было сказано.
Во-вторых, мне как-то прям неудобно появляться среди таких зубров, но всё-таки: правильно говорить что для любой _решаемой_ задачи решение должно себя так вести. Иначе она нерешаемая, точка. Частные случаи решаемы, а сама задача -- нет. И это тоже, в общем, уже было сказано, даже не знаю, зачем я это повторяю...

[identity profile] faceted-jacinth.livejournal.com 2008-02-22 11:11 pm (UTC)(link)
О, зато я под последнее утверждение могу подвести псевдорациональную базу.

Если у тебя есть n вещей, которые ты хочешь обработать, то у тебя, наверное, есть и q*n компов, которые это будут делать, где q это некий коэффициент, зависящий от того, сколько тебе платят за одну обработанную вещь. Понятно, что логарифм туда легко впихивается, потому что с n > 2^64 мы ещё очень долго не будем работать, а если этот стрёмный момент когда-нибудь и наступит, то уж до 2^128 мы не дойдём никогда. Маленькие константы. Они значат, конечно, это ведь разы в конце концов, но не такие уж и большие.

Ну так вот, в результате либо либо твоя задача линейно-логарифмически скейлиться, либо ты перестаёшь её считать как только она становится нерентабельной (впрочем, для некоторых задач ты можешь надеяться, что они никогда до этого момента не дорастут, но стоит ли ими тогда заниматься?)

[identity profile] 109.livejournal.com 2008-02-22 11:27 pm (UTC)(link)
вот что я тебе скажу... ты - теоретик (в хорошем смысле этого слова). а мне вот, например, говорят, что в этом квартале лимит бабла на железо - 500К, хочешь больше - иди к стивбалмеру. а систему-то всё равно вынь да положь, regardless.

[identity profile] nezyy7.livejournal.com 2014-01-06 09:06 am (UTC)(link)
Автор молодца