2016-12-09 2 views
0

Если у меня есть объект «автомобиль» с тремя атрибутами, { year: "2016-12-01", make: "toyota", model: "camry" }, и есть три таблицы в БДЕ с каждым полем в качестве первичного ключа,
таблицы 1: year(key), make, model
таблицы 2: make(key), model, year
таблица 3: model(key), make, year,
которого, читать и писать к каждой таблице обрабатывается различными службами A, B, C.Cache несогласованности вызвана различной БД пишет

Скажем, A, B, C каждый сделал для чтения один раз, и поставить Информация о машине в кеше, поэтому
A имеет year => {make, model}
B имеет make => {model, year}
C имеет model => {make, year},

затем B обновил год "2016-12-25", поэтому такой элемент в кэше Б будет удален после записи БД, но как насчет двух других? Как мы убеждаемся, что два других кэша также удаляют соответствующие элементы.

ответ

1

В принципе у вас есть два варианта: либо синхронизировать операции удаления, либо нет.

  • Если вам требуется удаление должны быть немедленно обработаны в других кэшей, вам нужно будет синхронизировать операцию путем отправки запросов на удаление кэшей.

  • Если вы можете переносить некоторую задержку при ее удалении/обновлении, возможно, этого достаточно, чтобы просто обновить базу данных и дождаться истечения записей кэша на других сервисах.

Требования зависят от того, действительно ли ваши службы правильно видят автомобили-призрак или нет.

Соответствующая статья: ’Cause I’m Strong Enough: Reasoning about Consistency Choices in Distributed Systems, от Алексея Готсмана, Хунсеока Янга, Карлы Феррейры, Махса Наджафзаде и Марка Шапиро.

+1

Спасибо, очень полезно. –

Смежные вопросы