Причинная согласованность


Причинная согласованность — одна из основных моделей согласованности памяти . В параллельном программировании , где параллельные процессы обращаются к общей памяти, модель согласованности ограничивает допустимый доступ. Это полезно для определения правильных структур данных в распределенной общей памяти или распределенных транзакциях .

Причинно -следственная согласованность «Доступна в разделе» , что означает, что процесс может читать и записывать память (память доступна), даже если нет действующего сетевого соединения (сеть разделена) между процессами; это асинхронная модель. В отличие от моделей строгой согласованности, таких как последовательная согласованность или линеаризуемость , которые не могут быть одновременно безопасными и работать в рамках раздела, и медленно реагируют, поскольку требуют синхронизации.

Каузальная согласованность была предложена в 1990 -х годах [1] как более слабая модель согласованности для моделей с общей памятью. Причинно-следственная согласованность тесно связана с концепцией причинно-следственной рассылки в коммуникационных протоколах. [2] В этих моделях распределенное исполнение представлено как частичный порядок, основанный на  концепции Лэмпорта « произошло до » потенциальной причинности. [3]

Причинно-следственная согласованность является полезной моделью согласованности, поскольку она соответствует интуитивным представлениям программистов о времени, более доступна, чем модели строгой согласованности, но обеспечивает более полезные гарантии, чем непротиворечивость в конечном счете . Например, в распределенных базах данных причинно-следственная согласованность поддерживает порядок операций, в отличие от согласованности в конечном итоге . [4] Кроме того, причинно-следственная согласованность помогает при разработке абстрактных типов данных, таких как очереди или счетчики. [5]

Поскольку время и порядок столь фундаментальны для нашей интуиции, трудно рассуждать о системе, которая не обеспечивает причинно-следственной последовательности. Однако многие распределенные базы данных не имеют этой гарантии, даже те, которые обеспечивают сериализуемость. [6] Spanner гарантирует причинно-следственную согласованность, но также обеспечивает строгую согласованность, тем самым избегая доступности в рамках раздела . Более доступные базы данных, обеспечивающие причинно-следственную согласованность, включают MongoDB и AntidoteDB .

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