2016-04-28 83 views
1

我们必须在6个AWS地区运行的服务,我们有一些前提条件应满足:AWS读副本架构

  • 查询数据库必须很低
  • 它支持潜伏期查询的吞吐量很高
  • 据观察,数据库更新过程是IO密集型的,所以它增加了由于数据库锁定导致的查询延迟。
  • 时滞在秒的量级是更新之间可接受的,并且读

,我们讨论了具有一个服务,更新每个区域中的主DB和一个从(6个从站总数)的体系结构。

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

  1. 没有使用AWS基础设施5个读取副本的限制。

为了解决这个问题,我们虽然创建了只读副本的只读副本。这应该给我们25个实例。

  1. AWS中存在限制,您无法从其他区域创建只读副本的只读副本。

为了解决这个问题,我们尽管在应用程序内部更新了2个主数据库。

  1. 此方法会产生一个问题,即一段时间内数据库可能不一致。

在服务实现中,我们总是可以重新创建数据。因此,有一项工作需要重新更新数据(这是更新IO密集型的原因之一)。

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

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

回答

2

不幸的是,当涉及到区域间时,没有什么不可思议的解决方案:你失去了延迟。

我想你从RDS的角度探讨了你提出的所有解决方案,例如只读副本(我确认你不能从另一个地区做到这一点,但这也是为了节省你高复制延迟)。

另一种解决方案是创建在EC2实例数据库,但你会失去所有的RDS(你可以保护这种流量与室性早搏之间的区域间VPN)的好处。不过要记住,太多的只读副本会影响你的表演。

我建议你的情况应该是:

  • 在每一个可能的水平大量使用缓存:DB与服务器之间elasticache,清漆用于HTTP页面,CloudFront的内容传输。如果你想要这么多的只读副本,这意味着你很大程度上依赖于读取。通过这种方式,您可以节省大量读取数据库的时间,并显着增加延迟时间,可能有5个只读副本就足够了。
  • 考虑分片或使用多个数据库。 ,这 并不总是一个很好的解决方案但是这取决于你的使用情况...
+1

1用于缓存;我使用redis的弹性缓存,易于使用且性能卓越 –