Конечная последовательность - Eventual consistency

Конечная последовательность это модель согласованности используется в распределенных вычислений достигать высокая доступность это неофициально гарантирует, что, если не будут сделаны новые обновления для данного элемента данных, в конечном итоге все обращения к этому элементу вернут последнее обновленное значение.[1] Конечная согласованность, также называемая оптимистическая репликация,[2] широко применяется в распределенных системах и берет свое начало в ранних проектах мобильных вычислений.[3] Часто говорят, что система, которая в конечном итоге достигла согласованности, имеет сходился, или достигнуто схождение реплик.[4] Конечная последовательность - слабая гарантия - самые сильные модели, такие как линеаризуемость тривиально в конечном итоге согласованы, но система, которая просто в конечном итоге согласована, обычно не выполняет эти более строгие ограничения.

В конечном итоге согласованные услуги часто классифицируются как предоставляющие BASE (Bасистично Адоступный, Sчасто состояние, EVentual Consistency) семантика, в отличие от традиционной КИСЛОТА (Атомичность, Cпостоянство, яуединение Dнадежность) гарантии.[5][6] В химии БАЗА противоположна КИСЛОТЕ, что помогает запоминать аббревиатуру.[7] Согласно тому же ресурсу, это приблизительные определения каждого термина в BASE:

  • (B) практически (A) доступный: основные операции чтения и записи доступны в максимально возможной степени (с использованием всех узлов кластера базы данных), но без каких-либо гарантий согласованности (запись может не сохраняться после разрешения конфликтов, чтение может не получить последнюю запись)
  • (S) oft state: без гарантий согласованности, по прошествии некоторого времени, у нас есть только некоторая вероятность узнать состояние, поскольку оно, возможно, еще не сошлось
  • (E) логически согласованный: если система функционирует и мы ждем достаточно долго после любого заданного набора входных данных, мы в конечном итоге сможем узнать, в каком состоянии находится база данных, и поэтому любые дальнейшие чтения будут соответствовать нашим ожиданиям.

Возможная последовательность иногда подвергается критике[8] по мере увеличения сложности распределенных программных приложений. Отчасти это связано с тем, что конечная согласованность - это просто живость гарантия (читает в конечном итоге возвращает то же значение) и не делает безопасность гарантии: согласованная в конечном итоге система может вернуть любое значение до того, как оно сойдется.

Решение конфликта

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

  • обмен версиями или обновлениями данных между серверами (часто известный как антиэнтропия);[9] и
  • выбор подходящего конечного состояния при одновременных обновлениях, называемый примирение.

Наиболее подходящий подход к сверки зависит от приложения. Широко распространенный подход "побеждает последний писатель".[1] Другой - вызвать указанный пользователем обработчик конфликтов.[4] Отметки времени и векторные часы часто используются для обнаружения параллелизма между обновлениями. "первый писатель побеждает" в ситуациях, когда "побеждает последний писатель" недопустимо.[10]

Согласование одновременных записей должно происходить где-то перед следующим чтением и может быть запланировано в разные моменты:[3][11]

  • Исправление при чтении: исправление выполняется, когда при чтении обнаруживается несоответствие. Это замедляет операцию чтения.
  • Исправление записи: исправление происходит во время операции записи, если обнаружено несоответствие, что замедляет операцию записи.
  • Асинхронное восстановление: исправление не является частью операции чтения или записи.

Сильная конечная согласованность

В то время как конечная согласованность - это всего лишь живость гарантия (обновления будут наблюдаться со временем), сильная конечная согласованность (SEC) добавляет безопасность гарантировать, что любые два узла, получившие один и тот же (неупорядоченный) набор обновлений, будут в одинаковом состоянии. Если, кроме того, система монотонный, приложение никогда не потерпит откатов. Бесконфликтные реплицированные типы данных являются общим подходом к обеспечению SEC.[12]

Смотрите также

Рекомендации

  1. ^ а б Фогельс, В. (2009). "В конечном итоге последовательный". Коммуникации ACM. 52: 40. Дои:10.1145/1435417.1435432.
  2. ^ Фогельс, В. (2008). «В конечном итоге согласованный». Очередь. 6 (6): 14. Дои:10.1145/1466443.1466448.
  3. ^ а б Терри, Д. Б.; Theimer, M. M .; Петерсен, К .; Демерс, А. Дж .; Spreitzer, M. J .; Хаузер, К. Х. (1995). «Управление конфликтами обновлений в Bayou, слабо подключенной реплицированной системе хранения». Труды пятнадцатого симпозиума ACM по принципам операционных систем - SOSP '95. п. 172. CiteSeerX  10.1.1.12.7323. Дои:10.1145/224056.224070. ISBN  978-0897917155.
  4. ^ а б Петерсен, К .; Spreitzer, M. J .; Терри, Д. Б.; Theimer, M. M .; Демерс, А. Дж. (1997). «Гибкое распространение обновлений для слабосогласованной репликации». Обзор операционных систем ACM SIGOPS. 31 (5): 288. CiteSeerX  10.1.1.17.555. Дои:10.1145/269005.266711.
  5. ^ Притчетт, Д. (2008). «Основание: кислотная альтернатива». Очередь. 6 (3): 48–55. Дои:10.1145/1394127.1394128.
  6. ^ Bailis, P .; Годси, А. (2013). «Возможная согласованность сегодня: ограничения, расширения и многое другое». Очередь. 11 (3): 20. Дои:10.1145/2460276.2462076.
  7. ^ Роу, Чарльз. «КИСЛОТА против ОСНОВАНИЯ: изменение pH обработки транзакций базы данных». DATAVERSITY. ДАТАВЕРСИТИ Образование, ООО. Получено 29 августа 2019.
  8. ^ ЧАСЯнив Песач (2013), Распределенное хранилище (Распределенное хранилище: концепции, алгоритмы и реализации ред.), Amazon, ПР  25423189M, Системы, использующие конечную согласованность, приводят к снижению нагрузки на систему и повышению доступности системы, но приводят к увеличению когнитивной сложности для пользователей и разработчиков
  9. ^ Демерс, А .; Greene, D .; Hauser, C .; Ирландский, W .; Ларсон, Дж. (1987). «Эпидемические алгоритмы обслуживания реплицированных баз данных». Материалы шестого ежегодного симпозиума ACM по принципам распределенных вычислений - PODC '87. п. 1. Дои:10.1145/41840.41841. ISBN  978-0-89791-239-6.
  10. ^ Рокфорд Лхотка.«Методы параллелизма».2003.
  11. ^ Оливье Малласси (09.06.2010). «Давай поиграем с Кассандрой… (Часть 1/3)». http://blog.octo.com/en/: OCTO Talks!. Получено 2011-03-23. Конечно, в данный момент высока вероятность того, что каждый узел будет иметь свою собственную версию данных. Разрешение конфликтов выполняется во время запросов чтения (называемых чтением-восстановлением), а текущая версия Cassandra не предоставляет механизмов разрешения конфликтов векторных часов [sic] (должен быть доступен в версии 0.7). Разрешение конфликтов основано на метке времени (той, которая устанавливается при вставке строки или столбца): за это отвечает более высокая временная метка win [s] и узел, из которого вы читаете данные. Это важный момент, поскольку метка времени указывается клиентом в момент вставки столбца. Таким образом, все клиенты Cassandra должны быть синхронизированы ...
  12. ^ Шапиро, Марк; Прегуиса, Нуно; Бакеро, Карлос; Завирски, Марек (10.10.2011). «Бесконфликтные реплицированные типы данных». SSS'11 Труды 13-й Международной конференции по стабилизации, безопасности и защищенности распределенных систем. Springer-Verlag Berlin, Гейдельберг: 386–400.