Согласованность «читай-то-что-записал» (read-your-writes)
(продолжение предыдущего поста)
Любая запись, внесённая в базу данных, будет немедленно доступна для чтения тем же клиентом.
Звучит очевидно! Но есть сценарии, где это не всегда происходит, особенно на масштабных системах.
На одноузловом сервере базы данных это легко гарантировать при условии использования последовательных транзакций.
В среде с главным сервером и репликами нужно быть более осторожным. Многие базы данных настроены так, что все записи и некоторые операции чтения направляются на главный сервер, но большинство операций чтения выполняется репликами. Из-за задержки репликации может возникнуть ситуация, когда клиент записывает запись в БД, а затем сразу пытается прочитать её из реплики, но её там нет! (см. изображение)
Это возможно при использовании асинхронной или полусинхронной репликации, поскольку они не требуют, чтобы все реплики получили запись перед ответом клиенту. При синхронной репликации все реплики должны подтвердить получение записи, прежде чем главный сервер ответит.
При использовании асинхронной или полусинхронной репликации, лучше направлять операции чтения только на те реплики, для которых не требуется согласованность «читай-то-что-записал» (read-your-writes).
Post #2270
1.75K