Предположим, у нас есть только два узла А и В.Предоставляет ли нам ключ-значение хранилище Consul для заказа двух записей с двумя разными ключами?
Когда мы выдаем эти две команды на узле А,
$ curl -X PUT -d one .../v1/kv/key1
$ curl -X PUT -d two .../v1/kv/key2
(то есть.PUT one key1
происходит, перед темPUT two key2
), а затем GET
от /v1/kv/key2
на узле B возвращается two
, гарантировано ли, что GET
из /v1/kv/key1
на узле B возвращается one
? Другими словами, существует ли честь Consul KVS - до того, как отношения между двумя записываются на узле A?
Консул использует протокол консенсуса, чтобы обеспечить согласованность (как это определено CAP).
Да, но я понимаю, что теорема CAP не говорит о нескольких регистрах. Эти две записи могут в конечном итоге распространяться на узел B, но гарантировано ли мы, что мы никогда не увидим неожиданное промежуточное состояние?
AFAIK Consul имеет только один журнал Raft, что гарантирует, что записи всегда будут упорядочены между собой независимо от ресурса. Один из них должен был бы сбиться с пути, чтобы заставить их писать беспорядочно просто из-за характера консенсуса. – kuujo
Не уверен, если вам это необходимо, но consul 0.7 (который был только что выпущен) также имеет новый транзакционный ключ/значение api - https://github.com/hashicorp/consul/blob/master/CHANGELOG.md#070-september- 14-2016 – deniszh