Как сделать гео-распределенную архитектуру Redis кластеров Active-Active

Постановка проблемы: мое приложение будет развернуто в 3 отдельных регионах: в Северной Америке, Европе и Азии. Я хочу построить архитектуру Redis со следующими ограничениями:

  1. Каждый регион должен иметь свой собственный кластер Redis, который может иметь несколько мастеров и рабов.
  2. Кластер каждого региона должен иметь возможность обрабатывать записи и чтения локально.

Позвольте мне подробнее остановиться на втором моменте: я хочу, чтобы у всех регионов была своя копия данных. Поэтому любые новые данные, которые записывает приложение в Европе, должны попадать в кластер redis в регионе Европы, а не в какой-либо другой регион. И тогда эти данные могут (асинхронно) копироваться в регион Азии и Северной Америки.

На данный момент я обнаружил, что я не могу использовать Redis Sentinel, так как я хочу мастеров Mutliple. Я не могу использовать (я думаю) кластер redis с мастерами в отдельных регионах, так как это может отразить данные во всех регионах, поэтому приложение в Европе может попытаться записать ключ, который будет заблокирован на сервере Redis в Азии.

Итак, мой вопрос: возможно ли это архитектурное будущее с Redis OS прямо сейчас () или в ближайшем будущем?

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

1 ответ

Одним из возможных решений может быть использование хеш-тегов redis-ключей с одним master-файлом redis в каждой области, например redis_master_US, redis_master_europe и т. Д., И ведомыми в нескольких регионах (для повышения производительности и доступности чтения), где ключи могут быть такими {US}_California, {US}_Texas, {EU}_Germany, {ASIA}_Japan и т. Д. Но подвох в этом заключается в том, что все ключи с префиксом US будут отправляться на один и тот же мастер redis, но не обязательно на redis_master_US, что зависит от распределения слотов хэша между хозяевами redis. Теперь есть способ обойти это, если мы используем преднамеренные хэш-теги ключа redis, как можно найти здесь.

Теперь мы можем использовать ключ типа {fyimk7v1CgnBo}_California, {fyimk7v1CgnBo}_Texas, {91Lnyl}_Germany, {6MQu4Y}_Japan, который, как мы знаем, будет указывать на слот 0, 16382, 8325 соответственно и при создании кластера, чтобы убедиться, что эти слоты будут уверены, что эти слоты назначены на redis_master_US, redis_master_Germany и redis_master_asia соответственно.

Хотя этот подход, кажется, влечет за собой много ошибок.

Другие вопросы по тегам