Cогласованность шаблонов в распределенных системах
Распределенная система - это система, состоящая более чем из одного компонента, и каждый компонент отвечает за одну часть приложения.
Прежде чем говорить о шаблонах согласованности, необходимо знать, что такое распределенная система.
Распределенная система — это система, компоненты которой расположены на разных сетевых компьютерах, которые общаются и координируют свои действия, передавая друг другу сообщения. Компоненты взаимодействуют друг с другом для достижения общей цели.
Распределенные системы
Представьте, что у нас есть приложение электронной коммерции, в котором мы продаем книги. Это приложение может состоять из нескольких различных компонентов. Например, один сервер может отвечать за учетные записи, другой — за платежи, один — за хранение заказов, один — за баллы лояльности и соответствующие функции, а третий — за поддержание запасов книг и скоро.
Теперь, если пользователь покупает книгу, для размещения заказа могут быть задействованы различные службы; служба заказа для хранения заказа, служба оплаты для обработки платежей и служба инвентаризации для поддержания запаса этой заказанной книги в актуальном состоянии. Это пример распределенной системы, приложения, состоящего из множества разных компонентов, каждый из которых отвечает за свою часть приложения.
Почему постоянство важно?
При работе с распределенными системами нам нужно подумать об управлении данными на разных серверах. Если мы возьмем приведенный выше пример приложения электронной коммерции, мы увидим, что служба инвентаризации должна иметь актуальную информацию о запасах для заказанных товаров, если пользователь размещает заказ. Теперь может быть два разных пользователя, просматривающих одну и ту же книгу. Теперь представьте, что один из клиентов размещает успешный заказ, и до того, как служба инвентаризации успевает обновить запасы, второй клиент также размещает заказ на ту же книгу. В этом случае, когда инвентарь не обновлялся, у нас будет неверная информация о запасах при размещении второго заказа, т.е. заказанная книга может быть или не быть в наличии на складе. Здесь в игру вступают различные шаблоны согласованности. Они помогают обеспечить согласованность данных в приложении.
Шаблоны согласованности
Шаблоны согласованности относятся к способам хранения данных и управления ими в распределенной системе, а также к тому, как эти данные становятся доступными для пользователей и приложений. Существует три основных типа шаблонов согласованности:
- Сильная консистенция (Strong consistency)
- Слабая консистенция (Weak consistency)
- Конечная согласованность (Eventual Consistency)
Каждый из этих шаблонов имеет свои преимущества и недостатки, и выбор шаблона для использования будет зависеть от конкретных требований приложения или системы.
Сильная консистенция (Strong Consistency)
После обновления данных они будут немедленно видны для любых последующих операций чтения. Данные реплицируются синхронно, что гарантирует одновременное обновление всех копий данных.
В системе строгой согласованности любые обновления некоторых данных немедленно распространяются на все местоположения. Это гарантирует, что все местоположения имеют одинаковую версию данных, но это также означает, что система не является высокодоступной и имеет большую задержку.
Примером строгой согласованности является финансовая система, в которой пользователи могут переводить деньги между счетами. Система предназначена для обеспечения высокой целостности данных , поэтому данные хранятся в одном месте, а обновления этих данных немедленно распространяются на все другие места. Это гарантирует, что все пользователи и приложения работают с одними и теми же точными данными. Например, когда пользователь инициирует перевод средств с одного счета на другой, система немедленно обновляет баланс обоих счетов, и все остальные компоненты системы немедленно узнают об изменении. Это гарантирует, что все пользователи могут видеть обновленный баланс обеих учетных записей, и предотвращает любые несоответствия.
Слабая консистенция (Weak Consistency)
После обновления данных не гарантируется, что любая последующая операция чтения немедленно отразит внесенные изменения. Чтение может видеть или не видеть недавнюю запись.
В слабо непротиворечивой системе обновления данных могут распространяться не сразу. Это может привести к несоответствиям и конфликтам между разными версиями данных, но также обеспечивает высокую доступность и низкую задержку.
Еще одним примером слабой согласованности является игровая платформа, на которой пользователи могут играть в многопользовательские онлайн-игры. Когда пользователь играет в игру, его действия сразу же видны другим игрокам в том же центре обработки данных, но если произошла задержка или временная потеря соединения, некоторые действия могут быть не видны некоторым пользователям, и игра продолжится. Это может привести к несоответствиям между различными версиями состояния игры, но также обеспечивает высокий уровень доступности и низкую задержку.
Конечная согласованность
Окончательная согласованность — это форма слабой согласованности. После обновления данных они в конечном итоге станут видимыми для любых последующих операций чтения. Данные реплицируются асинхронно, что гарантирует обновление всех копий данных.
В окончательно согласованной системе данные обычно хранятся в нескольких местах, и обновления этих данных в конечном итоге распространяются на все места. Это означает, что система обладает высокой доступностью и малой задержкой, но это также означает, что между разными версиями данных могут возникать несоответствия и конфликты.
Примером возможной согласованности является платформа социальных сетей, где пользователи могут публиковать обновления, комментарии и сообщения. Платформа рассчитана на высокую доступность и низкую задержку, поэтому данные хранятся в нескольких центрах обработки данных по всему миру. Когда пользователь публикует обновление, оно сразу становится видимым для других пользователей в том же центре обработки данных, но распространение обновления на другие центры обработки данных может занять некоторое время. Это означает, что некоторые пользователи могут увидеть обновление, а другие — нет, в зависимости от того, к какому центру обработки данных они подключены. Это может привести к несоответствиям между разными версиями данных, но также обеспечивает высокий уровень доступности и низкую задержку.
Итог
В заключение можно сказать, что шаблоны согласованности играют решающую роль в распределенных системах, и выбор шаблона для использования будет зависеть от конкретных требований приложения или системы. У каждого шаблона есть свои преимущества и недостатки, и каждый больше подходит для разных случаев использования. Слабая согласованность подходит для систем, которым требуется высокая доступность и низкая задержка, сильная согласованность подходит для систем, которым требуется высокая целостность данных, а окончательная согласованность подходит для систем, которым требуется как высокая доступность, так и высокая целостность данных.