27
Вы решили написать собственное хранилище данных Илья Космодемьянский

Вы решили написать собственное хранилище (Илья Космодемьянский)

  • Upload
    ontico

  • View
    374

  • Download
    1

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Вы решили написать собственное хранилище (Илья Космодемьянский)

Вы  решили  написать  собственное  хранилище  данных  

Илья  Космодемьянский  

Page 2: Вы решили написать собственное хранилище (Илья Космодемьянский)

Данные  

•     Традиционно  хранят  в  СУБД  •     Данные  нужно  хранить  надежно  •     С  данными  нужно  производить  действия:  CRUD  •     CR  –  «просто»,  UD  –  «сложно»  •     Хранилища  данных  имеют  специализацию  

Page 3: Вы решили написать собственное хранилище (Илья Космодемьянский)

Зачем  писать  свое  хранилище?  Распростарненные  случаи  

•     «Делали  на  MySQL,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»  

•     Уперлись  в  мастер  •     Медленные  join’ы  

•   «И  вообще  все  криво»  •   «Хотим  искать  максимальную  клику  графа  и  чтоб  нам  за  это  ничего  не  было»  

Page 4: Вы решили написать собственное хранилище (Илья Космодемьянский)

Зачем  писать  свое  хранилище?  Распростарненные  случаи  

•     «Делали  на  MySQL,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»  

•     «Делали  на  Postgres,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»  

•     «Не  репликация  а  черти  что»  •     «Не  смогли  научить  использовать  правильный  индекс»  •     «И  вообще  все  криво»  •     «Хотим  найти  все  циклы  в  произвольном  графе  и  чтобы              нам  за  это  ничего  не  было»  

Page 5: Вы решили написать собственное хранилище (Илья Космодемьянский)

Зачем  писать  свое  хранилище?  Распростарненные  случаи  

•     «Делали  на  MySQL,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»  

•     «Делали  на  Postgres,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»  •     «Делали  на  Oracle,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»  

•     «Хотим  мультимастер  в  две  стороны»  •     «Не  смогли  научить  использовать  правильный  индекс»  •     «Очень  сложно,  Concepts  читать  долго,  много  воды»  •     «Хотим  перемножать  матрицы  за  O(1)  и  чтоб  золотая              рыбка  была  у  меня  на  посылках»  

Page 6: Вы решили написать собственное хранилище (Илья Космодемьянский)

Зачем  писать  свое  хранилище?  Распростарненные  случаи  

•     «Делали  на  MySQL,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»  

•     «Делали  на  Postgres,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»  •     «Делали  на  Oracle,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»  •     «Делали  на  DB2/MSSQL/Sybase  …  whatever»  

Page 7: Вы решили написать собственное хранилище (Илья Космодемьянский)

Зачем  писать  свое  хранилище?  Распростарненные  случаи  

•     «Делали  на  MySQL,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»  

•     «Делали  на  Postgres,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»  •     «Делали  на  Oracle,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»  •     «Делали  на  DB2/MSSQL/Sybase  …  whatever»  

•     «А  давайте  запилим  что-­‐нибудь  высокотехнологичное  –  будем  как…»  

Page 8: Вы решили написать собственное хранилище (Илья Космодемьянский)

Зачем  писать  свое  хранилище?  Распростарненные  случаи  

•     «Делали  на  MySQL,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»  

•     «Делали  на  Postgres,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»  •     «Делали  на  Oracle,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»  •     «Делали  на  DB2/MSSQL/Sybase  …  whatever»  

•     «А  давайте  запилим  что-­‐нибудь  высокотехнологичное  –  будем  как…»  •     «Чтоб  разгрузить  БД,  нужно  простенькое  быстрое  хранилище»  !!!  

Page 9: Вы решили написать собственное хранилище (Илья Космодемьянский)

Вобщем  решили  писать  с  нуля  

Ну  или  почти  с  нуля  –  не  суть  ;-­‐)  

Page 10: Вы решили написать собственное хранилище (Илья Космодемьянский)

Надежность  хранилища  Mission  cri>cal?  

Перевод  денег  со  счета  на  счет  в  банке  

Порядок  постов  во  френдленте  

Где  граница?  

Page 11: Вы решили написать собственное хранилище (Илья Космодемьянский)

Надежности  мешают  отказы  Хороший  термин  Failure,  переведем  его  как  Падение  

•     Падает  железо  •     Падает  ПО  •     Непродуманый  дизайн  ПО  ведет  к  падениям  •     Нерадивый  админ  нажал  не  на  ту  кнопку  и  все  упало  

Потенциальная    проблема  

Случившаяся  проблема  

Ошибка   Падение  (ошибка  которую    

нельзя  обработать)  

Page 12: Вы решили написать собственное хранилище (Илья Космодемьянский)

Начинаем  с  простого  

D  

Page 13: Вы решили написать собственное хранилище (Илья Космодемьянский)

Добавляем  надежность  

D3  D1   D2  

Dm  

Простое  и  логичное  решение!  

Page 14: Вы решили написать собственное хранилище (Илья Космодемьянский)

Это  был  подход    «Чтобы  не  падало»  

Почему  плохо  

•     Сразу  две  проблемы  –  и  с  чтением  и  записью  •     Непроизводительно  

Page 15: Вы решили написать собственное хранилище (Илья Космодемьянский)

Быстро  поднятое  не  считается  упавшим  

•     Исходим  из  того,  что  система  всё  равно  когда-­‐нибудь  может  упасть  •     Минимизируем  потери  

Page 16: Вы решили написать собственное хранилище (Илья Космодемьянский)

Атомарность  

D1   D2  

Такая  последовательность  действий  восстановима  

Page 17: Вы решили написать собственное хранилище (Илья Космодемьянский)

Конкурентный  доступ  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: Вы решили написать собственное хранилище (Илья Космодемьянский)

Конкурентный  доступ  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: Вы решили написать собственное хранилище (Илья Космодемьянский)

Конкурентный  доступ  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: Вы решили написать собственное хранилище (Илья Космодемьянский)

Свойства  действий  с  блоками  данных  •     Атомарность  •     Целостность  –  набор  правил  для  данных  •     Долговечность    

Действие,  обладающее  такими  свойствами  есть  транзакция  

Page 21: Вы решили написать собственное хранилище (Илья Космодемьянский)

Быстрая  восстановимость  

•     Версии  

D0   D1   VN  

А  если  упали  на  смене  VN?  Если  все  действие  прошло  успешно,  

 достигнут  Commit  point  

Page 22: Вы решили написать собственное хранилище (Илья Космодемьянский)

Быстрая  восстановимость  

•     Версии  •     Пишем  лог  

 Изоляция/корректность  –  легко  без  производительности

Page 23: Вы решили написать собственное хранилище (Илья Космодемьянский)

T1   T2  

r1[x]   w2[x]  

w2[y]  w1[y]  

w2[y]  w1[y]  r1[x]   w2[x]   -­‐  корректная  история  

Направление  стрелок  –    порядок  выполненения  конфликтующих  действий  

История  корректна  если    эквивалентна    последовательному    выполнению  транзакций  –    сериализуема  

T2  

T3  

T4  T1  

Граф  действий  /  граф  конфликтов  

Если  нет  циклов,  то  историю  на  которой  он  построенможно  сериализовать  

Некорректная  история  –    

падение  и  нарушение  целостности  

Page 24: Вы решили написать собственное хранилище (Илья Космодемьянский)

2PL  •     с  конфликтами  борятся  блокировками  –  блокирующий  шедулер  •     двухфазное  блокирование  –  сначала  выставляем  все  блокировки,  ни  одна                блокировка  не  может  быть  снята  пока  не  выставлены  все    

•     С  помощью  2PL  мы  добиваемся  изоляции  при  сохранении          производительности  

Page 25: Вы решили написать собственное хранилище (Илья Космодемьянский)

Мы  построили  хранилище  на  отдельно  взятой  машине  

•     Объективно  машина  не  справляется.  Что  дальше?  •     Scale  out  –  репликация  и  шардинг  •     Асинхронный  месседжинг  –  очереди  –  что  они  дают  •     Распределенные  транзакции  –  если  до  этого  было  еще  не  страшно  

Page 26: Вы решили написать собственное хранилище (Илья Космодемьянский)

Нерассмотренные  важные  моменты  

•  Сеть и производительность •     Мониторинг  

•     capex/opex  

Page 27: Вы решили написать собственное хранилище (Илья Космодемьянский)

Возвращаемся  к  постановке  задачи  

•  Данные не должны браться из ниоткуда и не должны пропадать •  Данные связаны между собой •   Устранены-­‐ли  проблемы  по  которым  нас  не  устраивала  СУБД  •   Сколько  мы  на  это  все  потратитли  и  сколько  еще  потратим?