Re[9]: NoSQL победили
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.07.18 19:53
Оценка: :)
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, gandjustas, Вы писали:


G>>Можешь подробнее?

V>По ссылке ходил?
Да, там про replica set. Какое отношение к кэширванию оно имеет?
Re[12]: NoSQL победили
От: Cyberax Марс  
Дата: 24.07.18 19:54
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

C>>Такого не допускается. Счётчики товара строго транзакционны. То как оно обеспечивается — отдельная и длинная история.

G>Давай с этого места поподробнее. Как обеспечивается транзакционность счетчиков?
В другом сообщении описал.

C>>Транзакций нет, о них можно забыть. Есть только некоторые атомарные операции, которые работают на уровне одной записи.

G>Атомарные операции — не транзакции?
Они не затрагивают больше одной записи. В классических РСУБД терминах — ровно как autocommit.

G>И как работает атомарность при покупке нескольких товаров? Если два клиента заказывают два товара но в разной последовательности.

Нормально работают.
Sapienti sat!
Re[7]: NoSQL победили
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.07.18 19:57
Оценка: +1
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, gandjustas, Вы писали:


G>>О каких объёмах речь?

G>>10 миллиардов строк — 40 ТБ данных на ms sql. На ОДНОМ сервере, работает нормально. Там правда охренеть какой сторедж.

V>"Одноклассники" обрабатывают в пике до миллиона запросов в секунду при объеме даных на сегодня в 50 ТБ.

Каждый запрос обрабатывает все 50 ТБ ? Или ты просто так цифры привел?

V>Никакая РСУБД в "чистом виде" это не потянет.

Миллион запросов в секунду — это каких запросов? Обычная СУБД может и миллион в секунду потянуть, если будет достаточно памяти, дисков и ядре процессора.

Только если надо миллон раз в секунду обрабатывать 50ТБ, то тут уже никто не справится.
Re[6]: NoSQL победили
От: Cyberax Марс  
Дата: 24.07.18 19:58
Оценка:
Здравствуйте, gandjustas, Вы писали:

C>>С чего бы? А кто будет обеспечивать переходные процессы, при resharding'е или failover'у?

G>failover и шардинг вещи ортогональные.
Один шард очень горячий и должен быть разбит. Кто будет это делать?

G>>>Автоматически перераспределить данные при появлении нового шарда — это какая из NoSQL баз умеет?

C>>Все? Mongo, DynamoDB — точно.
G>Это с помощью middleware делается. Поверх postgres я видел аналогичную мидлварь, увы не могу вспомнить название.
Можно сцылки?

C>>Да. Чтобы при повышении нагрузки приложение не тормозило. Новые узлы берутся из облака или пула свободных хостов (если on-premise).

G>Если мы говорим об облаке, то в SQL Azre есть elastic scale.
Да-да. Oracle так же говорил про RAC. Только это всё чистая и наглая ложь, РСУБД не масштабируются без потери ACID.

C>>TPC-C — это вообще смех на палочке. Я уже привёл примеры масштаба — у Амазона хранилище выдерживает миллионы запросов в секунду. Это почти на три порядка больше, чем лучший результат TPC-C.

G>Соре, но амазон один такой. Его пример вовсе не является оптимальным для других систем.
Не один. Таких задач полно.
Sapienti sat!
Re[5]: NoSQL победили
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.07.18 20:02
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, gandjustas, Вы писали:


G>>Итак простой пример зачем нужен ACID:


G>>Вот ты такой умный собрал систему как описал выше. Система для продажи билетов в кино\театр\еще куданить.

G>>И внезапно одновременно два человека в разных кассах покупают билеты на одни и те же места на один и тот же сеанс.
G>>Оба "клиента" пишут в 100 нод, 90 из которых эту инфу теряют. То есть реальная запись происходит в 10 нодах. На обоих клиентах эти 10 нод разные.
G>>В итоге твоя система с легкостью продает два билета на одно место.

V>Не продаёт.

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

V>Такие операции работают через подтверждение, т.е. максимум что страшного можеть случиться — две операции будут поставлены в очередь на обработку, хотя одну из них можно было в очередь превентивно не ставить. Ну и потом, кто будет второй, тому придёт отлуп "ай нет, сорри, все-таки уже продали билеты".

Ага, это и называется WAL в ручную поверх NoSQL.
А потом еще наступает понимание, что нужны еще и транзакции на несколько строк\документов.

V>На очередях прекрасно можно реализовать ACID, не лоча при этом единовременно все сущности.

V>Собсно, суть всех lock-free алгоритмов примерно такая же.
Да-да, и все эти алгоритмы уже реализованы в РСУБД в механизме ЛОГА.

V>В этом смысле РСУБД обеспечивает столкновение на условных мьютексах, а система с очередями — на условных "неподвижных точках", которые крутятся вокруг некоего прикладного условия.

Ты сам понял что написал?


Для пользователя все равно мьютексы так или еще что-то. Билеты или проданы или нет — это пользователю важно.
Re[9]: NoSQL победили
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.07.18 20:05
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>Здравствуйте, gandjustas, Вы писали:


g>> AB>Объемы HBase/Hadoop/&Co начинаются от десятков-сотен ТБ (до первого ПБ это такой игрушечный кластер на десяток-другой серверов).

g>> Что за данные и что за задача решается?

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

Так у вас есть конкретные задачи которые так решаются или только абстрактные сведения?


AB>Цитата: "Поисковые логи и индексы, пользовательские данные, картографическая информация, промежуточные данные и результаты алгоритмов машинного обучения — все это может занимать сотни петабайт дискового пространства." (это про YT, но для обсуждаемого вопроса не принципиально).

Ключевое выделил.
Re[5]: NoSQL победили
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.07.18 20:10
Оценка:
Здравствуйте, chaotic-kotik, Вы писали:

CK>Здравствуйте, gandjustas, Вы писали:


G>>Что значит "шардинг в автоматическом режиме" ?

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

G>>Что значит "автоскейлинг" ?

G>>Автоматически поднимать новые ноды когда что-то на существующих кончается? Этим точно должен движок СУБД заниматься? И откуда свободное железо будет браться?

CK>NoSQL базы легко масштабируются (ваш кэп), обычно автоскейлинг работает так, пишем скрипт, который по ряду параметров (load average, latency) решает что ресурсов мало и разворачивает новые инстансы, после чего указывает субд на них. то же самое делается для даунскейлинга. С EC2 + CloudWatch это все довольно тривиально. Попробуй сделать что-то похожее со своей РСУБД.

SQL Azure умеет не хуже. Даже лучше во многих местах.
А что касается наземной, а не облачной истории, то выгоднее тупо больше железа зарезервировать под СУБД.

CK>Нормальная NoSQL СУБД это cattle, инстансы там могут появляться/исчезать довольно легко, большинство РСУБД это pets.

И что это дает?
Внезапно за земле cattle имеет слишком большой оверхэд.


G>>Ты вместо маркетиногового булшита приводи реальные сценарии использования. Окажется что единственный реальный сценарий для NoSQL это "положить данные и взять по ключу без гарантий записи на диск". То есть кэш.

CK>с чего ты взял что нет гарантии записи на диск?
Потому что с гарантией записи все преимущества nosql баз теряются, она начинают работать не быстрее взрослых субд.

G>>Я видел TPC-C, видел банковский процессинг, видел интернет-магазин с большой нагрузкой — везде нормализованные таблицы. Даже в stackoverflow нормализованные. Мамкин хайлоад с базой на 30 гб, где большая денормализованная таблица и джоины силами приложения, там и рядом не валялся.

CK>я видел веб проект с милионной аудиторией на РСУБД, где база использовалась именно так
И? Ты теперь считаешь этот пример показательным? Вот ты на сайте RSDN. Нагрузка немаленькая, железо не космическое и таблицы нормализованные.
Re[5]: NoSQL победили
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.07.18 20:15
Оценка:
Здравствуйте, chaotic-kotik, Вы писали:

CK>Здравствуйте, gandjustas, Вы писали:


G>>Ты не представляешь глубину всей глупости, которую написал.


CK>фи


G>>Итак простой пример зачем нужен ACID:


G>>Вот ты такой умный собрал систему как описал выше. Система для продажи билетов в кино\театр\еще куданить.

G>>И внезапно одновременно два человека в разных кассах покупают билеты на одни и те же места на один и тот же сеанс.
G>>Оба "клиента" пишут в 100 нод, 90 из которых эту инфу теряют. То есть реальная запись происходит в 10 нодах. На обоих клиентах эти 10 нод разные.
G>>В итоге твоя система с легкостью продает два билета на одно место.

G>>Ты получил по шапке за такую архитектуру и начал переделывать. Затребовал "кворум" при записи, чтобы 50%+1 одна нода возвращали что данные записаны. Система стала гораздо тормознее.

G>>А все равно продаются по два билета. Потому что запись идет на 51 одну ноду, но данные читаются из остальных 49. И тут ты понял что тебе нужна атомарность (A из ACID).

CK>Есть такая штука, consistent read называется. Система гоняет кворум не только на запись но и на чтение.

И что? Ты или пишешь в те ноды, из которых потом читаешь, или продаешь два билета на место. Про это как раз написано сразу после процитированного тобой блока.


CK>И BTW, у тебя данные будут храниться не на всех нодах а на %replication-factor% нодах (на пяти например), поэтому кворум ты будешь гонять не между всеми нодами а только между пятью.

Тут конечно можно играться кворумом, но надо понимать, что при отвале кворума все стопорится. И нет смысла в твоих 100 нодах если при падении двух из них ты не можешь продавать билеты.
Re[13]: Консенсус
От: Sharov Россия  
Дата: 24.07.18 20:36
Оценка:
Здравствуйте, Cyberax, Вы писали:

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


И? Рано или поздно консенсус же должен отработать. Где проблема-то?
Кодом людям нужно помогать!
Re[6]: NoSQL победили
От: Sharov Россия  
Дата: 24.07.18 20:48
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Тут конечно можно играться кворумом, но надо понимать, что при отвале кворума все стопорится. И нет смысла в твоих 100 нодах если при падении двух из них ты не можешь продавать билеты.


Будет новый раунд консенсуса, не более. Стопориться ничего не будет.
Кодом людям нужно помогать!
Отредактировано 24.07.2018 23:59 Sharov . Предыдущая версия .
Re[13]: NoSQL победили
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.07.18 20:49
Оценка:
Здравствуйте, Cyberax, Вы писали:

WH>>Как конкретно такое не допускается если счётчики товаров лежат в разных шардах?

C>С помощью идемпотентных изменений. Чем-то напоминает транзакции, да.
C>Проблема в том, что при классических распределённых транзакциях блокировки должны проходить через центральный узел (который умрёт) или будут требоваться оптимистические блокировки с повторами (привет экспоненте).

Какие-то взаимоисключающие параграфы.

Итак, у тебя есть заказ на товар А и Б. Счетчики лежат в разных шардах. Тебе их надо одновременно два уменьшить.
Куда будет отправляться идемпотентная команда, уменьшающая каждый из них, чтобы у тебя не возникло гонки с другой транзакцией также содержащей товары А и Б?
Re[13]: NoSQL победили
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.07.18 20:50
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>>>Транзакций нет, о них можно забыть. Есть только некоторые атомарные операции, которые работают на уровне одной записи.

G>>Атомарные операции — не транзакции?
C>Они не затрагивают больше одной записи. В классических РСУБД терминах — ровно как autocommit.

G>>И как работает атомарность при покупке нескольких товаров? Если два клиента заказывают два товара но в разной последовательности.

C>Нормально работают.

Не юли, а ответь на вопрос.
Есть две параллельные транзакции на товары А и Б. Счетчики в разных шардах, как обеспечивается их атомарное уменьшение?
Re[13]: NoSQL победили
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.07.18 20:51
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, gandjustas, Вы писали:


C>>>Такого не допускается. Счётчики товара строго транзакционны. То как оно обеспечивается — отдельная и длинная история.

G>>Давай с этого места поподробнее. Как обеспечивается транзакционность счетчиков?
C>В другом сообщении описал.

И ответь всетаки чем из CAP жертвуется? Я так понимаю что availability.
Re[7]: NoSQL победили
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.07.18 20:55
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте, gandjustas, Вы писали:


G>>Тут конечно можно играться кворумом, но надо понимать, что при отвале кворума все стопорится. И нет смысла в твоих 100 нодах если при падении двух из них ты не можешь продавать билеты.

S>Будет новый раунд корпуса, не более. Стопориться ничего не будет.
Количество раундов заранее сверху ограничено?
Re[12]: NoSQL победили
От: Cyberax Марс  
Дата: 24.07.18 21:33
Оценка: 14 (7) +2
Здравствуйте, jazzer, Вы писали:

WH>>>Если их нет, то как идёт обработка ситуации что одного из нескольких товаров не оказалось на складе?

C>>Такого не допускается. Счётчики товара строго транзакционны. То как оно обеспечивается — отдельная и длинная история.
J>рассказывай
Счётчики разделены между шардами, при этом каждый шард получает квоту на запись. Т.е. если у нас 10000 разрешений (скажем, товаров на складе) и 5 шардов, то каждый шард может автономно выдать 2000 разрешений.

Текущее общее значение оставшихся разрешений — eventually consistent и неспешно синхронизируется между шардами.

Естественно, при низких значениях доступных разрешений нужна особая обработка — в опустевшие шарды добавляется "перенаправление" на шарды с ещё оставшимися разрешениями. Там тоже интересный алгоритм, который этим занимается.

Сами счётчики организованы как множества транзакций. Т.е. операция "взять разрешение" выглядит как "записать ID операции в множество завершённые_операции и уменьшить значение счётчика, если ID операции не в множестве завершённые_операции и счётчик больше нуля". Это гарантирует идемпотентность операции, её можно повторять произвольное число раз. Соответственно, откат выглядит как обратная операция и он тоже идемпотентный.

Когда транзакция полностью завершена, ID операции убирается из множества "завершённые_операции". ID операции так же состоит из времени начала операции и уникального случайного 64-битного числа, так что специальная задача (reconciler) в фоновом режиме сканирует все счётчики и вычищает транзакции, которые длятся слишком долго.

Ещё есть очень интересная оптимизация — идемпотентные операции можно безопасно группировать, что невозможно с классическими транзакциями. Так что когда шард получает запрос, он не выполняет его сразу же, а кладёт в очередь и начинает ждать ответа. И каждые 10-20 миллисекунд накопившиеся в очереди запросы всей пачкой выполняются, и результаты отдаются ждущим клиентам. Таким образом, количество операций получается ограничено интервалом времени, при сбросе значений каждые 20 мс. у нас всего 50 операций записи в секунду.

Это так по верхам, самые интересные части.
Sapienti sat!
Re[14]: NoSQL победили
От: Cyberax Марс  
Дата: 24.07.18 22:09
Оценка: 3 (2) +1
Здравствуйте, gandjustas, Вы писали:

G>>>Давай с этого места поподробнее. Как обеспечивается транзакционность счетчиков?

C>>В другом сообщении описал.
G>И ответь всетаки чем из CAP жертвуется? Я так понимаю что availability.
Consistency. Она обеспечивается частично — есть гарантия того, что нельзя продать больше товаров, чем есть на складе. Но нет гарантии, что клиент может купить товар, если товар ещё доступен.
Sapienti sat!
Re[13]: NoSQL победили
От: paucity  
Дата: 24.07.18 22:10
Оценка: +2
Здравствуйте, Cyberax, Вы писали:

C>Счётчики разделены между шардами, при этом каждый шард получает квоту на запись. Т.е. если у нас 10000 разрешений (скажем, товаров на складе) и 5 шардов, то каждый шард может автономно выдать 2000 разрешений.


C>Текущее общее значение оставшихся разрешений — eventually consistent и неспешно синхронизируется между шардами.


C>Естественно, при низких значениях доступных разрешений нужна особая обработка — в опустевшие шарды добавляется "перенаправление" на шарды с ещё оставшимися разрешениями. Там тоже интересный алгоритм, который этим занимается.


C>Сами счётчики организованы как множества транзакций. Т.е. операция "взять разрешение" выглядит как "записать ID операции в множество завершённые_операции и уменьшить значение счётчика, если ID операции не в множестве завершённые_операции и счётчик больше нуля". Это гарантирует идемпотентность операции, её можно повторять произвольное число раз. Соответственно, откат выглядит как обратная операция и он тоже идемпотентный.


C>Когда транзакция полностью завершена, ID операции убирается из множества "завершённые_операции". ID операции так же состоит из времени начала операции и уникального случайного 64-битного числа, так что специальная задача (reconciler) в фоновом режиме сканирует все счётчики и вычищает транзакции, которые длятся слишком долго.


C>Ещё есть очень интересная оптимизация — идемпотентные операции можно безопасно группировать, что невозможно с классическими транзакциями. Так что когда шард получает запрос, он не выполняет его сразу же, а кладёт в очередь и начинает ждать ответа. И каждые 10-20 миллисекунд накопившиеся в очереди запросы всей пачкой выполняются, и результаты отдаются ждущим клиентам. Таким образом, количество операций получается ограничено интервалом времени, при сбросе значений каждые 20 мс. у нас всего 50 операций записи в секунду.


C>Это так по верхам, самые интересные части.


В итоге получатся (в свете субжекта этой дискуссии), что, собственно, не NoSQL "победил" сам по себе, а тонна кастомного кода
Re[10]: NoSQL победили
От: Anton Batenev Россия https://github.com/abbat
Дата: 24.07.18 22:24
Оценка:
Здравствуйте, gandjustas, Вы писали:

g> Так у вас есть конкретные задачи которые так решаются или только абстрактные сведения?


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

g> AB>Цитата: "Поисковые логи и индексы, пользовательские данные, картографическая информация, промежуточные данные и результаты алгоритмов машинного обучения — все это может занимать сотни петабайт дискового пространства." (это про YT, но для обсуждаемого вопроса не принципиально).

g> Ключевое выделил.

Ты же понимаешь, что это всего лишь фигура речи и оно там реально столько занимает? Если хочешь конкретных цифр, например вот для ClickHouse речь идет про 17 ПБ "сырых" данных без дублирования и репликации (и это было 4 года назад, и только для одной из подсистем, если верить написанному).
Re[13]: NoSQL победили
От: Danchik Украина  
Дата: 24.07.18 22:43
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Счётчики разделены между шардами, при этом каждый шард получает квоту на запись. Т.е. если у нас 10000 разрешений (скажем, товаров на складе) и 5 шардов, то каждый шард может автономно выдать 2000 разрешений.


C>Текущее общее значение оставшихся разрешений — eventually consistent и неспешно синхронизируется между шардами.


C>Естественно, при низких значениях доступных разрешений нужна особая обработка — в опустевшие шарды добавляется "перенаправление" на шарды с ещё оставшимися разрешениями. Там тоже интересный алгоритм, который этим занимается.


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

C>Это так по верхам, самые интересные части.

Как раз наоборот
Re[14]: Консенсус
От: Cyberax Марс  
Дата: 24.07.18 22:50
Оценка:
Здравствуйте, Sharov, Вы писали:

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

S>И? Рано или поздно консенсус же должен отработать. Где проблема-то?
Проблема в том, что для consistent-транзакций консенсус надо запускать при чтении данных, а не записи.

Т.е. в природе нет consistent write, есть только consistent read.
Sapienti sat!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.