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