Распределение кэша Redis по регионам

У меня есть приложение, использующее Redis для кеша, пока оно работает хорошо. Однако нам нужно распространить наши приложения на разные регионы (через динамический диспетчер DNS через местоположение пользователя, локальный пользователь может посетить ближайший сервер). Учитывая ограничение сети и пропускную способность, маловероятно создание централизованного Redis. Таким образом, мы должны назначить разные Redis для разных регионов. Итак, проблема здесь в том, как мы можем справиться со случаем роуминга. Пользователь открывает приложение в местоположении 1, продолжая использовать приложение в местоположении 2, не пропуская кеш в местоположении 1.


person Qingjian Wang    schedule 09.12.2015    source источник


Ответы (1)


Вам придется использовать многоуровневую архитектуру. Так работает большинство CDN, таких как Akamai или Amazon Cloudfront. Проще говоря, вот как это работает:

  1. Когда объект запрашивается, проверьте, существует ли он на кэш-сервере Redis S1, назначенном для местоположения L1.

  2. Если его нет на S1, проверьте, существует ли он на кэширующих серверах в других местах, т. е. S2, S3....SN.

  3. Если он найден в S2...SN, сохраните объект также в S1 и обслуживайте объект.

  4. Если объект также не найден в S2...SN, извлеките объект из серверной части и сохраните в S1.

Если вы используете memcached для кэширования, вам поможет проект Facebook с открытым исходным кодом mcrouter, так как он выполняет централизованное кэширование. .

person DhruvPathak    schedule 09.12.2015
comment
спасибо за подробный ответ, вроде по мере роста нод будет больше проверок кеша на разные ноды. кроме этого, я посмотрю на предложенные вами инструменты. - person Qingjian Wang; 13.12.2015