Давайте посмотрим на простую схему моей системы. По сути, есть две (или более) службы, которые выполняют простые операции с базой данных SQL: READ, UPDATE, WRITE. После записи (чтения) записи E
в (из) базы данных она записывается в распределенный кеш (Redis). Следующие чтения E
будут считываться E
из кеша Redis для достижения более высокой пропускной способности. В принципе работает корректно.
Однако я рассматриваю следующую ситуацию:
Кэш пуст.
Process A (reads the entry `E`) Process B (updates the entry `E`)
READ(E, cache) = EMPTY
READ(E, db) = E1
WRITE(E2, db)
WRITE(E2, cache)
WRITE(E1, cache)
Итак, наконец, есть устаревшее E1
, сохраненное в кэше.
- Это конечная согласованность?
- Как решить мою проблему?
- Не могли бы вы порекомендовать мне что-нибудь почитать о таких проблемах и методах их решения? Я кое-что знаю о распределенных системах (например, теорема CAP и т. д.)
Заранее спасибо.