Решения для безопасного распределенного кеша

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

Я использую AWS, поэтому мне пришло в голову одно решение - это версия memcached с двумя портами: один порт принимает только команды чтения, а другой - чтение и запись. Тогда я мог бы использовать группы безопасности для управления доступом.

Поскольку я использую AWS, было бы замечательно, если бы есть решения, которые используют готовые memcached или redis.


person jamie    schedule 07.10.2014    source источник


Ответы (2)


Я предлагаю вам использовать ElastiCache с одним открытым портом на 11211 (Memcached), затем создать экземпляр EC2, настроить группу безопасности, чтобы только этот сервер мог получить доступ к вашему кластеру ElastiCache. Используйте этот сервер для фильтрации ваших приложений, чтобы только одно конкретное приложение могло писать на него. Вы контролируете доступ с помощью группы безопасности, скрипта или iptable. Если вы не используете VPC, вы можете использовать группу безопасности кеширования.

person Kevin    schedule 10.10.2014
comment
Что ж, тогда он не распределяется: у него есть единственная точка отказа - этот один сервер доступа. - person jamie; 15.10.2014
comment
Что ж, если я собираюсь настроить автомасштабирование, балансировщик нагрузки и создать приложение, я мог бы также пропустить часть кэша памяти и построить все это самостоятельно, хотя в этот момент просто вставка его в динамо-машину выглядит довольно хорошо. Скорость - это проблема: APP- ›Memcache против APP-› ELB- ›SVC-› Memcache. - person jamie; 16.10.2014
comment
Ну, вы не можете сравнивать систему базы данных и систему кеширования. Сначала это может выглядеть нормально, но когда ваш трафик растет, производительность Dynamodb упадет или позже возникнут проблемы. А миграция системы будет стоить вам еще больше денег и времени. Сделай правильно с первого раза, пожалуйста. ElasticCache сохраняет данные в памяти для доступа с малой задержкой в ​​соответствии с документом AWS, в отличие от Dynamodb, сохраняющего их на жесткий диск. Жесткий диск против памяти, я выберу память. - person Kevin; 17.10.2014

Я считаю, что вы можете сделать это с помощью Redis (вместо Memcached), который также доступен через ElastiCache. После создания экземпляра вы захотите создать группу репликации и связать ее с уже запущенным кластером кеша.

Затем вы можете добавить экземпляры в группу репликации. Экземпляры в группе репликации просто реплицируются из кластера главного кэша (единственный экземпляр Redis) и поэтому (по умолчанию) доступны только для чтения.

Итак, в этой настройке у вас есть главный узел (одна конечная точка), в который вы можете писать, и столько узлов чтения (несколько конечных точек), сколько вам нужно.

Вы можете сделать еще один шаг в области безопасности и назначить различные правила маршрутизации для группы репликации (через VPC), чтобы приложения, читающие данные, не имели доступа к главному узлу (единственному, который может записывать данные).

person Lorenzo Aiello    schedule 13.10.2014
comment
Технически еще одна точка отказа (мастер), но отличная идея. - person jamie; 15.10.2014
comment
Кроме того, это может быть проблемой: в настоящее время ElastiCache поддерживает одноузловые кластеры кэша Redis. - person jamie; 15.10.2014