SlideShare a Scribd company logo
1 of 36
Download to read offline
© 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

Балансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в ОдноклассникахБалансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в Одноклассниках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
Консольные приложения на GoAndrey 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 - сетевые приложения в PythonAndrey Smirnov
 
РИФ 2016, Tarantool – кейсы использования
РИФ 2016, Tarantool – кейсы использованияРИФ 2016, Tarantool – кейсы использования
РИФ 2016, Tarantool – кейсы использованияТарасов Константин
 

What's hot (19)

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

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

Oracle NoSQL Database
Oracle NoSQL DatabaseOracle NoSQL Database
Oracle NoSQL DatabaseAndrey Akulov
 
Performance optimisations
Performance optimisationsPerformance optimisations
Performance optimisationsAntony Pavlenko
 
Реактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicРеактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicVadim Tsesko
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Ontico
 
Oracle database In-Memory - новая технология обработки в памяти
Oracle database In-Memory - новая технология обработки в памятиOracle database In-Memory - новая технология обработки в памяти
Oracle database In-Memory - новая технология обработки в памятиAndrey Akulov
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)Ontico
 
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими рукамиАндрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими рукамиIBS
 
Software Defined Storage
Software Defined StorageSoftware Defined Storage
Software Defined StorageCisco 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 overviewPhilipp Kulin
 
Checklistfinal perconaconf
Checklistfinal perconaconfChecklistfinal perconaconf
Checklistfinal perconaconfDeveloperua
 

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

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

More from 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 toolAndrey Smirnov
 
aptly - система управления Debian-репозиториями пакетов
aptly - система управления Debian-репозиториями пакетовaptly - система управления Debian-репозиториями пакетов
aptly - система управления Debian-репозиториями пакетовAndrey Smirnov
 
Smirnov twisted-python
Smirnov twisted-pythonSmirnov twisted-python
Smirnov twisted-pythonAndrey Smirnov
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonAndrey Smirnov
 
Доклад на РИТ: Высокие нагрузки (2008)
Доклад на РИТ: Высокие нагрузки (2008)Доклад на РИТ: Высокие нагрузки (2008)
Доклад на РИТ: Высокие нагрузки (2008)Andrey Smirnov
 

More from Andrey Smirnov (10)

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

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

  • 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