Upload
cs-center
View
221
Download
4
Embed Size (px)
Citation preview
Big Data’15Лекция X: Google Spanner
Дмитрий Барашев[email protected]
Computer Science Center
28 апреля 2015
1/27
Этот материал распространяется под лицензией
Creative Commons ”Attribution - Share Alike” 3.0http://creativecommons.org/licenses/by-sa/3.0/us/deed.ru
сверстано в онлайн LATEX редакторе
Pa
peeriapapeeria.com
2/27
Сегодня в программе
Google Spanner: глобально распределённая БД
3/27
Сегодня в программе
Google Spanner: глобально распределённая БД
4/27
Google Spanner
▶ глобально распределённая▶ версионированная▶ транзакционная▶ строго согласованная▶ автонастраивающаяся
5/27
Предпосылки
▶ Bigtable шустрая, но не годится для сложныхприложений
▶ Megastore – надстройка над Bigtable,добавляющая транзакции и SQL-подобный языкзапросов – используется многимиприложениями, несмотря на невысокуюпроизводительность
▶ Хочется собрать всё лучшее из миратрадиционных и нетрадиционных СУБД
▶ транзакции + высокая пропускная способность+ низкое время отклика + масштабируемость
6/27
Используемые технологии
▶ Распределённая файловая система: Colossus▶ Алгоритмы консенсуса: Paxos и двухфазноеподтверждение1
▶ Изоляция транзакций: двухфазные блокировки2и моментальные срезы3
▶ GPS сигналы и атомные часы
1two-phase commit2two-phase locking3snapshot isolation
7/27
Используемые технологии
▶ Распределённая файловая система: Colossus▶ Алгоритмы консенсуса: Paxos и двухфазноеподтверждение1
▶ Изоляция транзакций: двухфазные блокировки2и моментальные срезы3
▶ GPS сигналы и атомные часы
1two-phase commit2two-phase locking3snapshot isolation
7/27
Spanner с точки зрения клиента
▶ Модель данных: (ключ, временна́я метка) ⇒значение
▶ Компоненты ключа: название базы данных,название таблицы, идентификатор строки,название столбца
▶ Корзина4 – единица размещения данных5
4directory, bucket5data placement
8/27
Размещение данных в Bigtable▶ В Bigtable единицейразмещения являетсятаблет – непрерывноеподмножествоключей
▶ Таблетобслуживается однимтаблет сервером
▶ Таблет живет в одномкластере( датацентре)
9/27
Размещение данных в Spanner
▶ В одной корзинемогутнаходитьсястроки разныхтаблиц
10/27
Размещение данных в Spanner
▶ Приложение определяет параметрыразмещения и репликации корзины
▶ например: одна корзина на пользователя,корзина реплицируется в трех зонах в Европе идвух в Северной Америке
▶ Реплики корзин на одном сервереобъединяются в таблет
11/27
Программный стек спан-сервера
12/27
Paxos
▶ Записи производятся в реплики-лидеры▶ Лидер инициирует очередной раунд Paxos, иутвержденное значение записывается вструктуры хранения (B-дерево) и оперещающийжурнал
▶ Лидер в Paxos долгоживущий: он продляет своёлидерство во время успешной записи иперевыборами раз в 10 секунд
▶ Множество реплик таблета называетсяPaxos-группой
13/27
Таблица блокировок
▶ Лидер поддерживает таблицу блокировокдвухфазного протокола
▶ Блокировки используются для операций записии read-commited чтения
▶ Транзакциям, использующим одну Paxos-группудостаточно таблицы блокировок дляподтверждения
14/27
Двухфазное подтверждение
▶ Используется если транзакция затрагиваетнесколько Paxos групп
▶ Координатор выбирается клиентом▶ Главная сложность – гарантировать внешнююсогласованность транзакций
15/27
Внешняя согласованность
▶ Если транзакция T1 подтверждается раньше,чем транзакция T2 начинается, то временна́яметка подтверждения T1 меньше, чемвременна́я метка подтверждения T2
16/27
Внешняя согласованность: зачем
▶ Если хочется читать моментальные срезы БД изпрошлого
▶ вы: окей гугл, дай мне состояние, актуальное намомент времени 12 апреля 1961 года 09:07
▶ гугл: Поехали!▶ вы: а секундой позже?▶ гугл: Старт!▶ вы: ой, а точно не наоборот?
17/27
Внешняя согласованность: зачем
▶ Если хочется читать моментальные срезы БД изпрошлого
▶ вы: окей гугл, дай мне состояние, актуальное намомент времени 12 апреля 1961 года 09:07
▶ гугл: Поехали!▶ вы: а секундой позже?▶ гугл: Старт!▶ вы: ой, а точно не наоборот?
17/27
Внешняя согласованность: зачем
▶ Если хочется читать моментальные срезы БД изпрошлого
▶ вы: окей гугл, дай мне состояние, актуальное намомент времени 12 апреля 1961 года 09:07
▶ гугл: Поехали!▶ вы: а секундой позже?
▶ гугл: Старт!▶ вы: ой, а точно не наоборот?
17/27
Внешняя согласованность: зачем
▶ Если хочется читать моментальные срезы БД изпрошлого
▶ вы: окей гугл, дай мне состояние, актуальное намомент времени 12 апреля 1961 года 09:07
▶ гугл: Поехали!▶ вы: а секундой позже?▶ гугл: Старт!
▶ вы: ой, а точно не наоборот?
17/27
Внешняя согласованность: зачем
▶ Если хочется читать моментальные срезы БД изпрошлого
▶ вы: окей гугл, дай мне состояние, актуальное намомент времени 12 апреля 1961 года 09:07
▶ гугл: Поехали!▶ вы: а секундой позже?▶ гугл: Старт!▶ вы: ой, а точно не наоборот?
17/27
Внешняя согласованность: в чемпроблема?
▶ В нераспределённой системе проблемы нет▶ В распределённой системе нет единых точныхчасов
18/27
Интервал неопределённости
▶ Если у вас есть часы с несколькимициферблатами, вы не сможете абсолютно точноопределить момент времени
▶ Одна стрелка дергается в момент t0, другая вt0 + ϵ
▶ Интервал ϵ – интервал неопределённости6▶ ϵ может быть довольно большим, может бытьмаленьким, но он есть
6time uncertainty19/27
TrueTime
▶ Момент времени в Spanner – интервал [earliest,latest]
▶ TrueTime значения сообщаются специальнымсервисом TT
▶ Гарантируется, что
tt.earliest ≤ tabs(enow) ≤ tt.latest
где значение tt получено вызовом enow сервисаTT в абсолютный момент времени tabs(enow)
20/27
Реализация сервиса TrueTime
▶ В каждом Spanner-датацентре есть TrueTimeмастера с GPS-приемниками(большинство.мастеров) и атомными часами(мастера Армагеддона)
▶ на каждом GPS спутнике тоже есть атомныечасы, несколько штук
▶ На машинах в датацентре крутятся демоны,общающиеся с мастерами и вычисляющиеинтервалы
▶ В реальности интервал ϵ меняется от 1мс до 7мс
21/27
Использование TrueTime▶ В кросс-групповой транзакции Ti координатордолжен назначить метку подтверждениятранзакции si
▶ Каждый участник 2PC▶ получает блокировки на запись▶ выбирает метку подготовки (больше чем меткалюбой ранее подтверждённой транзакции)
▶ сообщает координатору о готовности ивозвращает метку
▶ Координатор выбирает время подтверждения siбольшее каждой метки подготовки и большеечем TT.now().latest
▶ Надо убедиться, что никто не увидитподтверждённые данные до моментаsj : sj.earliest > Si
▶ Координатор тупо ждёт этого момента
22/27
Использование TrueTime▶ В кросс-групповой транзакции Ti координатордолжен назначить метку подтверждениятранзакции si
▶ Каждый участник 2PC▶ получает блокировки на запись▶ выбирает метку подготовки (больше чем меткалюбой ранее подтверждённой транзакции)
▶ сообщает координатору о готовности ивозвращает метку
▶ Координатор выбирает время подтверждения siбольшее каждой метки подготовки и большеечем TT.now().latest
▶ Надо убедиться, что никто не увидитподтверждённые данные до моментаsj : sj.earliest > Si
▶ Координатор тупо ждёт этого момента22/27
Как вычислить завтрашнюю дату?
1 class Timer {2 public static long getTomorrowDate() {3 Thread.currentThread().sleep(86400); // 60 * 60 * 244 return System.currentTimeMillis();5 }6 }
23/27
Использование Spanner
▶ Первым клиентом стал F1 – масштабируемаярспределённая SQL СУБД
▶ F1 заменил MySQL в хранении финансовойинформации AdWords
24/27
Использование Spanner
Космос, атомные часы, всадники армагеддона,древнегреческие парламентарии – всё это длятого чтобы показать вам рекламу ужекупленных ботинок
25/27
Литература I
James C Corbett, Jeffrey Dean, Michael Epstein,Andrew Fikes, Christopher Frost, Jeffrey JohnFurman, Sanjay Ghemawat, Andrey Gubarev,Christopher Heiser, Peter Hochschild, et al.Spanner: Google’s globally distributed database.ACM Transactions on Computer Systems (TOCS),31(3):8, 2013.Jeff Shute, Mircea Oancea, Stephan Ellner, BenHandy, Eric Rollins, Bart Samwel, Radek Vingralek,Chad Whipkey, Xin Chen, Beat Jegerlehner, et al.F1: the fault-tolerant distributed rdbms supportinggoogle’s ad business.
26/27
Литература II
In Proceedings of the 2012 ACM SIGMODInternational Conference on Management of Data,pages 777–778. ACM, 2012.
27/27