Как сделать быстрый C++-коннектор и не поломать кодовую базу приложения
Александр Ляпунов
Я расскажу, как мы используем msgpack в асинхронном сетевом протоколе СУБД и серверы приложений Tarantool в целом и в том числе о реализации его клиентской части (коннектора) на С++.
При коммуникации с базами данных есть проблема — заранее неизвестная структура данных. А если рассматривать Tarantool в контексте сервера приложений, то задача становится фактически реализацией протокола RPC с неопределенным набором функций. Другими словами, при реализации сервера и коннектора к нему структура и набор данных не определены. Для такого динамического протокола хорошо подошел msgpack, однако это принесло сложности в разработке и затронуло быстродействие системы.
Помимо динамичности, у коннектора есть еще одна проблема — встраиваемость в существующую кодовую базу приложения. Нужно сделать так, чтобы коннектором было удобно пользоваться независимо от того, что использует приложение (блокирующее I/O, epoll, другие событийные циклы, файберы).