В highload решениях часто применяют такую вещь: пишем на master SQL (на который мы только пишем) данные с которого реплицируется на один или несколько slave SQL (с которых мы только читаем).
SQL (я использую Postgresql) гарантирует ACID где буква «C» означает Consistency — Согласованность. Представим ситуацию: есть сервера «A» (master), «B» (slave) и «C» (slave). На сервер «A» в транзакции заносятся атомарно два ключа «X» и «Y». Далее эти ключи с серера «A» должны реплицироваться на сервера «B» и «C». И будут реплицированны атомарно, оба.
Предположим вы читаем данные: случайно выбираем сервер «B» и читаем ключ «X», случайно выбираем сервер «С» и читаем ключ «Y».
Вопрос: возможна ли ситуация когда ключи «X» и «Y» уже реплицированны на сервер «B», но еще не реплицированны на сервер «C»? При асинхронной репликации? При синхронной репликации? Ведь это разные устройста и подобная несогласованность пусть очень короткое время по идее должна быть возможна. Гарантируется ли согласованность в системе из нескольких реплицируемых серверов?