如何在多个AWS RDS只读副本和主副本之间分配读取流量?

时间:2019-10-22 11:20:03

标签: amazon-web-services amazon-rds mysql-proxy

我有一个与AWS RDS(MYSQL)通信的Web应用程序。现在我们要扩展数据库实例以减少主流量。因此,AWS RDS提供了“只读副本”功能,通过它我们可以分配流量以减少主服务器上的负载。现在的问题是我的Web应用程序如何知道如何将读取流量重定向到读取副本实例。什么是实现此功能的最佳方法?

2 个答案:

答案 0 :(得分:0)

没有魔术子弹;您有一个主数据库的端点和一个EACH只读副本的端点。您必须在应用程序代码中对此加以说明,即拥有一个指向您的只读副本的读取DB连接池和一个指向您的主数据库的写入DB连接池。在应用程序代码中,当您执行读取操作时,将使用读取连接并进行写入,即主连接。您可以使用一般的设计技术将其隐藏在其余的应用程序代码中(在Persistence层中),但其他层则必须告知Persistence层所需的连接类型。

顺便说一句,为什么要使用RDS + MySQL而不是Aurora? Aurora的一个优势是,您为所有只读副本提供了一个终结点,而Aurora将负责跨可用副本进行负载平衡。使用RDS + MySQL,每个副本都有一个端点,并且必须自己进行负载平衡。

答案 1 :(得分:0)

Heimdall 代理可以以强一致性拆分读/写。它在 AWS、Azure 和 GCP Marketplace 上可用。代理说话通过 API 监控 RDS 状态,以确保正确的故障转移和查询路由。当倾向于在只读副本之间不均匀地分配负载时,它也不依赖于 DNS。 Heimdall 代理可以更好地利用您的副本。

查看他们的博客:https://aws.amazon.com/blogs/apn/using-the-heimdall-proxy-to-split-reads-and-writes-for-amazon-aurora-and-amazon-rds/