Технологии хранения и обработки больших объёмов...
TRANSCRIPT
технологии хранения и обработкибольших объёмов данныхAmazon Dynamo. Google Spanner
Дмитрий Барашев29 апреля 2016
Computer Science Center
Этот материал распространяется под лицензией
Creative Commons”Attribution - Share Alike” 3.0
http://creativecommons.org/licenses/by-sa/3.0/us/deed.ru
сверстано в онлайн LATEX редакторе
P
a
peeriapapeeria.com
сегодня в программе
Amazon Dynamo
Google Spanner: глобально распределённаяБД
3/40
amazon dynamo
• Хранилище с моделью ”ключ-значение”• Распределённое, высокодоступное, с низкимвременем отклика
• Децентрализовнное, без единой точки отказа• Согласованное в конечном счёте• Разработка 2004-2010 годов, сейчас замененаDynamo DB
4/40
ключевые аспекты
• Модель использования и гарантии• Разбиение данных• Модель репликации• Модель согласованности
5/40
модель использования
• Клиенты пишут и читают объекты по строковомуключу
• Значение с точки зрения хранилищабессмысленное
• Клиенты хотят высокой доступности на запись инизкого времени отклика
6/40
разбиение данных
• Консистентное хеширование• пространство хеш-значений функции hзакольцовано
• каждому узлу хранения i соответствует точкана кольце Ri
• чтобы найти узел для хранения ключа k, надовычислить h(k) и найти ближайшую Ri ≥ h(k)
• Узел i обслуживает сегмент от Ri−1 до Ri• Что если узел упадёт?
7/40
репликация значений
• Для надежности значения записываются на Nузлов в порядке возрастания сегментов
• Для каждого ключа k известен предпочитаемыйсписок¹ узлов, хранящих его значение
• Если один из узлов из предпочитаемого спискавременно выйдет из строя, оставшиеся обслужатзапросы
¹preference list
8/40
чтение и запись
• Клиент может выбрать количество узлов записи Wи узлов чтения R в зависимости от требований
• Произвольный узел из предпочитаемого спискастановится координатором чтения/записи
• Запись удалась, если её подтвердили W узлов• Чтение удалось, если пришёл ответ от R узлов• Координатор и клиент занимаются сведениемнесогласованных значений во время чтения
9/40
модель согласованности
• Dynamo устойчиво к падениям и распаду сети• Могут появиться разные версии значений• Кто-то должен свести разные версии к единой
10/40
векторные часы
• Каждый узел хранит с каждым ключом-значениемего векторные часы
• Векторные часы – набор пар (номер узла, версия)• Когда узел производит запись, он увеличиваетверсию в своих часах
• Клиент передаёт значения часов при записи икоординатор собирает их при чтении
11/40
сравнение часов
• Если в часах Ci каждая компонента ≥соответствующей компоненте часов Cj то естьчастичный порядок Ci ≥ Cj
• Наличие частичного порядка говорит опричинно-следственной связи: узел i в курсе обистории значений узла j и, возможно,знает оновой истории
• При чтении. если Ci ≥ Cj то Cj можно игнорировать• Если частичного порядка нет, то согласованиемзанимается клиент
• При записи клиент создаёт новое значение часов,которое считается согласованным значением
12/40
возможная история часов
13/40
добавление и удаление узлов
• Вре́менная недоступность игнорируется• Если какой-то узел пропустил запись, дляподдержания W может временно использоватьсяследующий узел в кольце
• Постоянное удаление и добавление узлов делаетадминистратор
• Узлы выбирают себе сегменты и рассылаютинформацию об этом соседям
• Информация хаотично передаётся и в концеконцов распространяется по всему кластеру
14/40
меньше катаклизмов
• Добавление узла в произвольном месте приводитк перераспределению ключей
• Часто хочется просто повысить доступностьсегмента
• Более сложная схема назначения сегментов• Пространство делится на одинаковыепартиции
• Список предпочтения отсчитывается не отh(k), а от конца партиции, в которую попалh(k)
15/40
сегодня в программе
Amazon Dynamo
Google Spanner: глобально распределённаяБД
16/40
google spanner
• глобально распределённая• версионированная• транзакционная• строго согласованная• автонастраивающаяся
17/40
предпосылки
• Bigtable шустрая, но не годится для сложныхприложений
• Megastore – надстройка над Bigtable,добавляющая транзакции и SQL-подобный языкзапросов – используется многими приложениями,несмотря на невысокую производительность
• Хочется собрать всё лучшее из миратрадиционных и нетрадиционных СУБД• транзакции + высокая пропускнаяспособность + низкое время отклика +масштабируемость
18/40
используемые технологии
• Распределённая файловая система: Colossus• Алгоритмы консенсуса: Paxos и двухфазноеподтверждение²
• Изоляция транзакций: двухфазные блокировки³ имоментальные срезы⁴
• GPS сигналы и атомные часы
²two-phase commit³two-phase locking⁴snapshot isolation
19/40
используемые технологии
• Распределённая файловая система: Colossus• Алгоритмы консенсуса: Paxos и двухфазноеподтверждение²
• Изоляция транзакций: двухфазные блокировки³ имоментальные срезы⁴
• GPS сигналы и атомные часы
²two-phase commit³two-phase locking⁴snapshot isolation
19/40
spanner с точки зрения клиента
• Модель данных: (ключ, временна́я метка)⇒значение
• Компоненты ключа: название базы данных,название таблицы, идентификатор строки,название столбца
• Корзина⁵ – единица размещения данных⁶
⁵directory, bucket⁶data placement
20/40
размещение данных в bigtable
• В Bigtable единицейразмещения являетсятаблет – непрерывноеподмножество ключей
• Таблет обслуживаетсяодним таблетсервером
• Таблет живет в одномкластере ( датацентре)
21/40
размещение данных в spanner
• В одной корзинемогут находитьсястроки разныхтаблиц
22/40
размещение данных в spanner
• Приложение определяет параметры размещенияи репликации корзины• например: одна корзина на пользователя,корзина реплицируется в трех зонах в Европеи двух в Северной Америке
• Реплики корзин на одном сервере объединяютсяв таблет
23/40
программный стек спан-сервера
24/40
paxos
• Записи производятся в реплики-лидеры• Лидер инициирует очередной раунд Paxos, иутвержденное значение записывается в структурыхранения (B-дерево) и опережающий журнал
• Лидер в Paxos долгоживущий: он продляет своёлидерство во время успешной записи иперевыборами раз в 10 секунд
• Множество реплик таблета называетсяPaxos-группой
25/40
таблица блокировок
• Лидер поддерживает таблицу блокировокдвухфазного протокола
• Блокировки используются для операций записи иread-commited чтения
• Транзакциям, использующим одну Paxos-группудостаточно таблицы блокировок дляподтверждения
26/40
двухфазное подтверждение
• Используется если транзакция затрагиваетнесколько Paxos групп
• Координатор выбирается клиентом• Главная сложность – гарантировать внешнююсогласованность транзакций
27/40
внешняя согласованность
• Если транзакция T1 подтверждается раньше, чемтранзакция T2 начинается, то временна́я меткаподтверждения T1 меньше, чем временна́я меткаподтверждения T2
28/40
внешняя согласованность: зачем
• Если хочется читать моментальные срезы БД изпрошлого
• вы: окей гугл, дай мне состояние, актуальноена момент времени 12 апреля 1961 года 09:07
• гугл: в этот момент кто-то сказал«Поехали!»
• вы: а секундой позже?• гугл: в этот момент кто-то сказал «Ключна зажигание!»
• вы: ой, а точно не наоборот?
29/40
внешняя согласованность: зачем
• Если хочется читать моментальные срезы БД изпрошлого• вы: окей гугл, дай мне состояние, актуальноена момент времени 12 апреля 1961 года 09:07
• гугл: в этот момент кто-то сказал«Поехали!»
• вы: а секундой позже?• гугл: в этот момент кто-то сказал «Ключна зажигание!»
• вы: ой, а точно не наоборот?
29/40
внешняя согласованность: зачем
• Если хочется читать моментальные срезы БД изпрошлого• вы: окей гугл, дай мне состояние, актуальноена момент времени 12 апреля 1961 года 09:07
• гугл: в этот момент кто-то сказал«Поехали!»
• вы: а секундой позже?
• гугл: в этот момент кто-то сказал «Ключна зажигание!»
• вы: ой, а точно не наоборот?
29/40
внешняя согласованность: зачем
• Если хочется читать моментальные срезы БД изпрошлого• вы: окей гугл, дай мне состояние, актуальноена момент времени 12 апреля 1961 года 09:07
• гугл: в этот момент кто-то сказал«Поехали!»
• вы: а секундой позже?• гугл: в этот момент кто-то сказал «Ключна зажигание!»
• вы: ой, а точно не наоборот?
29/40
внешняя согласованность: зачем
• Если хочется читать моментальные срезы БД изпрошлого• вы: окей гугл, дай мне состояние, актуальноена момент времени 12 апреля 1961 года 09:07
• гугл: в этот момент кто-то сказал«Поехали!»
• вы: а секундой позже?• гугл: в этот момент кто-то сказал «Ключна зажигание!»
• вы: ой, а точно не наоборот?
29/40
внешняя согласованность: в чем проблема?
• В нераспределённой системе проблемы нет• В распределённой системе нет единых точныхчасов
30/40
интервал неопределённости
• Если у вас есть часы с несколькимициферблатами, вы не сможете абсолютно точноопределить момент времени
• Одна стрелка дергается в момент t0, другая в t0 + ϵ
• Интервал ϵ – интервал неопределённости⁷• ϵ может быть довольно большим, может бытьмаленьким, но он есть
⁷time uncertainty
31/40
truetime
• Момент времени в Spanner – интервал [earliest,latest]
• TrueTime значения сообщаются специальнымсервисом TT
• Гарантируется, что
tt.earliest ≤ tabs(enow) ≤ tt.latest
где значение tt получено вызовом enow сервиса TTв абсолютный момент времени tabs(enow)
32/40
реализация сервиса truetime
• В каждом Spanner-датацентре есть TrueTimeмастера с GPS-приемниками(большинство.мастеров) и атомными часами(мастера Армагеддона)• на каждом GPS спутнике тоже есть атомныечасы, несколько штук
• На машинах в датацентре крутятся демоны,общающиеся с мастерами и вычисляющиеинтервалы
33/40
реализация сервиса truetime
• Демоны общаются с несколькими мастерами,вычисляют выбросы и обновляют локальноевремя, применяя алгоритм Марзулло
• В промежутках между общениями с мастерамиинтервал неопределённости постояннопонемного растёт
• В реальности интервал ϵ меняется от 1мс до 7мс
34/40
использование truetime в 2pc
• В кросс-групповой транзакции Ti координатордолжен назначить метку подтверждениятранзакции si
• Каждый участник 2PC• получает блокировки на запись• выбирает метку подготовки (больше чемметка любой ранее подтверждённойтранзакции)
• сообщает координатору о готовности ивозвращает метку
35/40
использование truetime в 2pc
• Координатор выбирает время подтверждения siбольшее каждой метки подготовки и большее чемTT.now().latest
• Надо убедиться, что никто не увидитподтверждённые данные до моментаsj : sj.earliest > Si
• Координатор тупо ждёт этого момента
36/40
использование truetime в 2pc
• Координатор выбирает время подтверждения siбольшее каждой метки подготовки и большее чемTT.now().latest
• Надо убедиться, что никто не увидитподтверждённые данные до моментаsj : sj.earliest > Si
• Координатор тупо ждёт этого момента
36/40
как вычислить завтрашнюю дату?
class Timer {public static long getTomorrowDate() {
Thread.currentThread().sleep(86400); // 60 * 60 * 24return System.currentTimeMillis();
}}
37/40
использование truetime при чтении
• Если tlasti - время последней записи вPaxos группе i
• При чтении из одной Paxos группы sread = tlasti
• При чтении из нескольких групп можно выбиратьsread = minitlasti
• А можно выбрать now.latest• . . . и немного подождать
38/40
использование truetime при чтении
• Если tlasti - время последней записи вPaxos группе i
• При чтении из одной Paxos группы sread = tlasti
• При чтении из нескольких групп можно выбиратьsread = minitlasti
• А можно выбрать now.latest• . . . и немного подождать
38/40
использование spanner
• Первым клиентом стал F1 – масштабируемаярспределённая SQL СУБД
• F1 заменил MySQL в хранении финансовойинформации AdWords
39/40
использование spanner
Космос, атомные часы, всадники армагеддона,древнегреческие парламентарии – всё это длятого чтобы показать вам рекламу уже купленныхботинок
40/40