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

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

С++

C++

API
C/C++
Tarantool
Оптимизация производительности

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

Целевая аудитория

Разработчики на С++.

Тезисы

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

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

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

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

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

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

Tarantool, VK

Tarantool — платформа in-memory-вычислений с гибкой схемой данных для эффективного создания высоконагруженных приложений. VK — это больше 200 технопроектов. Свыше 10 000 человек создают и развивают одни из самых популярных и высоконагруженных интернет-сервисов в стране. Делают комфортнее, легче и интереснее жизнь сотне миллионов людей.

Видео