libron: работаем с CRDT-оплогом в C++ С++
RON (Replicated Object Notation) — это формат данных на основе операций, разработанный в первую очередь для реализации CRDT (Conflict-Free Replicated Data Types). От типичного оплога (бинлога и т.д.) RON-оплог отличается Лампортовой адресацией и частичным (а не линейным) порядком операций. Это значит, что много реплик могут писать в оплог одновременно и обмениваться этими правками ("мастера" нет). Для распределённых приложений это ли не технология мечты?
Однако же, при реализации RON-оплога возник ряд сложностей.
Во-первых, миссия RON — это побитная сходимость реплик при синхронизации, даже в ненадёжной сети любой топологии. А это — разработка от уровня "сырых" битов до API структур данных (из-за чего и пришлось обратиться к C++).
Во-вторых, помимо ведения оплога, нужно уметь доставать из него объекты с разумными показателями по производительности.
А это открывает вопросы:
* минимизации объёма метаданных (Ахиллесова пята CRDT),
* случайного доступа к логу (немного о структурах данных),
* локальности данных (удивительно долго можно ехать на связном списке операций, но не бесконечно),
* стоимости (де)сериализации (почему пришлось отказаться от protobuf varint),
* и другие вопросы, которые пришлось решать.
В-третьих, разработка показала, что научную часть тоже не мешало бы немножко доработать, но об этом в другой раз.
Тем не менее тем или иным образом, вопросы удалось решить, и теперь есть возможность показать, как можно создавать приложения поверх RON-оплога.
Автор надеется, что доклад поможет слушателям использовать суперсилу CRDT в своих проектах.
Учёный разработчик. Успел поразрабатывать в Банке России, Яндексе, JetBrains, различных исследовательских организациях и стартапах.