22.02.2021: Пожалуйста, расскажите о теории CAP и приведите пример

Java распределенный

CAP

Теория CAP является обычной теорией в распределенных системах.Eric Brewerсуществуетлекцияпредложено в. В этой лекции, в традиционной теории ACID и популярной, но абстрактной теории руководства по проектированию, теории BASE (теория BASE была еще очень абстрактной в то время, только несколько лет спустя была завершена более авторитетная и широко принятая теория BASE. объяснение и конструкция) аналогия, предлагаемая

  • C (согласованность): в распределенной системете же данныеизвсе резервные копии,существуеттот же моментимеют одинаковое значение. То есть для чтения и записи одних и тех же данных нужно ли видеть согласованные результаты для всех реплик сразу. Обычная реализация строгой согласованности заключается в том, что запросы на запись не возвращаются, а запросы на чтение блокируются или истекают по времени, пока не будут видны согласованные результаты.
  • A (Доступность, доступность): когда некоторые узлы в кластере выходят из строя, кластер все еще можетОтвечать на запросы чтения и записи.
  • P (допуск к разделению, допуск к разделу): Распределенная система имеет несколько узлов. Если сеть между узлами будет прервана, это вызоветраздел.

и предложил, чтобы CAPне все довольны, ноОбычно выбирают два, чтобы удовлетворить

после,Seth Gilbertа такжеNancy Lynchсуществуетзаписка, доказаноCAP не может быть удовлетворен одновременно. И определение CAP более ясное:

  • C: Должна соблюдаться атомарная согласованность, то есть любое чтение и запись являются атомарными, то есть для чтения после записи одних и тех же данных должно быть прочитано записанное значение, то естьпоследнее значение
  • A: Все успешные запросы должны быть возвращены в течение ограниченного времени, то есть успешные запросы действительны и могут быть прекращены.
  • П: возможноНекоторые сообщения теряются при передаче между узлами.

система условного доступа

То есть система, не допускающая разбиения, на самом деле является не распределенной системой, а автономной системой. Например, база данных на одном компьютере или база данных с общим хранилищем, такая как база данных, разработанная с использованием аналогичной идеи Aurora DB, использует одно и то же хранилище и устанавливает в нем разные процессы MySQL, один MySQL для чтения и записи и другой только для чтения, потому что используется тот же блок памяти, и только один процесс MySQL записывает, что удовлетворяет характеристикам транзакций ACID и может гарантировать строгую согласованность и доступность.

система КП

этоСистемы, которые не требуют высокой доступности, но требуют строгой согласованности, даже если текущий бизнес недоступен, несогласованность данных не может возникнуть. И, если синхронизация не удалась из-за потери сообщений, передаваемых между узлами, илиПовторить попытку, или вернутьсяОшибка обновления, запрос на откат обновления.

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

В то же время большинство распределенных баз данных являются системами CP, но их схемы протоколов консенсуса различны, например, Paxos, 2PC, 3PC, RAFT и так далее.

система точки доступа

этоСистемы, требующие высокой доступности, но не требующие строгой согласованности. В этом случае после разделения данные между узлами могут быть несогласованными, и каждый узел продолжает предоставлять услуги со своими локальными данными. В этом случае может возникнуть несогласованность данных, и система обычно реализуетвозможная согласованность. То есть после окончания раздела данные синхронизируются через какие-то механизмы.

в основном естьмногоуровневая система кэширования, являются системным дизайном AP. Например, DNS, кэширование на стороне клиента, кэширование браузера и кэширование в процессе, и это лишь некоторые из них.

Сравнение систем CP и AP

Классический пример — Zookeeper в качестве реестра и Eureka в качестве реестра.

Предположим, у реестра есть два интерфейса: один для регистрации экземпляров, а другой для чтения экземпляров.

Если в качестве центра регистрации используется Zookeeper, для запроса экземпляра регистрации, то есть запроса на обновление, используется механизм синхронизации более половины записи и 2 ПК.image

Только в случае успешного обновления более половины 2ПК запрос на регистрацию будет успешным, так что каждый считывающий узел будет читать запрос на обновление, в противном случае обновленный узел будет откатываться. И данные каждого узла согласованы. Если более половины узлов недоступны, весь кластер не может обрабатывать запросы на регистрацию экземпляров и чтение экземпляров. Это гарантирует строгую согласованность, но ставится под угрозу доступность.

Если Eureka используется в качестве центра регистрации, после отправки запроса на регистрацию на экземпляр Eureka Eureka будет перенаправлен на другие узлы Eureka в кластере.

image

Даже если некоторые узлы выйдут из строя, обновленные не будут откатываться. И независимо от того, какие Eureka в кластере отключены, это не повлияет на другие нормальные Eureka, чтобы они продолжали свою работу службы, хотя могут быть прочитаны более старые данные, а некоторые данные могут быть несогласованными.

Текущая теория CAP

С непрерывным развитием технологии и теорией непрерывного совершенствования мы обнаруживаем, что ситуация разделения возникает не часто, в большинстве случаев, если мы игнорируем P, на самом деле, случай CA может сосуществовать с реализацией. Если раздел воспринимается как удивление, мы можем заранее сформулировать стратегии реагирования, например, ввести деградацию службы, ограничить определенные операции, логические несоответствия, восстановив компенсацию исправление данных.

Теория PACELC, которая развилась на основе CAP, является более практичным руководством для этой ситуации. В случае разделов, взятие первой половины на самом деле является теорией CAP. Если раздела нет, то есть в большинстве случаев мы рассматриваем компромисс между L (Latency, задержка) и C (Consistency Consistency).

Ищите «My Programming Meow» в WeChat, подписывайтесь на официальный аккаунт, чистите каждый день, легко улучшайте свои технологии и получайте различные предложения.