Amazon web services AWS读取副本体系结构

Amazon web services AWS读取副本体系结构,amazon-web-services,amazon-rds,Amazon Web Services,Amazon Rds,我们有一项在6个AWS地区运行的服务,我们有一些必须满足的条件: 查询数据库的延迟必须非常低 它支持高吞吐量的查询 据观察,数据库更新过程是IO密集型的,因此由于db锁,它会增加查询延迟 更新和读取之间可以接受秒级的延迟 我们讨论的体系结构有一个服务更新主数据库,每个区域有一个从数据库(总共6个从数据库) 我们发现了一些问题和一些可能的解决方案: 使用AWS基础架构的读取副本数量限制为5个 为了解决这个问题,我们需要创建读取副本的读取副本。这应该给我们25个例子 AWS中存在一个限制,即您无

我们有一项在6个AWS地区运行的服务,我们有一些必须满足的条件:

  • 查询数据库的延迟必须非常低
  • 它支持高吞吐量的查询
  • 据观察,数据库更新过程是IO密集型的,因此由于db锁,它会增加查询延迟
  • 更新和读取之间可以接受秒级的延迟
我们讨论的体系结构有一个服务更新主数据库,每个区域有一个从数据库(总共6个从数据库)

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

  • 使用AWS基础架构的读取副本数量限制为5个
  • 为了解决这个问题,我们需要创建读取副本的读取副本。这应该给我们25个例子

  • AWS中存在一个限制,即您无法从另一个区域创建读取副本的读取副本
  • 为了解决这个问题,我们需要在应用程序内部更新2个主数据库

  • 这种方法将产生一个问题,在一段时间内,数据库可能不一致
  • 在服务实现中,我们始终可以重新创建数据。因此,有一项任务需要不断地重新更新数据(这也是更新需要大量IO的原因之一)

    有人有类似的问题吗?你是怎么处理的?我们能避免自己创建和维护数据库吗


    我们正在使用MySQL,但我们对使用其他兼容的DBs非常开放。

    不幸的是,在跨区域方面没有神奇的解决方案:您会失去延迟

    我认为您几乎从RDS的角度探索了所有的解决方案,例如读取副本的读取副本(我确认您无法从其他区域执行此操作,但这是为了避免副本延迟过大)

    另一个解决方案是在EC2实例上创建数据库,但您将失去RDS的所有好处(您可以使用VPC之间的跨区域vpn来保护此流量)。请记住,过多的读取副本会影响性能

    我对你的建议是:

    • 在所有可能的级别大量使用缓存:数据库和服务器之间的弹性缓存、http页面的清漆、内容交付的cloudfront。如果您需要如此多的读取副本,这意味着您严重依赖于读取。通过这种方式,您可以节省大量的读取数据,从而显著增加延迟,那么5个读取副本就足够了
    • 考虑分割或使用多个数据库。这 然而,这并不总是一个好的解决方案,这取决于您的用例

    您可以使用以下表单请求增加RDS for MySQL读取副本的数量:

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


    Hal

    1用于缓存;我在redis中使用了弹性缓存,使用方便,性能极佳