AWS ElastiCache vs RDS ReadReplica

我的应用程序当前连接到RDS Multi-AZ数据库。我还有一个AZ Read副本,用于为我的分析门户提供服务

最近,我的主数据库的负载越来越大,我正在考虑如何解决这种情况,而不必再次扩展我的数据库。我想到的两种方法是

  1. 将所有读取查询从我的应用程序移动到读取副本,并在必要时放大读取副本
  2. 实现ElastiCache Memcached

对我来说,这两个选项似乎实现了相同的结果——那就是减少主数据库的负载,但我认为我可能错误地理解了一些基本原理,因为谷歌似乎不会返回它们之间的任何比较结果

就负荷而言,他们的目标相同,但在其他方面有所不同:

数据的最新性:

  • 读取副本将从主机持续同步。因此,您的结果可能会落后于主机0-3秒(取决于负载)
  • 缓存在特定时间点获取查询结果,并将其存储一定时间。缓存查询的时间越长,延迟就越大;但是您的主数据库将经历更少的负载。这是一种权衡,您需要根据您的应用程序进行明智的选择

性能/查询功能:

  • 缓存只能返回它已经看到的查询的结果。因此,如果反复运行相同的查询,这是一个很好的匹配。请注意,查询不能包含像NOW()这样的变化部分,但在要获取的实际数据方面必须相等
  • 如果您有许多不同的、经常更改的或动态的(NOW(),…)查询,则读取副本将是更好的匹配
  • ElastiCache应该快得多,因为它直接从RAM返回值。但是,这也限制了可以存储的结果数量

因此,您首先需要评估数据的过时程度以及查询的可缓存性。如果您使用的是ElastiCache,那么您可能可以缓存多个查询,比如缓存网站的整个部分,而不是只缓存底层查询,这将提高应用程序的总体负载

PS:你调整过你的索引了吗?如果你的主要问题是写作,那就没用了。但是,如果你反对读取,索引是需要检查的第一件事,它们确实会产生巨大的影响

发表评论