Amazon RDS 代理
提高您的应用程序的扩展性、韧性和安全性
什么是 RDS 代理?
RDS 代理是 Amazon RDS 的一种完全托管且易于使用的高可用性数据库代理功能,可使您的应用程序:1/ 通过池化和共享数据库连接来提高可扩展性;2/ 通过将数据库失效转移次数减少高达 66% 并在失效转移期间保留应用程序连接来提高韧性;及 3/ 通过选择性地对数据库强制进行 AWS IAM 身份验证及将凭证安全地存储在 AWS Secrets Manager 中提高安全性。
您无需预置或管理任何额外的基础设施即可开始使用 RDS 代理,而且大多数应用程序无需进行代码更改即可启用该功能。
Amazon RDS 代理的优势
RDS 代理会维护与 RDS 数据库实例建立的连接池,从而减少建立新连接时通常对数据库计算和内存资源造成的压力。它还可共享不常使用的数据库连接,因此访问 RDS 数据库的连接更少。这种连接池使您的数据库能够高效地支持大量和高频率的应用程序连接,从而使您的应用程序可在不影响性能的情况下进行扩展。
RDS 代理可自动连接到新数据库实例,同时保留应用程序连接,从而最大限度地减少因中断而影响数据库可用性的应用程序中断。发生失效转移时,RDS 代理会将请求直接路由到新的数据库实例。这可将 Aurora 和 RDS 数据库的失效转移时间最高缩短 66%。RDS 代理还支持具有两个可读备用数据库的多可用区,其失效转移通常低于 35 秒,写入延迟降低 2 倍,读取容量增加,并且将次要版本升级停机时间缩短到通常不到 1 秒。
RDS 代理允许您选择对数据库访问强制执行 IAM 身份验证,并避免将数据库凭证硬编码为应用程序代码,从而使您能够进一步控制数据安全。它还可让您利用 Secrets Manager 集中管理数据库凭证。
数据库代理服务器有助于处理数据库上的额外负载。尽管传统的代理服务器可使应用程序更有效地扩展,但它们很难部署、打补丁和管理,那样消耗的资源本可以更好地花在开发优秀的产品上。RDS 代理是完全无服务器化的,并且是一个完全托管的数据库代理,因此它能够自动根据您的工作负载进行扩展,同时还能免除您对自身代理服务器进行补丁更新和管理的负担。
RDS 代理与所支持数据库引擎的协议完全兼容,因此您无需更改应用程序代码即可为应用程序部署它。您只需将应用程序连接指向代理而非 RDS 数据库,即可无缝管理其余的操作。
Amazon RDS 代理入门
正在寻找有关如何快速开始使用 RDS 代理的信息? 以下是一些最重要的技术文档指南、用户指南和教程,其中介绍了如何通过几个步骤开始使用 RDS 代理。
常见问题
一般性问题
全部打开具有不可预测工作负载的应用程序:支持高度可变的工作负载的应用程序可能会尝试打开大量的新数据库连接。RDS 代理的连接管理可使客户通过高效重复利用数据库连接来顺利扩展处理不可预测的工作负载的应用程序。首先,RDS 代理可使多个应用程序连接共享一个数据库连接,以高效使用数据库资源。其次,RDS 代理可使客户通过调整已打开的数据库连接数量来维持可预测的数据库性能。第三,RDS 代理将移除无法使用的应用程序请求,以保留应用程序的总体性能和可用性。
频繁打开和关闭数据库连接的应用程序:构建于无服务器、PHP 或 Ruby on Rails 等技术的应用程序可能会频繁打开和关闭数据库连接,以服务应用程序请求。RDS 代理可使客户维护一个数据库连接池,以免在建立新连接时对数据库计算和内存造成不必要的压力。
保持连接打开但处于空闲状态的应用程序:SaaS 或电子商务等行业的应用程序可能会使数据库连接保持空闲状态,以尽量减少客户重新参与时的响应时间。客户可以使用 RDS 代理保持闲置的连接,同时仅根据需要建立数据库连接以最佳方式服务活动请求,而不是过度配置数据库来支持大部分闲置连接。
需要通过瞬态故障获得可用性的应用程序:使用 RDS 代理,客户可以构建可以透明地容忍数据库故障的应用程序,无需编写复杂的故障处理代码。RDS 代理可将流量自动路由至新数据库实例,同时保留应用程序连接。RDS 代理还可以绕过域名系统(DNS)缓存,以将 Amazon RDS 和 Aurora 多可用区数据库的失效转移时间减少高达 66%。数据库失效转移期间,应用程序延迟可能会增加,并且可能必须重试正在进行的交易。
改进了安全性和集中凭证管理:RDS 代理可使用户选择使用关系数据库执行基于 IAM 的身份验证,从而帮助他们构建更安全的应用程序。RDS 代理还可以使客户通过 AWS Secrets Manager 集中管理数据库凭证。
RDS 代理可将您的方法转变为构建现代无服务器应用程序,这些应用程序利用关系数据库的强大功能和简单性。首先,RDS 代理可通过池化和重复利用数据库连接使无服务器应用程序高效扩展。其次,使用 RDS 代理,您不再需要在您的 Lambda 代码中处理数据库凭证。您可以使用与您的 Lambda 函数关联的 IAM 执行角色,以通过 RDS 代理和您的数据库进行身份验证。第三,您不需要管理任何新的基础设施或代码便能充分利用关系数据库所支持的无服务器应用程序潜力。RDS 代理是完全托管的,可根据您的应用程序需要自动扩展其容量。
RDS 代理支持与 MySQL 兼容的 Amazon Aurora、与 PostgreSQL 兼容的 Amazon Aurora、Amazon RDS for MariaDB、Amazon RDS for MySQL、Amazon RDS for PostgreSQL 以及 Amazon RDS for SQL Server。有关受支持引擎版本的列表,请参阅 Amazon Aurora 用户指南或 Amazon RDS 用户指南。
只需在 Amazon RDS 控制台中单击几下,您即可为您的 Amazon RDS 数据库启用 RDS 代理。启用 RDS 代理时,您可以指定您希望从中访问 RDS 代理的 VPC 和子网。作为一个 Lambda 用户,您可以为您的 Amazon RDS 数据库启用 RDS 代理,并设置 Lambda 函数,以便只需单击几下就可以访问该代理,而无需离开 Lambda 控制台。
- 对客户端与代理之间的连接,使用 IAM 身份验证;而对代理与数据库之间的连接,则使用 Secrets Manager
- 对客户端到代理以及代理到数据库的连接使用 IAM 身份验证,从而无需在 Secrets Manager 中存储数据库密码
要通过 RDS 代理实现您的应用程序与数据库之间的身份验证,您有多种选择。
您可以在 AWS Secrets Manager 中使用传统的用户名和密码身份验证方式来存储您的数据库凭证,从而为您的应用程序实现对凭证管理的集中化、安全化和简化处理。使用 Secrets Manager 时,您可以像连接数据库一样连接 RDS 代理。您提供的用户名和密码会与存储在 Secrets Manager 中的凭证进行匹配,然后用于数据库连接。
为了增强安全性,您可以采用基于 IAM 的身份验证方式。您的应用程序可以使用与 AWS Lambda 或 EC2 等服务关联的 IAM 执行角色通过 RDS 代理进行身份验证,而不是指定用户名和密码。IAM 身份验证有两种选择:
有关使用 RDS 代理进行身份验证的更多信息,请参阅通过 RDS 代理连接到数据库。
是。有关 Amazon RDS 代理 SLA 的完整详细信息,请参阅 Amazon RDS 代理 SLA 详细信息页面。
客户
Acquia
“我们一直在努力为客户优化和提高性能和可扩展性。Drupal 并不原生支持连接池,因此我们需要一个解决方案,以便能够更好地扩展关系数据库上的应用程序连接。RDS 代理完全符合我们的要求! 借助 RDS 代理,我们客户的 Drupal 应用程序能够轻松利用已经建立的连接的现成池。这样,我们就可以更好地管理网站流量的突然激增,并提高数据库的效率。”
Ed Brennan,Acquia 首席架构师
CAINZ
“我们拥有一个基于 AWS Lambda 的无服务器 API 基础设施,预计它将支持成千上万的用户,并且需要可扩展的后端数据存储。尽管我们传统上依赖 NoSQL 数据库应对此类情况,但在这种情况下面临的挑战是,我们需要强大的 SQL 查询功能,以管理和访问 Amazon RDS 和 Amazon Aurora 数据库提供的数据。现在,我们可以在 RDS 和 Aurora 数据库的前面使用 RDS 代理来应对这一挑战。在我们的测试中,我们观察到 RDS 代理在峰值负载下的响应时间缩短了 4 倍。RDS 代理让我们受益非浅,因为我们只需切换端点,即可对关系数据库使用熟悉的 SQL 语句。”
Masahiro Arai,CAINZ 数字战略部
CloudHealth by VMware
“我们最近将 MySQL 数据库迁移到了 Amazon Aurora。我们的应用程序始终开放大量的数据库连接,因此在连接激增期间会给我们的数据库带来压力,并导致客户中断。迁移到 Aurora 之后,RDS 代理成为了我们的架构中的一个关键部分,它可以帮助我们扩展应用程序和优化成本。使用 RDS 代理,我们的应用程序可以向代理开放更多的连接,这样就将高峰时段的数据库连接减少了高达 90%,并使数据库免遭高连接数的影响。RDS 代理帮助提高了我们的系统稳定性并降低了成本。通过减少用于数据库连接的系统资源,我们可以将数据库整合到更少的 Aurora 集群中,因此降低了总运营成本。”
高级软件架构师 Peter Fein - CloudHealth by VMware
Dream 11
“在 2023 年的印度板球超级联赛期间,RDS 代理改变了我们的游戏规则。它帮助我们在不影响数据库性能和可用性的情况下日夜不停地应对巨大的流量高峰。它还使我们能够动态扩展资源并优化成本。这样,我们就能够为用户提供无缝体验。对于任何需要处理不可预测的大量流量的在线游戏平台来说,RDS 代理都是一个必备工具。”
首席工程师 Bipul Karnani – Dream 11