Как может существовать распределенная система CA согласно теореме Cap
Как распределенная система может быть последовательной и доступной - CA. Потому что, когда происходит разделение CA невозможно. И если мы говорим, что раздел не произойдет, то только они являются CA, тогда все системы, которые являются CP или AP, также будут CA в случае, если раздел не произойдет?
3 ответа
Немного поздний ответ, извините
Не может
Как часто упоминается, теорема CAP в ее первоначальном виде немного вводит в заблуждение. Это можно переформулировать как
при наличии сетевого раздела распределенная система либо доступна, либо согласована
так что ты прав. Как правило, системы нельзя классифицировать только как CA, CP или AP, поскольку допуск раздела является свойством системы, которое описывает, что выбрать в случае сетевого раздела. Таким образом, вполне возможно, что система может вести себя в соответствии с AP иногда, а с CP иногда (однако это не распространено).
Другая интересная часть состоит в том, что базы данных RDBMS часто находятся на стороне CA треугольника. Это только в случае установки одного узла. Даже при настройке master (write) - slave (read) система не является CA (или, если это CA, может произойти сценарий расщепления, новый мастер будет выбран для раздела и т. Д.).
Полезно читать: https://codahale.com/you-cant-sacrifice-partition-tolerance/.
Может, но не будет.
Теорема CAP рассуждает о гарантиях, когда один или несколько узлов изолируются от остальной части кластера. В таких случаях у узла есть три варианта, которые приводят к трем известным компромиссам CAP: i) он продолжает отвечать на любые полученные запросы AP; ii) он больше не отвечает на полученные запросы, пока снова не сможет связаться с другими CP; iii) он отключается до получения каких-либо запросов на удаление раздела вместе с CA.
Другими словами, вы можете достичь CA, отключив свои узлы вместо того, чтобы допускать разделение, но имейте в виду, что разделение, вероятно, будет продолжаться, поэтому это будет сходиться к сценарию, в котором у вас есть один узел в вашем кластере, и я предполагаю, что это противоположно тому, что вы хотите, т. е. наличие кластера с несколькими узлами — это своего рода весь смысл.
Поэтому на практике вы в конечном итоге выбираете между CP и CA. Смотрите этот ответ для более наглядных примеров.
Доктор Стоунбрейкер говорит: руководство из теоремы CAP гласит, что вы должны выбрать либо A, либо C, когда присутствует сетевой раздел. Как очевидно в реальном мире, в этом режиме отказа можно достичь как C, так и A.
Посмотрите это для размышлений о том, почему CA может существовать:
CA - это спецификация рабочего диапазона: вы указываете, что система не работает должным образом под разделами или, точнее, что разделы находятся за пределами рабочего диапазона системы.
Мой опыт далек от этих теоретических соображений, и я должен сказать, что это очень запутанно. Я исследую распределенные системы Blockchain и не понимаю, почему эти "обобщенные" определения C, A, P всегда должны применяться. Если, скажем, 5% узлов не работают или разделены иным образом, консенсус все еще функционирует. Если конечный пользователь подключен к разделенному узлу, узел может сообщить пользователю, что он потерял соединение. Я даже не вижу, как любая крупная сеть Blockchain является CP без определения условий, таких как "если определенное количество узлов выходит из строя или разделяется, консенсус останавливается".