47
Движок LMDB - особенный чемпион Леонид Юрьев, Петер-Сервис РнД

Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

  • Upload
    ontico

  • View
    1.890

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Движок LMDB- особенный чемпионЛеонид Юрьев,Петер-Сервис РнД

Page 2: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

http://www.billing.ru

Для крупных операторов связи:BSS, Telco, BigData, HA & HL

Более 20 лет разработки, внедрения и сопровождения

>125 миллионов абонентов обслуживается с применением нашего софта

Page 3: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Наш геройLMDB

RocksDB

WiredTiger

Sophia

LevelDB

ForestDB

READ4 SYNCCRUD

LAZYCRUD

Page 4: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Как мы докатились до LMDB

Немного о внутренностях

Плюсы и минусы

Наша MDBX

ГОСТ 7211-86ЗУБИЛА СЛЕСАРНЫЕ

Page 5: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

1. LDAP используется, нужен сервер

2. Нечаянно выбрали OpenLDAP

3. LMDB внутри

4. Год сурка

5. Вот

Telco LMDB

MDBX

Page 6: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Космический LDAP

1. LDAP-кластер от 2+2

2. До 100 миллионов «записей»

3. Чтение 10K – 100K, Запись 5K – 50K

принципиально отличается от «обычных» сценариев использования…

Page 7: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Что такое LMDB ?

Page 8: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Встраиваемый движок key-value (!)

Memory-mapped, просто файл и mmap()

B+tree, без WAL, COW – восстановление – компактификация

ACID поверх MVCC

10К SLOC, 64К кода x86_64

LMDB (1)

Page 9: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

N неблокируемых читателей – чтение и поиск без ожидания, всегда

1 писатель – изменения строго последовательны – никаких deadlock и rollback error

Амортизационно – включая RAF и WAF – примерно всегда

LMDB (2)

Page 10: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Приятные неожиданности: – вложенные транзакции – именованные таблицы – сортировка для дубликатов – size_t ключи

И ещё: – горячее резервное копирование – копирования и накладных расходов – read-write mapping, backed by kernel (!)

LMDB (3)

Page 11: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Препарируем…

Page 12: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

ОБЩИЙ ПУЛ СТРАНИЦ

Три притопа, два прихлопа…

META PAGEtxn #

FREE DBMAIN DB

2

Page 13: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

METAtxn #41

METAtxn #42

Copy-On-Write + FLIP-FLOP

W

X Y

Z

C

D E

F

Page 14: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Отслеживание мусора

42 { C, D, E, F }C

D E

F

METAtxn #41

METAtxn #42

FREE DB

Page 15: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Рабочий циклt

free()

alloc()

39 {OPQR}

38 { STUV }

37 { W X Y Z }

42 { C D E F }

41 {EFGH}

40 {KLMN}Занято чтением

Доступно для переработки

ABCDEFGHIJKLMNOPQRSTUVWXYZ

ABCDEFGHIJKLMNOPQRSTUVWXYZ

ABCDEFGHIJKLMNOPQRSTUVWXYZ

ABCDEFGHIJKLMNOPQRSTUVWXYZ

ABCDEFGHIJKLMNOPQRSTUVWXYZ

Последняя транзакция

ABCDEFGHIJKLMNOPQRSTUVWXYZ

Page 16: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Проблемы и особенности

Page 17: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

1. Курсоры, страницы, …

2. Volatile, барьеры памяти компилятор гуляет heisenbug

3. Read-Write Mapping порядок записи не гарантирован повреждение базы

Ошибки

Page 18: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Проблемы

tНельзя трогать

Кольцо рециркуляции

1. Зависший читатель MDB_MAP_FULL вымывание I/O-кэша

Page 19: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

1. Нет WAL в страницах восстановление не нужно

2. Простой memory-mapping новое = старое zero-copy

3. Предсказуемость поведения*

Особенности

Page 20: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

OpenLDAPOpenLDAP

1

2

Горизонт событийИногда падает,

надо бы поправить…

Page 21: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

1. АВТО-SYNC и LIFO лучше IOPS

2. OOM-Handler бодрит читателей

3. Путь записи надежность для Write-Mapping steady/weak, есть TODO...

4. MDBX_CHK

Доработки

MDBX

Page 22: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

LIFO в MDBX

tLIFOFIFO

кольцо минимально !

ЗанятоДоступно для переработки

Page 23: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Рост B+tree

root421 76474 088

3 111 696130 691

232

42

5

Page 24: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

LIFO и BBCbattery-backed cache

%128M / 512M

IOPSFIFO / LIFO

результат128М / 512М

42 0,34 — 2 / 0,00 —

1 764 14,12 — 3 / 0,00 —

74 088 592,93 21,59% 4 / 0,78 5,10 / 29,31

3 111 696 24,32 0,51% 5 / 1,78 2,81 / 4,48

130 691 232 1021,41 0,01% 6 / 2,78 2,16 / 2,84

результат128М / 512М

результат128М / 512М

результат128М / 512М

результат128М / 512М

Снижение нагрузки на диск в разы

Page 25: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

LIFO и BBCbattery-backed cache

Устраняет архитектурную проблему

В разы: – снижает нагрузку на диски – повышает производительность

Паралимпиец Чемпион: – зависшие читатели не так страшны – только в MDBX

Page 26: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Попробуем сравнить…

Page 27: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Теплое и Мягкое

ТЕПЛОЕ

Ахолодноеи жесткое

МЯГКОЕ

Бхолодноеи жесткоеНЕ НУЖНО

= < > ?

Page 28: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Теплое и Мягкое

<МЯГЧЕА Б

>ТЕПЛЕЕА Б

=С УГЛАМИА Б

Page 29: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Метрики

1. КАЧЕСТВО ОБСЛУЖИВАНИЯ – задержка – вариация задержки

2. СТОИМОСТЬ – CPU – IOPS, WAF, RAF – место на диске

Page 30: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

РежимыSYNC WAL – непосредственно на диск – ничего не теряется redo

LAZY – асинхронная фиксация – хвост может отпасть

NOSYNC – можно потерять все изменения

Page 31: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

БенчмаркиSET – добавляем/обновляем

GET – читаем

CRUD – классическая четверка

BATCH – много четверок пачкой

ITERATE – упорядоченно по ключам

DELETE – чистим

Page 32: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Многопоточность

1 NR NR+W NR+NW R+NW NWSET ●GET ● ● ●○ ●○ ●○CRUD ● ○● ○● ○● ●BATCH ● ○● ○● ○● ●ITERATE ● ● ●○ ●○ ●○DELETE ●

SYNC LAZY NOSYNC

Page 33: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

НЕ ИССЛЕДОВАНИЕ,А СРАВНЕНИЕ

МИНИМУМ СЦЕНАРИЕВ – иначе не рассказать

24 ЧАСА – иначе никогда не успеть

DATA < RAM – иначе долго, либо не репрезентативно

Page 34: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Результаты!

Page 35: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Разгон по CPU…

LMDB

WiredTiger

Sophia

RocksDB

LevelDB

ForestDB

8

42

1

Page 36: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

SYNC CRUD104

LMDB WT Sophia Rocks Level Forest0

100

200

300

400

500

600

700

0.00

0.00

0.01

0.10

1.00

RPS & latency сек

Page 37: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

LAZY CRUD105

LMDB WT Sophia Rocks Level Forest0

10000

20000

30000

40000

50000

60000

70000

80000

90000

100000

1.0E-6

1.0E-5

1.0E-4

1.0E-3

1.0E-2

1.0E-1

1.0E+0

RPS & latency сек

Page 38: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

NOSYNC CRUD106

LMDB WT Sophia Rocks Level Forest0

20000

40000

60000

80000

100000

120000

1.0E-6

1.0E-5

1.0E-4

1.0E-3

1.0E-2

1.0E-1

1.0E+0

1.0E+1

RPS & latency сек

Page 39: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

СтоимостьLMDB

WiredTiger

Sophia

RocksDB

LevelDB

Forest I/O SPACECPU

Page 40: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Стоимость без ForestDB

LMDB

WiredTiger

Sophia

RocksDB

LevelDB

I/O SPACECPU

Page 41: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Что дальше?

Page 42: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

OpenLDAP & LMDBforever

Page 43: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Что дальше с MDBX ?

1. Фоновая фиксация – автоматически weak steady

2. Порядок/Оптимизация – лишние проверки – узкие места

3. Release – документирование – пакетирование

Page 44: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Что потом с MDBX ?

50/50MDBX 389DS – Red Hat Directory Server (RHDS)

Merkle Tree MDBX – полная потеря совместимости + 1Hippeus

OpenDJ Петер-Сервис

Page 45: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Да или Нет ?

Page 46: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

LMDB или НЕТ ?Подходит НЕ

подходит

DATA RAM

восстановления

много читателей

много дубликатов

DATA > RAM

показан WAL

много писателей

Page 47: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)

Спасибо !

LMDBhttp://symas.com/mdb/

MDBXhttps://github.com/ReOpen/libmdbx

IOARENA2

https://github.com/ReOpen/ioarena