Базы данных с правильно настроенными кворумами могут терпеть отказ отдельных узлов без необходимости переключения на резервный режим. Они также могут терпеть замедление работы отдельных узлов (например, из-за перегрузки), потому что запросы не обязаны ждать ответа от всех n узлов — они могут вернуться, когда w или r узлов ответили. Эти характеристики делают базы данных с репликацией без основного узла привлекательными для случаев использования, требующих высокой доступности и низкой задержки и которые могут терпеть иногда устаревшие чтения.
Тем не менее, кворумы (как описано выше) не настолько устойчивы к отказам, как могли бы быть. Сбой в сети легко может отрезать клиента от большого числа узлов базы данных. Несмотря на то, что эти узлы работают и другие клиенты могут подключиться к ним, для клиента, отрезанного от узлов базы данных, они могут быть равнозначны мертвым. В этой ситуации вероятно, что остается менее чем w или r доступных узлов, поэтому клиент больше не может добраться до кворума.
В большом кластере (с значительно большим числом узлов, чем n) вероятно, что клиент может подключиться к некоторым узлам базы данных во время сбоя в сети, просто не к тем узлам, которые ему нужны для формирования кворума для определённого значения. В этом случае проектировщики баз данных сталкиваются с дилеммой:
- Лучше ли возвращать ошибки для всех запросов, для которых нельзя достичь кворума из w или r узлов?
- Или же стоит ли всё равно принимать записи и записывать их на некоторые узлы, доступные, но не являющиеся среди n узлов, на которых обычно хранится значение?
Последнее известно как нестрогий кворум: для записи и чтения по-прежнему требуются успешные ответы w и r, но среди них могут быть узлы, не входящие в назначенные n «домашние» узлы для значения. В аналогии, если вы заблокировали себя из дома, вы можете постучаться к соседу и попросить разрешения на временное пребывание на их диване.
Как только сетевое прерывание устранено, любые записи, которые один узел временно принял от имени другого узла, отправляются на соответствующие узлы «домой». Это называется направленной передачей (hinted handoff). (Как только вы снова найдёте ключи от своего дома, ваш сосед вежливо попросит вас встать с их дивана и идти домой.)
Нестрогие кворумы особенно полезны для повышения доступности записи: пока доступны любые w узлов, база данных может принимать записи. Тем не менее это означает, что, даже когда w + r > n, вы не можете быть уверены, что прочитаете последнее значение для ключа, потому что последнее значение может быть временно записано на некоторые узлы вне n.
Таким образом, нестрогий кворум на самом деле не кворум в традиционном смысле. Это только заверение в надёжности, а именно что данные хранятся на w узлах где-то. Нет гарантии, что чтение с r узлов его увидит, пока подсказка не завершена.
Нестрогие кворумы дополнительные во всех распространённых реализациях Dynamo. В Riak они включены по умолчанию, а в Cassandra и Voldemort они отключены по умолчанию.