AWS阅读副本架构

时间:2016-04-28 10:49:44

标签: amazon-web-services amazon-rds

我们有一个在6个AWS区域运行的服务,我们有一些应该满足的要求:

  • 查询数据库的延迟必须非常低
  • 它支持高吞吐量的查询
  • 据观察,数据库更新过程是IO密集型的,因此会因数据库锁定而增加查询延迟。
  • 更新和阅读
  • 之间可以接受大约秒的延迟

我们讨论的架构是一个服务,它更新主数据库和每个区域中的一个从服务器(总共6个从服务器)。

我们发现了一些问题和一些可能的解决方案:

  1. 使用AWS基础架构限制了5个只读副本。
  2. 要解决此问题,我们可以创建只读副本的只读副本。这应该给我们25个实例。

    1. AWS中存在一项限制,您无法从其他区域创建只读副本的只读副本。
    2. 为了解决这个问题,我们在应用程序内部更新了2个主数据库。

      1. 这种方法会产生一个问题,在一段时间内,数据库可能会不一致。
      2. 在服务实现中,我们总是可以重新创建数据。因此,有时会重新更新数据(这是更新是IO密集型的原因之一)。

        任何人都有类似的问题?你怎么处理它?我们可以避免自己创建和维护数据库吗?

        我们正在使用MySQL,但我们非常愿意使用其他兼容的数据库。

2 个答案:

答案 0 :(得分:2)

不幸的是,在区域间没有神奇的解决方案:你会失去延迟。

我认为您从RDS的角度探讨了几乎所有解决方案的建议,例如读取副本的副本(我确认您不能从其他地区执行此操作,但这是为了让您免于过高复制品滞后)。

另一个解决方案是在EC2实例上创建数据库,但是您将失去RDS的所有好处(您可以使用vpcs之间的区域间VPN保护此流量)。但是请记住,太多的阅读复制品会影响你的表现。

我的建议是:

  • 在每个可能的级别大量使用缓存:数据库和服务器之间的弹性缓存,http页面的清漆,内容交付的云端。如果你想要这么多只读副本,那就意味着你完全依赖于读取。通过这种方式,您可以节省大量读取数据并显着获得延迟,然后可能只需5个读取副本即可。
  • 考虑分片或使用多个数据库。这个 然而,根据您的使用情况,并不总是一个好的解决方案......

答案 1 :(得分:0)

您可以使用https://aws.amazon.com/contact-us/request-to-increase-the-amazon-rds-db-instance-limit/

中的表单请求增加MySQL只读副本的RDS数量

一旦限制增加,您就需要进行测试,以确保您的应用程序可以接受大量只读副本的性能。

哈尔