ݺߣ

ݺߣShare a Scribd company logo
© Copyright 2014 Andrey Smirnov
Как работают системы
хранения данных?
• Хранение - на диске.
• Давайте напишем свою!
© Copyright 2014 Andrey Smirnov
Файловая система
• Почему не система хранения данных?
• В плюсах:
• почти ничего не надо писать
• конкурентный доступ из разных приложений❔
• переносимость
• инструменты
• производительность
• Почему тогда не используется?
© Copyright 2014 Andrey Smirnov
Простая плоская структура
key: len + chars
value: len + chars
key: len + chars
value: len + chars
key: len + chars
value: len + chars
….
© Copyright 2014 Andrey Smirnov
Как это работает?
• Как будут добавляться записи?
• Как удаляться?
• Как изменить значение?
• Как прочитать значение по ключу?
?
© Copyright 2014 Andrey Smirnov
Что можно изменить, чтобы
структура работала лучше?
© Copyright 2014 Andrey Smirnov
Улучшения
• Отсортировать записи
• Флаг удаленности
• Индекс в отдельном файле
• Хэш-структура на диске
© Copyright 2014 Andrey Smirnov
Проблемы ввода-вывода
• random IO
• block size/alignment
• буферы ОС/sync
© Copyright 2014 Andrey Smirnov
© Copyright 2014 Andrey Smirnov
Что делать?
• Страничный ввод-вывод
• Последовательный ввод-вывод (append-only)
© Copyright 2014 Andrey Smirnov
Log-Structured Merge-Tree
С0
С1
merge
© Copyright 2014 Andrey Smirnov
LevelDB
memtable Log
Level 0
SST
SSTSST
Level 1
Level 2
SST SST SST
SSTSST SST SST SST …
Level 3
…
…
© Copyright 2014 Andrey Smirnov
LevelDB
• memtable - в памяти, только последние операции,
ограничено в размере
• Log - для восстановления memtable
• SST - отсортированные ключ-значения,
неизменяемый
• Level-0 - возможно пересечение
© Copyright 2014 Andrey Smirnov
LevelDB
• Level1-LevelN: 10^L MB
• Level1-LevelN: непересекающие ключи
• Маркеры удаления
• Level0 ⇛ N: “молодые” ключи ⇛ “старые” ключи
• Сжатие: Snappy
© Copyright 2014 Andrey Smirnov
Compaction: Level-0
Level 0
SST
SSTSST
Level 1
Level 2
SST SST SST
SSTSST SST SST SST
Level 3
…
…
© Copyright 2014 Andrey Smirnov
Compaction: Level-0
Level 0
SST
SSTSST
Level 1
Level 2
SST SST SST
SSTSST SST SST SST
Level 3
…
…
SST
© Copyright 2014 Andrey Smirnov
Compaction: Level-1+
Level 0
SST
SSTSST
Level 1
Level 2
SST SST SST
SSTSST SST SST SST
Level 3
…
…
SST
?
© Copyright 2014 Andrey Smirnov
Как выполнить слияние
эффективно?
!
Чем ограничен объем данных при
слиянии?
© Copyright 2014 Andrey Smirnov
Типовые операции
• Поиск
• Вставка
• Удаление
© Copyright 2014 Andrey Smirnov
SST
data block 0
data block 1
…
data block N
index block 0
index block 1
…
index block N
key

value

key

value
bloom filter
last_key

offset

last_key

offset
© Copyright 2014 Andrey Smirnov
Кто использует LevelDB
• Google BigTable (родоначальник)
• WebKit: LocalStorage
• Riak: LevelDB
• HyperDex: HyperLevelDB
• …
© Copyright 2014 Andrey Smirnov
Ввод-вывод
• Только последовательная запись
• Можем записать одно значение несколько раз в
процессе слияний
• Чтение - потенциальный поиск по уровням
© Copyright 2014 Andrey Smirnov
Bloom Filter
?
© Copyright 2014 Andrey Smirnov
Для чего еще может пригодиться
bloom filter?
© Copyright 2014 Andrey Smirnov
Страничный ввод-вывод
• Страница - основная единица ввода-вывода
• Размер страницы - несколько килобайт
• Оптимизация ввода-вывода за счет более
крупных блоков
• Страница содержит данные (или индексы)
© Copyright 2014 Andrey Smirnov
Buffer Pool
0 1
11 12
2 3
13 14
4 5
15 16
6 7
17 18
8 9
19 20
10
21
Диск
Память
dirty dirty
© Copyright 2014 Andrey Smirnov
Buffer Pool
• Кеш диска (уменьшает чтение)
• Кеш записи (уменьшает запись)
• Свойство локальности/Working set
• Что если отказ?
© Copyright 2014 Andrey Smirnov
Write Ahead Log
0 1
8 9
2 3
10 11
4 5
12 13
6 7
14 15
dirty dirty
buffer pool
WAL
Операция
записи
Диск
1
2
?
© Copyright 2014 Andrey Smirnov
Почему в WAL запись идет в
первую очередь?
© Copyright 2014 Andrey Smirnov
Crash Recovery
0 1
8 9
2 3
10 11
4 5
12 13
6 7
14 15
WAL
Диск
replay
© Copyright 2014 Andrey Smirnov
Snapshot
0 1
8 9
2 3
10 11
4 5
12 13
6 7
14 15
buffer pool
WAL
Диск
Snapshot
© Copyright 2014 Andrey Smirnov
Buffer Flusher
0 1
8 9
2 3
10 11
4 5
12 13
6 7
14 15
dirty dirty
buffer pool
Диск
buffer
flusher
≤50% dirty
?
© Copyright 2014 Andrey Smirnov
Какие dirty страницы следует
сбросить в первую очередь?
!
А какие не-dirty страницы?
© Copyright 2014 Andrey Smirnov
Примеры использования
• BerkleyDB
© Copyright 2014 Andrey Smirnov
HDD vs. SSD
© Copyright 2014 Andrey Smirnov
HDD
• Seek time (3-15ms)
• Rotational delay (3-4ms)
• Transfer
• 70-200 random IOPS
© Copyright 2014 Andrey Smirnov
SSD
• Read-Erase-Write
• Blocks, pages
• Over-provisioning
• Write amplification
• > 5000 IOPS

More Related Content

What's hot (19)

Балансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в ОдноклассникахБалансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Ontico
SuperNovo: примеры размещения 1С
SuperNovo: примеры размещения 1СSuperNovo: примеры размещения 1С
SuperNovo: примеры размещения 1С
SuperNovo
Велосипед уже изобретен. Что умеют промышленные СХД? / Антон Жбанков (Nutanix)
Велосипед уже изобретен. Что умеют промышленные СХД? / Антон Жбанков (Nutanix)Велосипед уже изобретен. Что умеют промышленные СХД? / Антон Жбанков (Nutanix)
Велосипед уже изобретен. Что умеют промышленные СХД? / Антон Жбанков (Nutanix)
Ontico
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)
Andrey Smirnov
Антон Галицын
Антон ГалицынАнтон Галицын
Антон Галицын
CodeFest
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
CodeFest
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Ontico
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на Go
Andrey Smirnov
VMUG Moscow 2014 Проблемы с дисками?
VMUG Moscow 2014 Проблемы с дисками?VMUG Moscow 2014 Проблемы с дисками?
VMUG Moscow 2014 Проблемы с дисками?
Anton Zhbankov
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Ontico
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Ontico
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)
Ontico
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Ontico
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Ontico
Как собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффикКак собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффик
Andrew Minkin
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
Andrey Smirnov
РИФ 2016, Tarantool – кейсы использования
РИФ 2016, Tarantool – кейсы использованияРИФ 2016, Tarantool – кейсы использования
РИФ 2016, Tarantool – кейсы использования
Тарасов Константин
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в ОдноклассникахБалансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Ontico
SuperNovo: примеры размещения 1С
SuperNovo: примеры размещения 1СSuperNovo: примеры размещения 1С
SuperNovo: примеры размещения 1С
SuperNovo
Велосипед уже изобретен. Что умеют промышленные СХД? / Антон Жбанков (Nutanix)
Велосипед уже изобретен. Что умеют промышленные СХД? / Антон Жбанков (Nutanix)Велосипед уже изобретен. Что умеют промышленные СХД? / Антон Жбанков (Nutanix)
Велосипед уже изобретен. Что умеют промышленные СХД? / Антон Жбанков (Nutanix)
Ontico
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)
Andrey Smirnov
Антон Галицын
Антон ГалицынАнтон Галицын
Антон Галицын
CodeFest
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
CodeFest
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Ontico
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на Go
Andrey Smirnov
VMUG Moscow 2014 Проблемы с дисками?
VMUG Moscow 2014 Проблемы с дисками?VMUG Moscow 2014 Проблемы с дисками?
VMUG Moscow 2014 Проблемы с дисками?
Anton Zhbankov
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Ontico
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Ontico
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)
Ontico
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Ontico
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Ontico
Как собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффикКак собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффик
Andrew Minkin
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
Andrey Smirnov

Similar to Курс высокие нагрузки и надежность: отрывок (19)

Oracle NoSQL Database
Oracle NoSQL DatabaseOracle NoSQL Database
Oracle NoSQL Database
Andrey Akulov
Performance optimisations
Performance optimisationsPerformance optimisations
Performance optimisations
Antony Pavlenko
Реактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicРеактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/music
Vadim Tsesko
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Ontico
Oracle database In-Memory - новая технология обработки в памяти
Oracle database In-Memory - новая технология обработки в памятиOracle database In-Memory - новая технология обработки в памяти
Oracle database In-Memory - новая технология обработки в памяти
Andrey Akulov
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими рукамиАндрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
IBS
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
Ontico
Software Defined Storage
Software Defined StorageSoftware Defined Storage
Software Defined Storage
Cisco Russia
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
it-people
Борис Павлович - Производительность и масштабируемость OpenStack
Борис Павлович - Производительность и масштабируемость OpenStack Борис Павлович - Производительность и масштабируемость OpenStack
Борис Павлович - Производительность и масштабируемость OpenStack
Yandex
Дедупликация. Нет громоздким ленточным библиотекам
Дедупликация. Нет громоздким ленточным библиотекамДедупликация. Нет громоздким ленточным библиотекам
Дедупликация. Нет громоздким ленточным библиотекам
КРОК
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ontico
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данныхОлег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Siel01
Дешевле, надежнее, проще. Хранение петабайтов видео и фото в ОК / Александр Х...
Дешевле, надежнее, проще. Хранение петабайтов видео и фото в ОК / Александр Х...Дешевле, надежнее, проще. Хранение петабайтов видео и фото в ОК / Александр Х...
Дешевле, надежнее, проще. Хранение петабайтов видео и фото в ОК / Александр Х...
Ontico
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Ontico
Сценарии перехода в облако. Сравнительный анализ
Сценарии перехода в облако. Сравнительный анализСценарии перехода в облако. Сравнительный анализ
Сценарии перехода в облако. Сравнительный анализ
pcweek_ua
Хранение музыки и видео / Артур Матвеев (Волнорез)
Хранение музыки и видео / Артур Матвеев (Волнорез)Хранение музыки и видео / Артур Матвеев (Волнорез)
Хранение музыки и видео / Артур Матвеев (Волнорез)
Ontico
A popular DNS security overview
A popular DNS security overviewA popular DNS security overview
A popular DNS security overview
Philipp Kulin
Checklistfinal perconaconf
Checklistfinal perconaconfChecklistfinal perconaconf
Checklistfinal perconaconf
Developerua
Реактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicРеактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/music
Vadim Tsesko
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Ontico
Oracle database In-Memory - новая технология обработки в памяти
Oracle database In-Memory - новая технология обработки в памятиOracle database In-Memory - новая технология обработки в памяти
Oracle database In-Memory - новая технология обработки в памяти
Andrey Akulov
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими рукамиАндрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
IBS
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
Ontico
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
it-people
Борис Павлович - Производительность и масштабируемость OpenStack
Борис Павлович - Производительность и масштабируемость OpenStack Борис Павлович - Производительность и масштабируемость OpenStack
Борис Павлович - Производительность и масштабируемость OpenStack
Yandex
Дедупликация. Нет громоздким ленточным библиотекам
Дедупликация. Нет громоздким ленточным библиотекамДедупликация. Нет громоздким ленточным библиотекам
Дедупликация. Нет громоздким ленточным библиотекам
КРОК
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ontico
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данныхОлег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Siel01
Дешевле, надежнее, проще. Хранение петабайтов видео и фото в ОК / Александр Х...
Дешевле, надежнее, проще. Хранение петабайтов видео и фото в ОК / Александр Х...Дешевле, надежнее, проще. Хранение петабайтов видео и фото в ОК / Александр Х...
Дешевле, надежнее, проще. Хранение петабайтов видео и фото в ОК / Александр Х...
Ontico
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Ontico
Сценарии перехода в облако. Сравнительный анализ
Сценарии перехода в облако. Сравнительный анализСценарии перехода в облако. Сравнительный анализ
Сценарии перехода в облако. Сравнительный анализ
pcweek_ua
Хранение музыки и видео / Артур Матвеев (Волнорез)
Хранение музыки и видео / Артур Матвеев (Волнорез)Хранение музыки и видео / Артур Матвеев (Волнорез)
Хранение музыки и видео / Артур Матвеев (Волнорез)
Ontico
A popular DNS security overview
A popular DNS security overviewA popular DNS security overview
A popular DNS security overview
Philipp Kulin
Checklistfinal perconaconf
Checklistfinal perconaconfChecklistfinal perconaconf
Checklistfinal perconaconf
Developerua

More from Andrey Smirnov (10)

Remote Highload
Remote HighloadRemote Highload
Remote Highload
Andrey Smirnov
aptly: система управления репозиториями пакетов (РИТ-2014)
aptly: система управления репозиториями пакетов (РИТ-2014)aptly: система управления репозиториями пакетов (РИТ-2014)
aptly: система управления репозиториями пакетов (РИТ-2014)
Andrey Smirnov
aptly: Debian repository management tool
aptly: Debian repository management toolaptly: Debian repository management tool
aptly: Debian repository management tool
Andrey Smirnov
aptly - система управления Debian-репозиториями пакетов
aptly - система управления Debian-репозиториями пакетовaptly - система управления Debian-репозиториями пакетов
aptly - система управления Debian-репозиториями пакетов
Andrey Smirnov
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
Andrey Smirnov
Доклад на РИТ: Высокие нагрузки (2008)
Доклад на РИТ: Высокие нагрузки (2008)Доклад на РИТ: Высокие нагрузки (2008)
Доклад на РИТ: Высокие нагрузки (2008)
Andrey Smirnov
aptly: система управления репозиториями пакетов (РИТ-2014)
aptly: система управления репозиториями пакетов (РИТ-2014)aptly: система управления репозиториями пакетов (РИТ-2014)
aptly: система управления репозиториями пакетов (РИТ-2014)
Andrey Smirnov
aptly: Debian repository management tool
aptly: Debian repository management toolaptly: Debian repository management tool
aptly: Debian repository management tool
Andrey Smirnov
aptly - система управления Debian-репозиториями пакетов
aptly - система управления Debian-репозиториями пакетовaptly - система управления Debian-репозиториями пакетов
aptly - система управления Debian-репозиториями пакетов
Andrey Smirnov
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
Andrey Smirnov
Доклад на РИТ: Высокие нагрузки (2008)
Доклад на РИТ: Высокие нагрузки (2008)Доклад на РИТ: Высокие нагрузки (2008)
Доклад на РИТ: Высокие нагрузки (2008)
Andrey Smirnov

Курс высокие нагрузки и надежность: отрывок

  • 1. © Copyright 2014 Andrey Smirnov Как работают системы хранения данных? • Хранение - на диске. • Давайте напишем свою!
  • 2. © Copyright 2014 Andrey Smirnov Файловая система • Почему не система хранения данных? • В плюсах: • почти ничего не надо писать • конкурентный доступ из разных приложений❔ • переносимость • инструменты • производительность • Почему тогда не используется?
  • 3. © Copyright 2014 Andrey Smirnov Простая плоская структура key: len + chars value: len + chars key: len + chars value: len + chars key: len + chars value: len + chars ….
  • 4. © Copyright 2014 Andrey Smirnov Как это работает? • Как будут добавляться записи? • Как удаляться? • Как изменить значение? • Как прочитать значение по ключу?
  • 5. ? © Copyright 2014 Andrey Smirnov Что можно изменить, чтобы структура работала лучше?
  • 6. © Copyright 2014 Andrey Smirnov Улучшения • Отсортировать записи • Флаг удаленности • Индекс в отдельном файле • Хэш-структура на диске
  • 7. © Copyright 2014 Andrey Smirnov Проблемы ввода-вывода • random IO • block size/alignment • буферы ОС/sync
  • 8. © Copyright 2014 Andrey Smirnov
  • 9. © Copyright 2014 Andrey Smirnov Что делать? • Страничный ввод-вывод • Последовательный ввод-вывод (append-only)
  • 10. © Copyright 2014 Andrey Smirnov Log-Structured Merge-Tree С0 С1 merge
  • 11. © Copyright 2014 Andrey Smirnov LevelDB memtable Log Level 0 SST SSTSST Level 1 Level 2 SST SST SST SSTSST SST SST SST … Level 3 … …
  • 12. © Copyright 2014 Andrey Smirnov LevelDB • memtable - в памяти, только последние операции, ограничено в размере • Log - для восстановления memtable • SST - отсортированные ключ-значения, неизменяемый • Level-0 - возможно пересечение
  • 13. © Copyright 2014 Andrey Smirnov LevelDB • Level1-LevelN: 10^L MB • Level1-LevelN: непересекающие ключи • Маркеры удаления • Level0 ⇛ N: “молодые” ключи ⇛ “старые” ключи • Сжатие: Snappy
  • 14. © Copyright 2014 Andrey Smirnov Compaction: Level-0 Level 0 SST SSTSST Level 1 Level 2 SST SST SST SSTSST SST SST SST Level 3 … …
  • 15. © Copyright 2014 Andrey Smirnov Compaction: Level-0 Level 0 SST SSTSST Level 1 Level 2 SST SST SST SSTSST SST SST SST Level 3 … … SST
  • 16. © Copyright 2014 Andrey Smirnov Compaction: Level-1+ Level 0 SST SSTSST Level 1 Level 2 SST SST SST SSTSST SST SST SST Level 3 … … SST
  • 17. ? © Copyright 2014 Andrey Smirnov Как выполнить слияние эффективно? ! Чем ограничен объем данных при слиянии?
  • 18. © Copyright 2014 Andrey Smirnov Типовые операции • Поиск • Вставка • Удаление
  • 19. © Copyright 2014 Andrey Smirnov SST data block 0 data block 1 … data block N index block 0 index block 1 … index block N key
 value
 key
 value bloom filter last_key
 offset
 last_key
 offset
  • 20. © Copyright 2014 Andrey Smirnov Кто использует LevelDB • Google BigTable (родоначальник) • WebKit: LocalStorage • Riak: LevelDB • HyperDex: HyperLevelDB • …
  • 21. © Copyright 2014 Andrey Smirnov Ввод-вывод • Только последовательная запись • Можем записать одно значение несколько раз в процессе слияний • Чтение - потенциальный поиск по уровням
  • 22. © Copyright 2014 Andrey Smirnov Bloom Filter
  • 23. ? © Copyright 2014 Andrey Smirnov Для чего еще может пригодиться bloom filter?
  • 24. © Copyright 2014 Andrey Smirnov Страничный ввод-вывод • Страница - основная единица ввода-вывода • Размер страницы - несколько килобайт • Оптимизация ввода-вывода за счет более крупных блоков • Страница содержит данные (или индексы)
  • 25. © Copyright 2014 Andrey Smirnov Buffer Pool 0 1 11 12 2 3 13 14 4 5 15 16 6 7 17 18 8 9 19 20 10 21 Диск Память dirty dirty
  • 26. © Copyright 2014 Andrey Smirnov Buffer Pool • Кеш диска (уменьшает чтение) • Кеш записи (уменьшает запись) • Свойство локальности/Working set • Что если отказ?
  • 27. © Copyright 2014 Andrey Smirnov Write Ahead Log 0 1 8 9 2 3 10 11 4 5 12 13 6 7 14 15 dirty dirty buffer pool WAL Операция записи Диск 1 2
  • 28. ? © Copyright 2014 Andrey Smirnov Почему в WAL запись идет в первую очередь?
  • 29. © Copyright 2014 Andrey Smirnov Crash Recovery 0 1 8 9 2 3 10 11 4 5 12 13 6 7 14 15 WAL Диск replay
  • 30. © Copyright 2014 Andrey Smirnov Snapshot 0 1 8 9 2 3 10 11 4 5 12 13 6 7 14 15 buffer pool WAL Диск Snapshot
  • 31. © Copyright 2014 Andrey Smirnov Buffer Flusher 0 1 8 9 2 3 10 11 4 5 12 13 6 7 14 15 dirty dirty buffer pool Диск buffer flusher ≤50% dirty
  • 32. ? © Copyright 2014 Andrey Smirnov Какие dirty страницы следует сбросить в первую очередь? ! А какие не-dirty страницы?
  • 33. © Copyright 2014 Andrey Smirnov Примеры использования • BerkleyDB
  • 34. © Copyright 2014 Andrey Smirnov HDD vs. SSD
  • 35. © Copyright 2014 Andrey Smirnov HDD • Seek time (3-15ms) • Rotational delay (3-4ms) • Transfer • 70-200 random IOPS
  • 36. © Copyright 2014 Andrey Smirnov SSD • Read-Erase-Write • Blocks, pages • Over-provisioning • Write amplification • > 5000 IOPS