1

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

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

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

Какую стратегию обновления кэша вы бы рекомендовали обеспечить целостность данных?

+0

Вам нужна целостность данных в режиме реального времени или возможна некоторая задержка в «публикации» фактических данных? – Vadim

+0

Thx для ответа :) Да, по крайней мере, он должен быть близок к реальному времени, потому что это приложение SNS, и если пользователь обновляет свое ник на одном сайте, это изменение должно происходить как можно скорее на другом места. – satoru

ответ

1

Поскольку вам нужна обновленная политика, близкая к реальному времени, вам определенно нужен механизм уведомления о неактивности кэша.

Есть 2 возможные модели реализации для него:

1.Pull Главного сервер вытягивает ребенок-сервера с сообщениями уведомления, как "resourceID=34392 not more valid in your cache". Это сообщение должно быть отправлено на каждое обновление данных на главном сервере.

  1. Опрос Каждый дочерний сервер запрашивает главный сервер о достоверности элемента кэша перед его обслуживанием пользователю. Конечно, в этом случае основной сервер должен сохранять список объектов, обновляемых в течение последнего периода жизни кэша, и отвечать на запросы "If-object-was-updated" очень быстро.

Как вы видите, в обоих случаях ваш основной сервер должен инициировать событие при каждом изменении данных. В первом случае это событие будет передано через «автобус уведомления» на дочерний сервер, а во втором случае это событие будет сохранено в списке recently-updated-objects. Таким образом, оба варианта требуют изменения кода на главном сервере.

Что касается меня, то второй вариант гораздо проще реализовать вместе, но это очень зависит от используемого вами стека программного обеспечения.

+0

Наше приложение написано на Python, интересно, есть ли какая-либо сторонняя библиотека, которую мы можем использовать в качестве механизма уведомления. – satoru

+0

К сожалению, я не знаком с Python-технологиями, но самый простой способ реализации, который я вижу, заключается в следующем: сохранить идентификатор объекта, который будет повторно кэшироваться в memcached; установить nginx как обратный прокси между дочерними серверами и основным сервером; сделать nginx для сохранения кэширования объектов и работать непосредственно со списком, хранящимся в memcached. Во всяком случае, как я сказал, это очень специфическая задача и требует дополнительных исследований. Вы можете связаться со мной, если хотите обсудить это более подробно. – Vadim