AWS RDS Proxy Deep Dive:它是什么以及何时使用它
简介
AWS 关系数据库服务 (RDS) 是一种托管数据库服务,大约在 10 年前推出。在过去的 10 年中,应用程序模式不断发展,在与数据库交互方面带来了各种挑战:
-
应用程序,尤其是无服务器应用程序,有大量打开的数据库连接。 RDS 仅允许有限数量的打开连接。
-
自定义故障处理代码可能变得难以管理且容易出错。处理数据库故障转移就是处理故障的一个例子。
AWS RDS 代理是 Amazon RDS 的完全托管数据库代理。 RDS 代理通过池化和共享数据库连接来工作,从而使应用程序更具可扩展性以及对数据库故障的弹性。使用 RDS 代理的主要好处是:
-
连接池和共享:通过减少打开的数据库连接数来提高应用程序性能
-
RDS 代理有助于在数据库故障转移等故障情况下提高应用程序的可用性。
-
RDS 代理让您可以选择使用 IAM 身份验证来连接数据库,从而无需在应用程序代码中提供数据库凭证。
RDS 代理目前可用于 Aurora MySQL、Aurora PostgreSQL、RDS MySQL 和 RDS PostgreSQL。
关键概念
连接池
[](https://res.cloudinary.com/practicaldev/image/fetch/s--JBcRmfP-- -/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://learnaws.org/assets/img/rds-proxy/connection-pooling.png)
连接池是一种优化,使应用程序能够共享和重用数据库连接,从而减少数据库本身的负载。打开和关闭一个新的数据库连接是 CPU 密集型的,而每个打开的连接都需要额外的内存。连接池还无需担心应用程序代码中的数据库连接。
每个数据库事务使用一个底层数据库连接,一旦事务完成就可以重用该连接。这种事务级重用称为连接多路复用(或连接重用)。
在连接多路复用中,数据库连接在客户端连接之间共享,这有助于最大限度地减少数据库服务器上的资源开销。
固定
在某些情况下,RDS 代理无法安全地重用当前会话之外的数据库连接。在这种情况下,会话使用相同的连接,直到会话结束。这种行为称为固定。
AWS 建议尽量避免固定,因为它使共享连接变得更加困难,从而降低了使用 RDS 代理的好处。
连接可能被固定的一些原因是:
-
会话变量的变化
-
配置参数更改
有关固定的更多详细信息,请参见此处的。
故障处理
[](https://res.cloudinary.com/practicaldev/image/fetch/s--xDwUNBkP--/c_limit %2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://learnaws.org/assets/img/rds-proxy/failover.png)
一个常见的故障场景是数据库故障转移,其中原始数据库实例变得不可用并被另一个实例替换。发生故障转移的原因有多种:
-
计划维护,例如数据库升级
-
数据库实例本身有问题
在这种情况下,RDS 代理可以通过等待新的数据库实例正常运行并维护在此期间从应用程序接收到的任何请求来提高应用程序的可用性。最终结果是应用程序对底层数据库的问题更具弹性。
AWS 声称 RDS 代理将故障转移时间缩短了 30-60%。根据this之类的测试,这些数字似乎保持不变。
安全福利
RDS 代理可以在应用程序和底层数据库之间提供额外的安全层。 AWS 建议在连接到代理时强制执行 IAM 身份验证,因为这样就无需在代码中的任何位置指定数据库凭证。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--J6MUryC3-- /c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://learnaws.org/assets/img/rds-proxy/proxy-security.png)
定价
-
Amazon RDS 代理按每个启用它的数据库实例的每小时 vCPU 定价。价格取决于您的数据库使用的 RDS 实例类型。数据库实例越大,您最终支付的费用就越多。
-
部分小时以一秒为增量计费,最低收费为 10 分钟。
更多信息可以在这里找到。
监控
可以使用 Amazon CloudWatch 监控 RDS 代理。 CloudWatch 与 RDS 代理完美集成,并提供有用的指标,可用于了解代理的性能和行为。
需要关注的一些关键指标是:
-
DatabaseConnections
:到后端数据库的数据库连接数 -
DatabaseConnectionsCurrentlyBorrowed
:您的应用程序当前正在使用的连接数。对此指标设置警报很重要。 -
DatabaseConnectionsCurrentlySessionPinned
:处于固定状态的连接数。理想情况下,此数字应尽可能低,以最大限度地提高 RDS 代理性能。
缺点
RDS 代理的一些主要限制是:
-
RDS 代理必须与数据库实例在同一 VPC 中。即使数据库实例是,代理也不能公开访问。
-
RDS 代理不能与自我管理的基于 EC2 实例的数据库一起使用。
-
RDS 代理还不能用于 Aurora Serverless
-
一个代理只能与 1 个数据库实例关联
结论
Amazon RDS 代理是一种有助于提高应用程序可用性和性能的数据库代理。对于具有以下要求的应用程序特别有用:
-
不可预测的工作负载
-
频繁打开和关闭数据库连接
-
瞬时数据库故障期间的更高可用性
更多推荐
所有评论(0)