63
За счет чего Tarantool такой оптимальный Денис Аникин, технический директор почтовых и облачных сервисов в Mail.Ru Group

За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

  • Upload
    ontico

  • View
    154

  • Download
    8

Embed Size (px)

Citation preview

Page 1: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

За счет чего Tarantool такой оптимальный

Денис Аникин, технический директор почтовых и облачных сервисов в Mail.Ru Group

Page 2: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Что ожидать от этого доклада• рассказ о конкретике про устройство Tarantool, которая делает его

оптимальным по сравнению с другими СУБД• упоминание причин, побудивших нас сделать его таким

оптимальным

Page 3: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Чего не стоит ждать от этого доклада• Holy wars. Все СУБД хороши для своих задач• Супер новых структур данных и алгоритмов• Логарифм от N логаримфу от N рознь

Page 4: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Tarantool хранит копию данных в памятиВ отличие от дисковой базы данных

• нет обращений к диску во время операций чтения• нет накладных расходов на кэширование и выгрузку страниц• запись на диск происходит всегда линейно• линейное чтение snapshot => максимально быстрый старт

Page 5: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Поэтому он быстрее дисковых баз данных

Tarantool RAMRead

Disk based

database

ReadDISK

Page 6: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

А как же кэш у дисковых баз?

Page 7: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Давайте сравним in-memory Tarantool

Tarantool RAMRead

Page 8: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

И кэш у дисковых базDisk

based database

Yes

Check cache

Read from cache

Read from disk

Write to cache

Read

No

Evict old

Page 9: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Почувствуйте разницу!

Page 10: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Tarantool хранит копию данных в памяти

Always in-memory != Cache

Page 11: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

А как происходит запись на диск?

Page 12: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

А как происходит запись на диск?

RAM

TRANSACTIONLOG

TARANTOOL

QUERIES

UPDATES

UPDATES

Page 13: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Запись на диск – в деталях

TRANSACTIONLOG SO FAR

THE NEXT TRANSACTION

THE NEXT TRANSACTION

THE NEXT TRANSACTION

New transactions all apply at the end of the log

Page 14: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Доктор, это не медленно?

TRANSACTIONLOG SO FAR

THE NEXT TRANSACTION

THE NEXT TRANSACTION

THE NEXT TRANSACTION

New transactions all apply at the end of the log

Page 15: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Доктор, это не медленно?

TRANSACTIONLOG SO FAR

THE NEXT TRANSACTION

THE NEXT TRANSACTION

THE NEXT TRANSACTION

New transactions all apply at the end of the log

HDD – 100Mb/sSSD - 250Mb/s

Page 16: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Доктор, это не медленно?

TRANSACTIONLOG SO FAR

THE NEXT TRANSACTION

THE NEXT TRANSACTION

THE NEXT TRANSACTION

New transactions all apply at the end of the log

HDD – 100Mb/sSSD - 250Mb/s

При размере транзакции 100 байтэто от 1 mln TPS

Page 17: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

А как дисковые базы пишут на диск?

Page 18: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Они делают все, что Tarantool, плюс …

RAM

TRANSACTIONLOG

DISK DATABASE

QUERIES

UPDATES

UPDATES

Page 19: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

… плюс обновляют данные на диске (как?)

Page 20: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

… обновляют данные на диске в дереве

BLOCKB-Tree

BLOCK BLOCK BLOCK

BLOCK BLOCK BLOCK BLOCK BLOCK

Page 21: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

… обновляют данные на диске в дереве

• Это случайное обращение к диску• На HDD – это в лучшем случае 100 обращений в секунду• На SSD – 1000-5000 обращений в секунду

Page 22: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Tarantool. Старт

TarantoolRead Snapshot

&log

Page 23: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Tarantool. Старт. Как быстро?

TarantoolRead Snapshot

&log

Page 24: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Tarantool. Старт. Довольно быстро

TarantoolRead Snapshot

&log

HDD – 100Mb/sSSD - 250Mb/s

Page 25: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

А дисковые базы данных как стартуют?

Page 26: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

А дисковые базы данных как стартуют?

• Надо отдать им должное, стартуют почти моментально

Page 27: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

А дисковые базы данных как стартуют?

• Надо отдать им должное, стартуют почти моментально• Но …

Page 28: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

А дисковые базы данных как стартуют?

• Надо отдать им должное, стартуют почти моментально• Но начинают нормально работать после прогрева кэша

Page 29: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

А дисковые базы данных как стартуют?

• Надо отдать им должное, стартуют почти моментально• Но начинают нормально работать после прогрева кэша• Бывалые DBA знают различные техники прогрева

Page 30: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

А дисковые базы данных как стартуют?

• Надо отдать им должное, стартуют почти моментально• Но начинают нормально работать после прогрева кэша• Бывалые DBA знают различные техники прогрева• А как в целом прогревается кэш?

Page 31: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Как прогревается кэш?

Page 32: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Как прогревается кэш?

Disk based

database

Random readDISK

User

Page 33: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Как прогревается кэш?

Disk based

database

Random readDISK

User Практика Mail.Ru c MySQL – 1-2 Mb/s

Page 34: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Как прогревается кэш?

1-2 Mb/s vs 100-250 Mb/s

Разница в 100 раз!

Page 35: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Как прогревается кэш?

• Tarantool готов к работе гораздо раньше дисковых баз• И не потому что магия, а потому что in-memory• Горячие данные сгруппированы, не размазаны по диску

Page 36: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

А теперь давайте поговорим о latency

Page 37: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Latency spikes в Mail.Ru по ночамКаждую ночь latency вырастала в 1000 раз в течение минуты

Page 38: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

В чем причина?

Ну, явно же не в нагрузке от пользователей. Они спят по ночам обычно

Page 39: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Причина – ночной snapshotting• snapshotting – это дамп всей базы с целью сжатия лога• начиная с Tarantool 1.6.6 мы полностью переделали snapshotting• не затормаживая поток обработки транзакций• почти без лишних выделений памяти

Page 40: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Почему snapshotting тормозит все?

Page 41: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Потому что fork()

Tarantoolparent

Snapshot by fork()

DISKTarantool

child

Почему fork() – это зло для snapshotting?

Page 42: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Механизм copy-on-write в fork() вызывает массовые выделения страниц и копирование

Tarantoolparent

Snapshot by fork()

DISKTarantool

child

Memory Memory

Copy-on-write

Page 43: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

А как у других in-memory баз данных?

Tarantoolparent

Snapshot by fork()

DISKTarantool

child

Memory Memory

Copy-on-write

Кстати, Redis делает так же

Page 44: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

fork(). Как сделать лучше?

Tarantoolparent

Snapshot by fork()

DISKTarantool

child

Memory Memory

Copy-on-write

Кстати, Redis делает так же

Page 45: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Заменить copy-on-write на собственный механизм

Tarantoolparent

Snapshot by fork()

DISKTarantool

child

Memory Memory

Copy-on-writeСобственный механизм

Page 46: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

MVCC• Во время snapshotting изменения делаем копированием• У каждого элемента несколько версий• При изменениях создаются новые версии• Копируем не 4K, а лишь несколько байт• Не копируем таблицы дескрипторов

Page 47: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
Page 48: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Latency spikes пропали. Все работает быстро. Даже ночью

Page 49: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Узкие места в базе данных

Page 50: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Узкие места в базе данных• во сколько раз хэш из C++ быстрее индекса в базе данных?

Page 51: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Узкие места в базе данных• во сколько раз хэш из C++ быстрее индекса в базе данных?• std::unordered_map – 2 млн. операций в секунду (на 1 ядре)

Page 52: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Узкие места в базе данных• во сколько раз хэш из C++ быстрее индекса в базе данных?• std::unordered_map – 2 млн. операций в секунду (на 1 ядре)• индекс – в лучшем случае 10К операций в секунду (на 1 ядре)

Page 53: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Узкие места в базе данных• во сколько раз хэш из C++ быстрее индекса в базе данных?• std::unordered_map – 2 млн. операций в секунду (на 1 ядре)• индекс – в лучшем случае 10К операций в секунду (на 1 ядре)• Разница в 100 раз! Почему?

Page 54: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Узкие места в базе данных• во сколько раз хэш из C++ быстрее индекса в базе данных?• std::unordered_map – 2 млн. операций в секунду (на 1 ядре)• индекс – в лучшем случае 10К операций в секунду (на 1 ядре)• Разница в 100 раз! Почему?• Системные вызовы!

Page 55: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Откуда системные вызовы?• Считать запрос из сети (read)• Заблокировать (mutex)• Разблокировать (mutex)• Записать в лог транзакцию (write)• Записать ответ в сеть (write)

Page 56: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Почему системные вызовы дорогие?• Скопировать контекст (скопировать сотни байт минимум)• Войти в режим ядра• Восстановить контекст (скопировать сотни байт минимум)• Выйти из режима ядра

Page 57: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Как Tarantool решает эти проблемы?• Асинхронный протокол – используем сокет параллельно• Пакетная работа с сетью• Пакетная работа с диском• Меньше syscalls, меньше переходов в режим ядра и обратно

Page 58: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Как Tarantool решает эти проблемы?

Clients

REQUEST

Network thread TX Disk thread

REQUEST

RESPONSE

GROUP OF REQUESTS

PROCESS IN-MEMORY

BEGINLOG GROUP

MARK EACH OF GROUP

COMMITTEDGROUP OF RESPONSES

ENDLOG GROUP

Page 59: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

На сегодня все!

Page 60: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Что я не рассказал• Zero copy (почти нет копирований)• Собственные структуры данных (tree, hash)• Собственный алокатор• Однопоточный процессор транзакций – нет накладных расходов

на блокировки• Параллельность на fibers, а не на threads => меньше

переключений контекста• И многое другое …

Page 61: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

http://sh5.tarantool.org• В завершение хочу рассказать про нетехнический метод

поддержки оптимальности• У нас есть специальная система, которая проверяет

производительность по каждому коммиту и по многим параметрам

Page 62: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Кстати, она, как и весь код Tarantool, открытаи позволяет нам держать себя в форме

Page 63: За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)

Вопросы?• Буду рад ответить на все ваши вопросы• А также подходите в экспертную зону Tarantool• Если вопросы останутся после доклада, то не стесняйтесь писать на

[email protected] или на [email protected]• Также посетите наш сайт https://tarantool.org• Или наш твиттер https://twitter.com/TarantoolDB• Кроме того, мы рады ответить на ваши вопросы в гугловой группе:

https://groups.google.com/forum/#!forum/tarantool• И на stackoverflow: https://stackoverflow.com/questions/tagged/tarantool