Подтвердить что ты не робот

Различия между OT и CRDT

Может ли кто-нибудь объяснить мне просто основные различия между операционным преобразованием и CRDT?

Насколько я понимаю, оба алгоритма позволяют разрешать данные без конфликтов на разных узлах распределенной системы.

В каком порядке вы используете какой алгоритм? Насколько я понимаю, OT в основном используется для текста, а CRDT является более общим и может обрабатывать более сложные структуры правильно?

Является ли CRDT более мощным, чем OT?


Я задаю этот вопрос, потому что я пытаюсь понять, как реализовать совлокальный редактор для HTML-документов, и не уверен, в каком направлении смотреть первым. Я видел проект ShareJS и их попытки поддерживать сотрудничество с богатым текстом в браузере на элементах contenteditables. Нигде в ShareJS я не вижу попытки использовать CRDT для этого.

Мы также знаем, что Google Docs использует OT, и он отлично работает для выпуска документов в режиме реального времени. Является ли Google выбором использования OT, потому что CRDT был не очень известен в то время? Или это был бы хороший выбор сегодня?

Мне также интересно узнать о других случаях использования, например, об использовании этих алгоритмов в базах данных. Кажется, что Riak использует CRDT. Может ли OT использоваться для синхронизации узлов базы данных и быть альтернативой Paxos/Zab/Raft?

4b9b3361

Ответ 1

Оба подхода аналогичны, поскольку они обеспечивают возможную согласованность. Разница в том, как они это делают. Один из способов взглянуть на это:

  • OT делает это, изменяя операции . Операции передаются по проводу, и одновременные операции преобразуются после их получения.
  • CRDT делают это, изменяя состояние. Операции выполняются на местном CRDT. Его состояние отправляется по проводу и сливается с состоянием копии. Не имеет значения, сколько раз или в каком порядке выполняются слияния - все копии сходятся.

Вы правы, OT в основном используется для текста и предшествует CRDT, но исследование показывает, что:

многие алгоритмы OT в литературе не удовлетворяют свойствам сходимости в отличие от того, что было заявлено их авторами

Другими словами, объединение CRDT является коммутативным, тогда как функции преобразования OT иногда не являются.

Из Статья в Википедии о CRDT:

OT, как правило, являются сложными и немасштабируемыми

Существуют разные типы CRDT (наборы, счетчики,...), подходящие для различных задач. Есть некоторые, которые предназначены для редактирования текста. Например, Treedoc - Комбинированный реплицируемый тип данных для совместного редактирования.