Конференция завершена. Ждем вас на HighLoad++ в следующий раз!

С++ и msgpack: проектирование кастомных протоколов

C++

Доклад принят в программу конференции

Тезисы

В своем докладе я хочу рассказать, как мы используем msgpack в асинхронном сетевом протоколе СУБД и сервера приложений Tarantool в целом и о реализации его клиентской части (коннектора) на С++, в частности.

Для коммуникации с базами данных проблемой является заранее неизвестная структура данных, а если рассматривать Tarantool в контексте сервера приложений, то задача становится фактически реализацией протокола RPC с неопределенным набором функций. Другими словами, при реализации сервера и коннектора к нему структура и набор данных не определены. Для такого динамического протокола хорошо подошел msgpack, однако это принесло сложности в разработке и затронуло быстродействие системы.

У коннектора, вдобавок к динамичности, есть еще одна проблема — встраиваемость в существующую кодовую базу приложения. По-хорошему, нужно сделать так, чтобы вне зависимости от того, что использует приложение — блокирующее I/O, epoll, другие событийные циклы, файберы — можно было бы удобно использовать коннектор.

Однако самым интересным, на мой взгляд, является реализованный используемый нами подход для работы с msgpack в С++. С самого начала стояли цели удобства и максимизации производительности упаковки/распаковки msgpack, что заставило нас сделать много интересных вещей, например, compile-time-упаковку, и state-machine-распаковку данных. Все это сделано при помощи настоящей забористой шаблонной магии, что должно обязательно порадовать настоящих любителей C++.

В этом докладе я попробую поделиться решениями этих и других проблем, а также просто опытом создания подобных систем.

Закончил МФТИ, большую часть жизни работал программистом в разных областях. В основном пишет на C/C++ в сфере разработки баз данных. Интересуется алгоритмами и оптимизацией.
Работает в Tarantool-подразделении VK, разрабатывают СУБД Tarantool.

VK

VK — крупная российская технологическая компания. Как и обо всех крупных компаниях, о ней не расскажешь в двух словах, зато есть подробная статья в википедии.

Видео