Важным вопросом в распределенных системах является репликация данных.Репликация данных обычно направлена на повышение доступности системы или повышение производительности. Основной проблемой при реализации репликации данных является обеспечение согласованности каждой реплики. В этой статье сначала обсуждается, почему модель согласованности так важна в контексте репликации данных, затем обсуждается значение модели согласованности и, наконец, анализируются часто используемые модели согласованности.
Зачем нужна модель согласованности
** Репликация данных преследует две основные цели: доступность и производительность. **Прежде всего, репликация данных может повысить доступность системы. В случае сохранения нескольких копий, если одна копия недоступна, система переключится на другую копию и восстановится. Типичным примером является обычно используемая схема синхронизации активного-резервного сервера MySQL. С другой стороны, репликация данных может обеспечить производительность системы. Репликация данных — очень важный инструмент, когда распределенной системе необходимо масштабироваться по количеству серверов и географическому району. При множественных копиях данных запросы могут быть распределены, при предоставлении услуг в нескольких регионах эффективность доступа клиентов к данным также может быть повышена за счет принципа близости. Типичным примером является широко используемая технология CDN. Но дублирование данных имеет свою цену. ** Репликация данных создает проблему непротиворечивости данных при многократном копировании. **После обновления данных одной копии другие копии должны быть синхронизированы, иначе несогласованность данных может вызвать проблемы в бизнесе. Таким образом, время и способ изменения всех реплик при каждом обновлении данных определяют размер стоимости репликации. Глобальная синхронизация и производительность на самом деле противоречат друг другу, и для повышения производительности часто применяются методы ослабления требований согласованности. следовательно,Нам нужна модель согласованности, чтобы понимать и рассуждать о проблемах и лежащих в их основе предположениях о репликации данных в распределенных системах.
Что такое модель согласованности
Сначала нам нужно определить терминологию модели согласованности:
- хранилище данных: В распределенных системах это относится к распределенным общим базам данных, распределенным файловым системам и т. д.
- операции чтения и записи: Операции по изменению данных называются операциями записи (включая добавление, изменение и удаление), а другие операции называются операциями чтения.
Ниже приводится определение модели согласованности:Модель согласованности — это, по сути, договор между процессами и хранилищем данных: если процесс следует определенным правилам, то процесс читает и записывает данные, как и ожидалось.
Приведенное выше определение может быть абстрактным, поэтому давайте воспользуемся общей моделью строгой согласованности, чтобы объяснить его простым способом: ** В модели линейной согласованности процесс считывает элемент данных и ожидает, что хранилище данных вернет данные в конце. , Результат после операции записи. ** Это легко реализовать в автономной системе.В MySQL, пока вы используете метод блокировки чтения, вы можете гарантировать, что результат чтения данных после последней операции записи будет получен. Однако в распределенной системе из-за отсутствия глобальных часов очень сложно точно определить, какая операция записи является последней операцией записи, поэтому был создан ряд моделей согласованности. **Каждая модель эффективно ограничивает значение, которое должно быть возвращено при выполнении операции чтения над элементом данных. **Например: предположим, что значение записи X имеет реплики на узлах M и N, когда клиент A изменяет значение X на реплике M, через некоторое время клиент B считывает значение X из N, это согласованность времени модель определяет, может ли клиент B прочитать значение, записанное A.
Модели согласованности можно в основном разделить на две категории:Это может гарантировать, что все процессы читают и записывают данные в одном и том же порядке.Модель согласованности называетсяМодель строгой согласованности, а модель негарантированной согласованности называетсяМодель слабой согласованности.
Модель строгой согласованности
Линеаризуемая согласованность
Линейную согласованность также называют строгой согласованностью (Strict Consistency) или атомарной согласованностью (Atomic Consistency), ее условия таковы:
- Любое чтение может прочитать последние записанные данные определенных данных.
- Порядок операций, наблюдаемых всеми процессами, такой же, как и порядок глобальных часов.
Линейная непротиворечивость — это модель непротиворечивости с высочайшими требованиями к непротиворечивости, которую невозможно достичь при существующей технологии. Поскольку для этого требуется синхронизация всех операций в режиме реального времени, невозможно добиться глобально согласованных часов в распределенной системе с помощью существующей технологии. Во-первых, обязательно будет задержка связи, а если есть задержка, то синхронизация часов не может быть последовательной. Конечно, не исключено, что новые технологии смогут это сделать в будущем, но в настоящее время линейной непротиворечивости добиться не удается.
Последовательная согласованность
Последовательная согласованность была впервые предложена Лэмпортом (1979) при адресации разделяемой памяти в многопроцессорных системах. Обратитесь к моей предыдущей статье »Распределенные системы: логические часы Лэмпорта". Его условия таковы:
- Любая операция чтения или записи выполняется в определенном порядке.
- Последовательность операций чтения и записи для всех процессов остается неизменной.
Во-первых, давайте проанализируем сходство между линейной согласованностью и последовательной согласованностью. Все они могут гарантировать, что все процессы считывают и записывают данные в одном и том же порядке. Реализация линейной согласованности очень проста.Согласно глобальным часам (которые можно просто понимать как физические часы) в качестве системы отсчета все процессы различают последовательность событий в соответствии с меткой времени глобальных часов, поэтому она должна быть видны всем процессам Операции чтения и записи данных Порядок должен быть одинаковым, поскольку их система отсчета одинакова. в то время как последовательная согласованность используетлогические часыКак и глобальные часы в распределенной системе, все процессы также имеют единую систему отсчета для сортировки операций чтения и записи, поэтому последовательность операций чтения и записи данных, наблюдаемая всеми процессами, также одинакова.
Так в чем же разница между линейной согласованностью и последовательной согласованностью? С помощью приведенного выше анализа можно обнаружить, что, хотя последовательная согласованность гарантирует, что все процессы поддерживают постоянный порядок операций чтения и записи через логические часы, порядок этих операций чтения и записи не обязательно совпадает с порядком, в котором они действительно происходят. ** И строго гарантируется, что линейная согласованность соответствует порядку, в котором это произошло на самом деле.
Модель слабой согласованности
Причинная последовательность
Каузальная непротиворечивость — это ослабленная модель последовательной непротиворечивости, поскольку она различает события с потенциальной причинностью и события без причинности. Так что же такое причинность? Если событие В вызвано событием А или находится под его влиянием, то эти два события причинно связаны. В качестве примера распределенной базы данных предположим, что процесс P1 записывает элемент данных x, а затем процесс P2 сначала читает x, а затем записывает y, затем операция чтения x и операция записи y. Существует потенциальная причинно-следственная связь, поскольку вычисление y может зависеть от значения x, считываемого P2 (то есть значения, записанного P1). С другой стороны, если два процесса одновременно записывают в два разных элемента данных, то эти два события не связаны причинно-следственной связью. Операции без причинности называются параллельными операциями. Это лишь краткое изложение.Для более глубокого анализа см. статью, которую я написал ранее"Распределенные системы: векторные часы". К условиям причинной непротиворечивости относятся:
- Все процессы должны видеть операции чтения и записи в одном и том же порядке.
- Различные процессы могут видеть одновременные операции чтения и записи в разном порядке.
Давайте проанализируем, почему каузальная непротиворечивость является моделью ослабленной последовательной непротиворечивости. Хотя последовательная согласованность не гарантирует, что события происходят в том же порядке, в каком они происходят на самом деле, она гарантирует, что все процессы видят одинаковый порядок операций чтения и записи. Однако **причинная согласованность еще больше ослабляет ограничения на порядок операций чтения и записи в последовательной согласованности и гарантирует только порядок операций чтения и записи с причинно-следственной связью и не гарантирует операции чтения и записи (параллельные события) без причинно-следственной связи. ** То есть, если это некаузальная операция с данными, значения, видимые разными процессами, могут быть разными, а значения, видимые разными процессами с каузальными операциями с данными, гарантированно будут одинаковыми.
Конечная согласованность
Окончательная согласованность - это более ослабленная модель согласованности.Причинная согласованность, по крайней мере, также гарантирует, что значения, считываемые различными процессами причинно-следственных данных, гарантированно будут одинаковыми, в то время какСогласованность в конечном итоге гарантирует только то, что данные всех реплик в какой-то момент в конечном итоге будут согласованы.В некотором смысле окончательная согласованность гарантирует, что данные в конечном итоге будут непротиворечивыми в какой-то момент, это все равно, что сказать: «люди однажды умрут». На самом деле нас больше беспокоят:
- Сколько длится "наконец"? Вообще говоря, фактическая операционная система должна гарантировать ограниченный диапазон времени.
- Какова стратегия обновления данных между несколькими репликами? Данные могут обновляться несколько раз в течение определенного периода времени. Какие данные имеют преимущественную силу? Обычная стратегия обновления данных заключается в использовании данных с самой последней отметкой времени в качестве стандарта.
Поскольку конечная согласованность требует относительно низкой согласованности данных, эта модель согласованности часто используется в сценариях с высокими требованиями к производительности.
Клиентоориентированность
Модель согласованности, которую мы обсуждали ранее, полностью посвящена тому, как добиться согласованности между несколькими копиями хранилища данных.Рассмотрите такой сценарий: в модели согласованности в конечном счете, если клиент обращается к разным данным в пределах временного окна, когда данные не синхронизированы. данные копии, может возникнуть ситуация, когда одни и те же данные читаются, но получаются разные значения. Для решения этой проблемы была предложена модель согласованности, ориентированная на клиента.Согласованность, ориентированная на клиента, предоставляет гарантии согласованности для одного клиента, чтобы обеспечить согласованность доступа клиента к хранилищу данных, но не предоставляет никаких гарантий согласованности для одновременного доступа разных клиентов.Например: клиент A считывает последнее значение x на реплике M как 1. Предположим, что реплика M зависает, а клиент A подключается к реплике N. В это время значение x на реплике N равно 0 старой версии, тогда Модель согласованности гарантирует, что значение x, прочитанное клиентом A, равно 1, а не 0 в старой версии. Выполнимое решение состоит в том, чтобы добавить тег версии к данным x, и в то же время клиент A будет кэшировать значение x и идентифицировать старые и новые данные, сравнивая версию, чтобы гарантировать, что клиент не будет читать старые ценность.
Клиентоориентированное соответствие состоит из четырех подмоделей:
- Консистенция монотонного чтения: Если процесс считывает значение элемента данных x, то все последующие операции чтения x будут либо считывать первое считанное значение, либо считывать обновленное значение. То есть гарантируется, что клиент не прочитает старое значение.
- Консистенция монотонной записи: Операция записи процесса в элемент данных x должна завершиться перед любой последующей операцией записи в x этим процессом. То есть операция записи клиента гарантированно будет последовательной.
- Последовательность чтения-записи: Результат операции записи, выполненной процессом над элементом данных x, всегда виден последующим операциям чтения, выполненным этим процессом над x. Это делается для того, чтобы клиент мог прочитать свое последнее записанное значение.
- Запись-следу-чтение: записи, которые следуют за чтением элемента данных x одним и тем же процессом, гарантированно будут происходить с тем же или более новым значением, чем значение чтения x. То есть гарантируется, что операция записи клиента в элемент данных основана на последнем значении, прочитанном клиентом.
Суммировать
Репликация данных приводит к проблемам согласованности, поскольку поддержание согласованности реплики может серьезно повлиять на производительность, единственное решение — ослабить требования согласованности. Благодаря модели согласованности мы можем понять и рассуждать о проблемах и основных предположениях, которые необходимо учитывать при репликации данных в распределенной системе, что удобно для поиска компромиссов в сочетании с конкретными бизнес-сценариями. Каждая модель эффективно ограничивает значения, которые должны быть возвращены, выполняя операцию степени над элементом данных. В целом модели с меньшим количеством ограничений применять проще, но гарантии согласованности слабее.
использованная литература
Принципы и парадигмы распределенных систем