安全分布式缓存解决方案

5
问题:我希望缓存用户信息以便所有应用程序都可以快速读取数据,但我只希望一个特定的应用程序能够写入此缓存。
我在AWS上,因此我想到了使用具有两个端口的memcached版本的解决方案:一个端口仅接受读取命令,另一个端口接受读写命令。然后,我可以使用安全组来控制访问权限。
由于我在AWS上,如果有使用开箱即用的memcached或redis的解决方案,那就太好了。
2个回答

3

我建议您使用开放端口11211(Memcached)的ElastiCache,然后创建一个EC2实例,并设置您的安全组,使只有此服务器可以访问您的ElastiCache集群。 使用此服务器来过滤您的应用程序,以便只有一个特定的应用程序可以写入它。 您可以使用安全组、脚本或iptables来控制访问。 如果您没有使用VPC,则可以使用缓存安全组


1
那么它就不是分布式的:它有一个单点故障 - 那个访问服务器。 - jamie
如果我要设置自动缩放、负载均衡器并构建一个应用程序,那么我可能会跳过memcache部分并自己构建整个系统,不过到那时,将其放入dynamo中似乎更好。速度是一个问题:APP->Memcache与APP->ELB->SVC->Memcache。 - jamie
你不能将数据库系统和缓存系统进行比较。一开始看起来可能没问题,但当你的流量增加时,DynamoDB 的性能会下降或者会带来成本问题。这将导致你花费更多的金钱和时间来迁移系统。请第一次就做正确。根据 AWS 文档,ElasticCache 将数据“保存在内存中以实现低延迟访问”,而 DynamoDB 则将其保存到硬盘中。硬盘 vs 内存,我会选择内存。 - Kevin

1
我相信您可以使用Redis(而不是Memcached)来完成此操作,它也可通过ElastiCache获得。创建实例后,您将想要创建一个复制组并将其与已启动的缓存群集相关联。
然后,您可以向复制组添加实例。复制组内的实例只是从主缓存群集(单个Redis实例)复制,因此默认情况下为只读。
因此,在这种设置中,您拥有一个主节点(单个端点),可以向其写入,并且可以拥有尽可能多的读取节点(多个端点)。
您可以进一步加强安全性,并分配不同的路由规则到复制组(通过VPC),以便读取数据的应用程序无法访问主节点(唯一能够写入数据的节点)。

从技术上讲,仍然存在单点故障(主节点),但这是一个不错的想法。 - jamie
此外,这可能是一个问题:“目前,ElastiCache仅支持单节点Redis缓存集群。” - jamie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接