Синхронизация AWS с несколькими регионами ElastiCache

Вам нужна информация о передовых методах для конкретного варианта использования AWS,

  1. Наше веб-приложение Java развернуто в регионах us-east-1 и us-west-2.
  2. Он взаимодействует с Dynamo DB, а ElastiCache на основе Memcached находится поверх Dynamo DB в обоих регионах.
  3. У нас включена репликация Dynamo DB между us-east-1 и us-west-2.
  4. Маршрут 53 направляет вызовы API в соответствующий регион.

Теперь проблема в том, что когда мы создаем или обновляем запись в Dynamo DB, она вставляется в Dynamo DB и кэшируется в этом конкретном регионе. Запись реплицируется и в другие регионы Dynamo DB, но кэш не остается синхронизированным, поскольку между ElastiCache нет репликации.

Как нам лучше всего решить эту проблему?


person User0911    schedule 09.08.2017    source источник
comment
Вы просто кэшируете данные в DynamoDB в Elasticache или обрабатываете их каким-либо образом, а затем вставляете в Elasticache? Если это первое, вы можете попробовать использовать DynamoDB Accelerator, который был разработан для этого. вариант использования.   -  person wkl    schedule 09.08.2017
comment
Просто кеширование данных в DynamoDB   -  person User0911    schedule 09.08.2017
comment
Тогда это определенно звучит так, как будто DynamoDB Accelerator подходит для вашего случая использования. Поддержание синхронизации распределенных кластеров Elasticache, вероятно, потребует большого количества клея и некоторых дополнительных сервисов, чтобы изменения одного кеша распространялись на другой (и я не знаю, насколько легко это будет для Elasticache).   -  person wkl    schedule 09.08.2017


Ответы (2)


Один из предложенных вариантов - использовать DynamoDB DAX. Это кэш со сквозной записью, что означает, что вам не нужно синхронизировать данные базы данных с вашим кешем. Это происходит за кулисами, когда вы пишете данные с помощью обычного DynamoDB API.

Но если вы хотите по-прежнему использовать ElastiCache, вы можете использовать потоки DynamoDB. Вы можете реализовать лямбда-функцию, которая будет запускаться при каждом обновлении DynamoDB в таблице и записывать новые данные в ElastiCache.

Эта статья может дать вам несколько идей о том, как это сделать.

person Ivan Mushketyk    schedule 09.08.2017
comment
Вы знаете, работает ли DynamoDB DAX с глобальными таблицами? - person x97Core; 26.04.2018

DAX здесь не ответ. Я удивлен, что никто не указывает на это.
Иван ошибается насчет этого.

DAX действительно является кешем со сквозной записью и чтением, но он не фиксирует изменения данных, происходящие через прямой доступ к DynamoDB (очевидно), а также изменения данных, произошедшие через «другой» кластер DAX.

Итак, в этом сценарии
у вас есть 2 кластера DAX: один на западе-1, другой на востоке-1, и эти два кластера полностью независимы. таким образом, если вы изменяете данные на западе-1 через DAX, это изменение распространяется на восток-1 на уровне таблицы DynamoDB, а не на уровне кеша (DAX). Другими словами, если вы обновите запись, к которой осуществлялся доступ из обоих регионов (которая затем была кэширована в обоих кластерах DAX), вы все равно столкнетесь с той же проблемой.

По сути, это проблема синхронизации уровня кеша в разных регионах, что довольно сложно. если вам это действительно нужно, есть несколько способов сделать это, создав свой собственный поток Kafka или Kinesis, который сохраняет изменения записи кэша и используется кластерами кеша в нескольких регионах. что невозможно с эластичностью сейчас. (но это возможно, если вы настроите лямбда-выражение или EC2 только для этой задачи) Checkout тематические исследования от Netflix

person Kurt Lee    schedule 25.06.2018