AWS 只读副本架构
AWS read replicas architecture
我们有一项在 6 个 AWS 区域运行的服务,我们有一些应该满足的先决条件:
- 查询数据库的延迟必须非常低
- 它支持高吞吐量的查询
- 据观察,数据库更新过程是 IO 密集型的,因此它会因数据库锁定而增加查询延迟。
- 更新和读取之间以秒为单位的延迟是可以接受的
我们讨论的架构是在每个区域有一个更新主数据库和一个从属的服务(总共 6 个从属)。
我们发现了一些问题和一些可能的解决方案:
- 使用 AWS 基础设施有 5 个只读副本的限制。
为了解决这个问题,我们考虑创建只读副本的只读副本。那应该给我们 25 个实例。
- AWS 中存在一个限制,即您无法创建来自其他区域的只读副本的只读副本。
为了解决这个问题,我们在应用程序内部更新了 2 个主数据库。
- 这种方法会产生一个问题,在一段时间内,数据库可能会不一致。
在服务实现中,我们总是可以重新创建数据。所以有一个工作时不时地重新更新数据(这是更新是 IO 密集型的原因之一)。
有人遇到过类似的问题吗?你是怎么处理的?能否避免自己创建和维护数据库?
我们正在使用 MySQL,但我们非常愿意使用其他兼容的数据库。
不幸的是,对于区域间没有神奇的解决方案:您会失去延迟。
我认为您从 RDS 的角度探索了几乎所有解决方案以及您提出的建议,例如只读副本的只读副本(我确认您不能从另一个区域执行此操作,但这是为了让您免于副本延迟太高)。
另一种解决方案是在 EC2 实例上创建数据库,但您将失去 RDS 的所有好处(您可以使用 vpc 之间的区域间 vpn 保护此流量)。但请记住,过多的只读副本会影响您的性能。
我对你的建议是:
- 在每个可能的级别大量使用缓存:数据库和服务器之间的 elasticache、http 页面的 varnish、内容交付的 cloudfront。如果你想要这么多只读副本,那意味着你非常依赖读取。这样,您可以避免大量读取访问数据库并显着增加延迟,也许 5 个只读副本就足够了。
- 考虑分片或使用多个数据库。这个
然而,这并不总是一个好的解决方案,具体取决于您的用例...
您可以使用 https://aws.amazon.com/contact-us/request-to-increase-the-amazon-rds-db-instance-limit/
处的表格请求增加 MySQL 只读副本的 RDS 数量
增加限制后,您需要进行测试以确保您的应用程序可以接受具有大量只读副本的性能。
哈尔
我们有一项在 6 个 AWS 区域运行的服务,我们有一些应该满足的先决条件:
- 查询数据库的延迟必须非常低
- 它支持高吞吐量的查询
- 据观察,数据库更新过程是 IO 密集型的,因此它会因数据库锁定而增加查询延迟。
- 更新和读取之间以秒为单位的延迟是可以接受的
我们讨论的架构是在每个区域有一个更新主数据库和一个从属的服务(总共 6 个从属)。
我们发现了一些问题和一些可能的解决方案:
- 使用 AWS 基础设施有 5 个只读副本的限制。
为了解决这个问题,我们考虑创建只读副本的只读副本。那应该给我们 25 个实例。
- AWS 中存在一个限制,即您无法创建来自其他区域的只读副本的只读副本。
为了解决这个问题,我们在应用程序内部更新了 2 个主数据库。
- 这种方法会产生一个问题,在一段时间内,数据库可能会不一致。
在服务实现中,我们总是可以重新创建数据。所以有一个工作时不时地重新更新数据(这是更新是 IO 密集型的原因之一)。
有人遇到过类似的问题吗?你是怎么处理的?能否避免自己创建和维护数据库?
我们正在使用 MySQL,但我们非常愿意使用其他兼容的数据库。
不幸的是,对于区域间没有神奇的解决方案:您会失去延迟。
我认为您从 RDS 的角度探索了几乎所有解决方案以及您提出的建议,例如只读副本的只读副本(我确认您不能从另一个区域执行此操作,但这是为了让您免于副本延迟太高)。
另一种解决方案是在 EC2 实例上创建数据库,但您将失去 RDS 的所有好处(您可以使用 vpc 之间的区域间 vpn 保护此流量)。但请记住,过多的只读副本会影响您的性能。
我对你的建议是:
- 在每个可能的级别大量使用缓存:数据库和服务器之间的 elasticache、http 页面的 varnish、内容交付的 cloudfront。如果你想要这么多只读副本,那意味着你非常依赖读取。这样,您可以避免大量读取访问数据库并显着增加延迟,也许 5 个只读副本就足够了。
- 考虑分片或使用多个数据库。这个 然而,这并不总是一个好的解决方案,具体取决于您的用例...
您可以使用 https://aws.amazon.com/contact-us/request-to-increase-the-amazon-rds-db-instance-limit/
处的表格请求增加 MySQL 只读副本的 RDS 数量增加限制后,您需要进行测试以确保您的应用程序可以接受具有大量只读副本的性能。
哈尔