Вы решили написать собственное хранилище (Илья...
DESCRIPTION
TRANSCRIPT
![Page 1: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/1.jpg)
Вы решили написать собственное хранилище данных
Илья Космодемьянский
![Page 2: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/2.jpg)
Данные
• Традиционно хранят в СУБД • Данные нужно хранить надежно • С данными нужно производить действия: CRUD • CR – «просто», UD – «сложно» • Хранилища данных имеют специализацию
![Page 3: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/3.jpg)
Зачем писать свое хранилище? Распростарненные случаи
• «Делали на MySQL, устали – теперь хотим чего-‐либо более светлого»
• Уперлись в мастер • Медленные join’ы
• «И вообще все криво» • «Хотим искать максимальную клику графа и чтоб нам за это ничего не было»
![Page 4: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/4.jpg)
Зачем писать свое хранилище? Распростарненные случаи
• «Делали на MySQL, устали – теперь хотим чего-‐либо более светлого»
• «Делали на Postgres, устали – теперь хотим чего-‐либо более светлого»
• «Не репликация а черти что» • «Не смогли научить использовать правильный индекс» • «И вообще все криво» • «Хотим найти все циклы в произвольном графе и чтобы нам за это ничего не было»
![Page 5: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/5.jpg)
Зачем писать свое хранилище? Распростарненные случаи
• «Делали на MySQL, устали – теперь хотим чего-‐либо более светлого»
• «Делали на Postgres, устали – теперь хотим чего-‐либо более светлого» • «Делали на Oracle, устали – теперь хотим чего-‐либо более светлого»
• «Хотим мультимастер в две стороны» • «Не смогли научить использовать правильный индекс» • «Очень сложно, Concepts читать долго, много воды» • «Хотим перемножать матрицы за O(1) и чтоб золотая рыбка была у меня на посылках»
![Page 6: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/6.jpg)
Зачем писать свое хранилище? Распростарненные случаи
• «Делали на MySQL, устали – теперь хотим чего-‐либо более светлого»
• «Делали на Postgres, устали – теперь хотим чего-‐либо более светлого» • «Делали на Oracle, устали – теперь хотим чего-‐либо более светлого» • «Делали на DB2/MSSQL/Sybase … whatever»
![Page 7: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/7.jpg)
Зачем писать свое хранилище? Распростарненные случаи
• «Делали на MySQL, устали – теперь хотим чего-‐либо более светлого»
• «Делали на Postgres, устали – теперь хотим чего-‐либо более светлого» • «Делали на Oracle, устали – теперь хотим чего-‐либо более светлого» • «Делали на DB2/MSSQL/Sybase … whatever»
• «А давайте запилим что-‐нибудь высокотехнологичное – будем как…»
![Page 8: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/8.jpg)
Зачем писать свое хранилище? Распростарненные случаи
• «Делали на MySQL, устали – теперь хотим чего-‐либо более светлого»
• «Делали на Postgres, устали – теперь хотим чего-‐либо более светлого» • «Делали на Oracle, устали – теперь хотим чего-‐либо более светлого» • «Делали на DB2/MSSQL/Sybase … whatever»
• «А давайте запилим что-‐нибудь высокотехнологичное – будем как…» • «Чтоб разгрузить БД, нужно простенькое быстрое хранилище» !!!
![Page 9: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/9.jpg)
Вобщем решили писать с нуля
Ну или почти с нуля – не суть ;-‐)
![Page 10: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/10.jpg)
Надежность хранилища Mission cri>cal?
Перевод денег со счета на счет в банке
Порядок постов во френдленте
Где граница?
![Page 11: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/11.jpg)
Надежности мешают отказы Хороший термин Failure, переведем его как Падение
• Падает железо • Падает ПО • Непродуманый дизайн ПО ведет к падениям • Нерадивый админ нажал не на ту кнопку и все упало
Потенциальная проблема
Случившаяся проблема
Ошибка Падение (ошибка которую
нельзя обработать)
![Page 12: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/12.jpg)
Начинаем с простого
D
![Page 13: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/13.jpg)
Добавляем надежность
D3 D1 D2
Dm
Простое и логичное решение!
![Page 14: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/14.jpg)
Это был подход «Чтобы не падало»
Почему плохо
• Сразу две проблемы – и с чтением и записью • Непроизводительно
![Page 15: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/15.jpg)
Быстро поднятое не считается упавшим
• Исходим из того, что система всё равно когда-‐нибудь может упасть • Минимизируем потери
![Page 16: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/16.jpg)
Атомарность
D1 D2
Такая последовательность действий восстановима
![Page 17: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/17.jpg)
Конкурентный доступ S = 1000RUR
send_money(S, B, 100 ) A1
send_money(S, B, 200 ) A2
S = 900RUR ?
S = 800RUR ?
S = 700RUR !
A1
A1
A2
A2
затем
затем или
![Page 18: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/18.jpg)
Конкурентный доступ S = 1000RUR
send_money(S, B, 100 ) A1
send_money(S, B, 200 ) A2
S = 900RUR ?
S = 800RUR ?
S = 700RUR !
A1
A1
A2
A2
затем
затем или
Изоляция
![Page 19: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/19.jpg)
Конкурентный доступ S = 1000RUR
send_money(S, B, 100 ) A1
send_money(S, B, 200 ) A2
S = 900RUR ?
S = 800RUR ?
S = 700RUR !
A1
A1
A2
A2
затем
затем или
Изоляция
Восстановимость + изоляция = атомарность
![Page 20: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/20.jpg)
Свойства действий с блоками данных • Атомарность • Целостность – набор правил для данных • Долговечность
Действие, обладающее такими свойствами есть транзакция
![Page 21: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/21.jpg)
Быстрая восстановимость
• Версии
D0 D1 VN
А если упали на смене VN? Если все действие прошло успешно,
достигнут Commit point
![Page 22: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/22.jpg)
Быстрая восстановимость
• Версии • Пишем лог
Изоляция/корректность – легко без производительности
![Page 23: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/23.jpg)
T1 T2
r1[x] w2[x]
w2[y] w1[y]
w2[y] w1[y] r1[x] w2[x] -‐ корректная история
Направление стрелок – порядок выполненения конфликтующих действий
История корректна если эквивалентна последовательному выполнению транзакций – сериализуема
T2
T3
T4 T1
Граф действий / граф конфликтов
Если нет циклов, то историю на которой он построенможно сериализовать
Некорректная история –
падение и нарушение целостности
![Page 24: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/24.jpg)
2PL • с конфликтами борятся блокировками – блокирующий шедулер • двухфазное блокирование – сначала выставляем все блокировки, ни одна блокировка не может быть снята пока не выставлены все
• С помощью 2PL мы добиваемся изоляции при сохранении производительности
![Page 25: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/25.jpg)
Мы построили хранилище на отдельно взятой машине
• Объективно машина не справляется. Что дальше? • Scale out – репликация и шардинг • Асинхронный месседжинг – очереди – что они дают • Распределенные транзакции – если до этого было еще не страшно
![Page 26: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/26.jpg)
Нерассмотренные важные моменты
• Сеть и производительность • Мониторинг
• capex/opex
![Page 27: Вы решили написать собственное хранилище (Илья Космодемьянский)](https://reader034.vdocuments.pub/reader034/viewer/2022042513/548c9b26b4795961318b4602/html5/thumbnails/27.jpg)
Возвращаемся к постановке задачи
• Данные не должны браться из ниоткуда и не должны пропадать • Данные связаны между собой • Устранены-‐ли проблемы по которым нас не устраивала СУБД • Сколько мы на это все потратитли и сколько еще потратим?