我在 AWS 中有一个包含公有子网和私有子网的 VPC。在私有子网中,我有两个负载平衡的 EC2 应用服务器和一个 EC2 数据库/缓存服务器。
两个应用服务器连接到数据库/缓存服务器以进行数据库查询,但数据库服务器上还运行着一个 Redis 实例。两个应用服务器都配置为连接到此 Redis 实例。
我的问题是 - 这样做性能好吗?在每个应用服务器节点上安装一个 Redis 实例会更好吗?
或者我们最好将 redis 留在数据库/缓存服务器上?
答案1
这取决于您的使用情况,但缺乏其他信息,我认为最好使用集中式缓存。
添加条目和缓存命中
如果您有一个集中式缓存,那么添加到缓存中会使所有 EC2 实例受益。
但是如果您有单独的缓存,那么添加到缓存只会对该 EC2 实例有益。
示例:假设从 EC2 实例 1 执行数据库查询,然后 EC2 实例 2 执行相同的查询。
使用集中式缓存时,查询 2 将命中缓存,而使用独立缓存时,两次查询都将命中缓存。添加更多 EC2 实例将加剧缓存命中。
缓存失效
使用单独的缓存时,您无法使缓存中的条目无效,因为这只会影响本地缓存。其他缓存仍将包含陈旧/无效的数据。
结论
使用集中式缓存。
答案2
尽管本地缓存可以提高性能,但它并不是最佳的架构选择,也不是扩展应用程序的正确方法。
正如@Matt Houser 所解释的那样,集中式缓存是正确的选择,因为它可以更好地支持应用程序的增长。