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

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

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

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

CRDT более мощный, чем OT?


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

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

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

2 ответа

Решение

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

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

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

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

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

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

ОТ, как правило, сложные и не масштабируемые

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

Еще одно заметное отличие заключается в том, что:

  • OT требует центрального сервера для координации.
  • CRDT может принять любую сетевую топологию, такую ​​как P2P через WebRTC, и он устойчив к сетевым разделам, что делает его децентрализованным.

Ссылка: https://youtu.be/B5NULPSiOGw?t=643 Мартина Клеппманна, автора книги «Проектирование приложений, интенсивно использующих данные».

Другие вопросы по тегам