Движок lmdb — особенный чемпион / Юрьев Леонид...
TRANSCRIPT
![Page 1: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/1.jpg)
Движок LMDB- особенный чемпионЛеонид Юрьев,Петер-Сервис РнД
![Page 2: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/2.jpg)
http://www.billing.ru
Для крупных операторов связи:BSS, Telco, BigData, HA & HL
Более 20 лет разработки, внедрения и сопровождения
>125 миллионов абонентов обслуживается с применением нашего софта
![Page 3: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/3.jpg)
Наш геройLMDB
RocksDB
WiredTiger
Sophia
LevelDB
ForestDB
READ4 SYNCCRUD
LAZYCRUD
![Page 4: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/4.jpg)
Как мы докатились до LMDB
Немного о внутренностях
Плюсы и минусы
Наша MDBX
ГОСТ 7211-86ЗУБИЛА СЛЕСАРНЫЕ
![Page 5: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/5.jpg)
1. LDAP используется, нужен сервер
2. Нечаянно выбрали OpenLDAP
3. LMDB внутри
4. Год сурка
5. Вот
Telco LMDB
MDBX
![Page 6: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/6.jpg)
Космический LDAP
1. LDAP-кластер от 2+2
2. До 100 миллионов «записей»
3. Чтение 10K – 100K, Запись 5K – 50K
принципиально отличается от «обычных» сценариев использования…
![Page 7: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/7.jpg)
Что такое LMDB ?
![Page 8: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/8.jpg)
Встраиваемый движок key-value (!)
Memory-mapped, просто файл и mmap()
B+tree, без WAL, COW – восстановление – компактификация
ACID поверх MVCC
10К SLOC, 64К кода x86_64
LMDB (1)
![Page 9: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/9.jpg)
N неблокируемых читателей – чтение и поиск без ожидания, всегда
1 писатель – изменения строго последовательны – никаких deadlock и rollback error
Амортизационно – включая RAF и WAF – примерно всегда
LMDB (2)
![Page 10: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/10.jpg)
Приятные неожиданности: – вложенные транзакции – именованные таблицы – сортировка для дубликатов – size_t ключи
И ещё: – горячее резервное копирование – копирования и накладных расходов – read-write mapping, backed by kernel (!)
LMDB (3)
![Page 11: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/11.jpg)
Препарируем…
![Page 12: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/12.jpg)
ОБЩИЙ ПУЛ СТРАНИЦ
Три притопа, два прихлопа…
META PAGEtxn #
FREE DBMAIN DB
2
![Page 13: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/13.jpg)
METAtxn #41
METAtxn #42
Copy-On-Write + FLIP-FLOP
W
X Y
Z
C
D E
F
![Page 14: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/14.jpg)
Отслеживание мусора
42 { C, D, E, F }C
D E
F
METAtxn #41
METAtxn #42
FREE DB
![Page 15: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/15.jpg)
Рабочий цикл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)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/16.jpg)
Проблемы и особенности
![Page 17: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/17.jpg)
1. Курсоры, страницы, …
2. Volatile, барьеры памяти компилятор гуляет heisenbug
3. Read-Write Mapping порядок записи не гарантирован повреждение базы
Ошибки
![Page 18: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/18.jpg)
Проблемы
tНельзя трогать
Кольцо рециркуляции
1. Зависший читатель MDB_MAP_FULL вымывание I/O-кэша
![Page 19: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/19.jpg)
1. Нет WAL в страницах восстановление не нужно
2. Простой memory-mapping новое = старое zero-copy
3. Предсказуемость поведения*
Особенности
![Page 20: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/20.jpg)
OpenLDAPOpenLDAP
1
2
Горизонт событийИногда падает,
надо бы поправить…
![Page 21: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/21.jpg)
1. АВТО-SYNC и LIFO лучше IOPS
2. OOM-Handler бодрит читателей
3. Путь записи надежность для Write-Mapping steady/weak, есть TODO...
4. MDBX_CHK
Доработки
MDBX
![Page 22: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/22.jpg)
LIFO в MDBX
tLIFOFIFO
кольцо минимально !
ЗанятоДоступно для переработки
![Page 23: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/23.jpg)
Рост B+tree
root421 76474 088
3 111 696130 691
232
42
5
![Page 24: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/24.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/25.jpg)
LIFO и BBCbattery-backed cache
Устраняет архитектурную проблему
В разы: – снижает нагрузку на диски – повышает производительность
Паралимпиец Чемпион: – зависшие читатели не так страшны – только в MDBX
![Page 26: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/26.jpg)
Попробуем сравнить…
![Page 27: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/27.jpg)
Теплое и Мягкое
ТЕПЛОЕ
Ахолодноеи жесткое
МЯГКОЕ
Бхолодноеи жесткоеНЕ НУЖНО
= < > ?
![Page 28: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/28.jpg)
Теплое и Мягкое
<МЯГЧЕА Б
>ТЕПЛЕЕА Б
=С УГЛАМИА Б
![Page 29: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/29.jpg)
Метрики
1. КАЧЕСТВО ОБСЛУЖИВАНИЯ – задержка – вариация задержки
2. СТОИМОСТЬ – CPU – IOPS, WAF, RAF – место на диске
![Page 30: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/30.jpg)
РежимыSYNC WAL – непосредственно на диск – ничего не теряется redo
LAZY – асинхронная фиксация – хвост может отпасть
NOSYNC – можно потерять все изменения
![Page 31: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/31.jpg)
БенчмаркиSET – добавляем/обновляем
GET – читаем
CRUD – классическая четверка
BATCH – много четверок пачкой
ITERATE – упорядоченно по ключам
DELETE – чистим
![Page 32: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/32.jpg)
Многопоточность
1 NR NR+W NR+NW R+NW NWSET ●GET ● ● ●○ ●○ ●○CRUD ● ○● ○● ○● ●BATCH ● ○● ○● ○● ●ITERATE ● ● ●○ ●○ ●○DELETE ●
SYNC LAZY NOSYNC
![Page 33: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/33.jpg)
НЕ ИССЛЕДОВАНИЕ,А СРАВНЕНИЕ
МИНИМУМ СЦЕНАРИЕВ – иначе не рассказать
24 ЧАСА – иначе никогда не успеть
DATA < RAM – иначе долго, либо не репрезентативно
![Page 34: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/34.jpg)
Результаты!
![Page 35: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/35.jpg)
Разгон по CPU…
LMDB
WiredTiger
Sophia
RocksDB
LevelDB
ForestDB
8
42
1
![Page 36: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/36.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/37.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/38.jpg)
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)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/39.jpg)
СтоимостьLMDB
WiredTiger
Sophia
RocksDB
LevelDB
Forest I/O SPACECPU
![Page 40: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/40.jpg)
Стоимость без ForestDB
LMDB
WiredTiger
Sophia
RocksDB
LevelDB
I/O SPACECPU
![Page 41: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/41.jpg)
Что дальше?
![Page 42: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/42.jpg)
OpenLDAP & LMDBforever
![Page 43: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/43.jpg)
Что дальше с MDBX ?
1. Фоновая фиксация – автоматически weak steady
2. Порядок/Оптимизация – лишние проверки – узкие места
3. Release – документирование – пакетирование
![Page 44: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/44.jpg)
Что потом с MDBX ?
50/50MDBX 389DS – Red Hat Directory Server (RHDS)
Merkle Tree MDBX – полная потеря совместимости + 1Hippeus
OpenDJ Петер-Сервис
![Page 45: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/45.jpg)
Да или Нет ?
![Page 46: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/46.jpg)
LMDB или НЕТ ?Подходит НЕ
подходит
DATA RAM
восстановления
много читателей
много дубликатов
DATA > RAM
показан WAL
много писателей
![Page 47: Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)](https://reader033.vdocuments.site/reader033/viewer/2022061516/586f91591a28ab54768b7be7/html5/thumbnails/47.jpg)
Спасибо !
LMDBhttp://symas.com/mdb/
MDBXhttps://github.com/ReOpen/libmdbx
IOARENA2
https://github.com/ReOpen/ioarena