С широким использованием микросервисов и распределенных систем теорема CAP стала знакома всем и стала тремя основными показателями распределенных систем. В этой статье мы поговорим о теореме CAP.
Теорема CAP
В 1998 году Эрик Брюэр, специалист по информатике из Калифорнийского университета, предложил, чтобы распределенные системы имели три показателя:
- Consistency.
- Availability.
- Partition Tolerance.
Эрик Брюэр говорит, что невозможно делать все три одновременно. Затем возьмите первую букву и сформируйте теорему CAP.
Давайте посмотрим, что представляют собой эти три индикатора?
Последовательность: Относится к согласованности чтения и записи данных, особенно согласованности данных в распределенных системах. Как понять эту фразу?
Предположим, что теперь у нас есть два экземпляра G1 и G2, а текущее значение равно v0.Клиент отправляет запрос на обновление в G1, чтобы обновить v0 до v1, как показано на следующем рисунке:
Без какой-либо обработки значение, соответствующее экземпляру G1, равно v1, а значение, соответствующее G2, равно v0.Если в это время клиент инициирует запрос на чтение, данные в прочитанном экземпляре G1 равны v1, а значение прочитанного экземпляра G2 равно v0, что приводит к несогласованности данных, которая не удовлетворяет согласованности данных.. Как обеспечить согласованность данных? Необходимо позволить G1 отправлять сообщение G2, когда G1 записывает, запрашивая, чтобы G2 также был изменен на v1.
В этом случае значение обоих экземпляров равно v1, а данные, полученные клиентом, одинаковы независимо от того, какой сервер читает клиент — это консистентность данных.Говоря простым языком, данные между несколькими экземплярами должны быть одинаковыми.Например, в архитектуре master-slave MySQL нам нужно использовать журналы binlog для обеспечения согласованности данных между главным и подчиненным серверами.
Доступность: Это относится к высокой доступности услуг, особенно к высокой доступности услуг в распределенных системах.Это легко понять, то есть, если я отправлю вам запрос, вы должны дать мне правильный ответ.
Допуск перегородки: Указывает, что распределенная система по-прежнему может отвечать на запросы пользователей, даже если она сталкивается с сетевыми разделами. Как понять это?
В нашей распределенной системе сеть узлов должна быть связана. Однако это возможноИз-за каких-то сбоев некоторые узлы отключены, вся сеть разделена на несколько областей, а данные разбросаны по этим разъединенным областям, что называется партицией.. Отказоустойчивость означает, что разделы также должны иметь нормальный доступ, говоря простым языком, не должно быть единой точки отказа. В распределенной системе дрожание сети и сбой неизбежны, поэтомуВ CAP должен быть реализован P, и его можно выбрать только в CA..
Далее давайте рассмотрим стратегию выбора CAP и ее применение в промежуточном программном обеспечении с открытым исходным кодом, чтобы углубить наше понимание CAP.
Оставить CP и сбросить A
Для сценариев, требующих сравнения непротиворечивости данных, можно пожертвовать определенной степенью доступности для обеспечения непротиворечивости данных, то есть строгой непротиворечивости. Например, финансовая отрасль, потому что она не допускает несоответствия данных в любое время, иначе это принесет убытки пользователям. Следовательно, в этом сценарии должно быть гарантировано CP.
В нашем промежуточном программном обеспечении с открытым исходным кодомZooKeeper использует стратегию сохранения CP и отказа от A,Посмотри.
В кластере ZooKeeper узлы, отличные от узла-лидера, называются узлами-последователями.Узел-лидер будет нести особую ответственность за обработку запроса пользователя на запись.:
- Когда пользователь отправляет запрос на запись узлу, если запрошенный узел является лидером, запрос будет обработан напрямую;
- Если запрос является узлом-последователем, узел перенаправляет запрос ведущему, а затем ведущий сначала выдает предложение всем ведомым.После того, как более половины узлов согласятся, ведущий отправит операцию записи, тем самым данные сильная согласованность.
Конкретная схема выглядит следующим образом:
При возникновении сетевого разделаЕсли количество узлов в одном из разделов больше половины от общего числа узлов в кластере, то этот раздел может избрать другого лидера и по-прежнему предоставлять услуги пользователям, но до избрания лидера он не может предоставлять услуги пользователи обычно;
Если образовалась перегородка,Если количество узлов ни в одном из разделов не превышает половины от общего числа узлов в кластере, система не может нормально предоставлять услуги пользователям и может предоставлять услуги только после восстановления сети..
Такой дизайн обеспечивает согласованность данных, но жертвует определенной доступностью, например, когда Лидер выходит из строя.
Сохранить AP и сбросить C
Стратегия сохранения AP и отказа от C является относительно распространенной стратегией. Чтобы обеспечить высокую доступность системы, в случае сетевого дрожания данные временно могут быть несогласованными, а определенная степень согласованности данных приносится в жертву.
После появления сетевого раздела синхронизация данных между узлами невозможна сразу, для обеспечения высокой доступности распределенная система должна мгновенно реагировать на запросы пользователей. Однако некоторые узлы могут не получать последние данные в это время и могут возвращать пользователю только локальные старые данные, что приводит к несогласованности данных.
Например, наш реестр eureka использует эту стратегию.В кластере eureka, когда экземпляр выходит из строя, это не приведет к недоступности всего реестра eureka, и активный сервер eureka по-прежнему может отвечать на внешние запросы. Когда отключенный сервер перезапускается, данные между экземплярами eureka несовместимы до первой синхронизации данных, но после одной синхронизации данных данные между экземплярами согласуются, что достигается за счет пожертвования согласованностью данных для обеспечения высокой доступности системы.
Вышеизложенное — теорема CAP, надеюсь, она будет полезна вам в учебе или работе. Последний вопрос для размышления:
Как устроена распределенная архитектура вашей компании?
Добро пожаловать в публичный аккаунт【Интернет плоский]. Обратите внимание на этого программиста, который борется за выживание в Интернете. Желаем вам и мне вместе добиться прогресса. Лучшее сегодня - это самые низкие требования завтра.