AWS ElastiCache与RDS ReadReplica

cho*_*xin 8 database memcached amazon-web-services

我的应用程序当前连接到RDS多可用区数据库.我还有一个用于服务我的分析门户的单一AZ只读副本.

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

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

对我来说,这两个选项似乎对我有同样的结果 - 这是为了减少主数据库的负载,但我想我可能错误地理解了一些基本原理,因为谷歌似乎没有在它们之间进行比较时返回任何结果.

xer*_*raa 12

在负载方面,它们具有相同的目标,但在其他方面有所不同:

最新数据:

  • 只读副本将从主服务器继续同步.所以你的结果可能会落后于主人后面的0 - 3s(取决于负载).
  • 缓存在特定时间点获取查询结果并将其存储一段时间.缓存查询的时间越长,您的查询就越多; 但是您的主数据库将减少负载.这是一个权衡,你需要根据你的应用明智地选择.

性能/查询功能:

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

因此,您首先需要评估数据的过期程度以及查询的可缓存性.如果您正在使用ElastiCache,您可能能够缓存多个查询 - 比如缓存网站的整个部分而不是基础查询,这可以提高应用程序的整体负载.

PS:你有没有调整你的索引?如果您的主要问题是写入无济于事.但是,如果你正在阅读,那么索引是第一件要检查的东西,它们确实会产生很大的不同.