Автор: Константин Осипов · HighLoad Channel
Распределённым транзакциям нужен согласованный порядок. Самое очевидное решение — пропускать их через общий журнал или единый sequencer. Оно упрощает координацию, но создаёт центральную точку, через которую должен пройти весь кластер.
Accord предлагает другой подход. Протокол согласует порядок только между операциями, которые могут затронуть одни и те же данные. Независимые транзакции не приходится выстраивать в общую очередь. Однако для этого клиент должен заранее объявить read/write set — ключи или диапазоны, с которыми будет работать.
Кому смотреть: разработчикам распределённых баз данных и инженерам, которые проектируют транзакционные API поверх шардированных хранилищ.
Из этого можно взять в работу: проверить, можно ли определить все затрагиваемые данные до начала транзакции — и какие пользовательские сценарии такое требование сделает невозможными.
Константин Осипов подводит к Accord через эволюцию протоколов управления транзакциями: от 2PL и 2PC к Paxos, Fast Paxos, flexible quorums, EPaxos и Tempo. За этим перечнем стоит один вопрос: как согласовать конфликтующие операции, не заставляя весь кластер двигаться в одном глобальном порядке.
Транзакция в Accord заранее объявляет ключи или диапазоны для чтения и записи. Реплики используют эту информацию, чтобы найти возможные конфликты, назначить timestamps и построить зависимости. В согласовании участвуют replica sets затронутых данных, а не все узлы кластера. Поэтому транзакции по независимым ключам могут выполняться параллельно.
Если предложенный порядок не вызывает конфликта, Accord использует быстрый путь без отдельной фазы Accept. Когда участники обнаруживают противоречие, протокол переходит к дополнительному раунду согласования. Reorder buffer даёт системе время увидеть конкурирующие операции с учётом сетевых задержек и расхождения часов.
Ограничение этого подхода напрямую следует из его преимущества. Read/write set нельзя менять во время исполнения. Если транзакция сначала читает данные и только потом решает, к каким ключам обратиться, заранее описать её целиком уже не получится. Операции по диапазонам поддерживаются, но требуют больше ресурсов и чаще конфликтуют. Запросы через вторичные индексы тоже становятся сложнее, потому что нужные строки не всегда известны заранее.
Важно для 2026 года: в докладе Accord представлен как новый алгоритм без промышленной реализации. С тех пор появились открытая библиотека Apache Cassandra Accord и интеграция CQL on Accord в разрабатываемой Cassandra 6. Официальная документация уже описывает транзакции, хранение состояния и живую миграцию, однако ветка Cassandra 6 пока помечена как prerelease.
Доклад хорошо показывает, чем Accord платит за отсутствие глобальной очереди. Протокол децентрализует согласование не бесплатно: сначала транзакция должна раскрыть всю область возможного конфликта.