【问题标题】:RDS Proxy vs Application Side Proxy (eg. C3P0)RDS 代理与应用程序端代理(例如 C3P0)
【发布时间】:2021-01-21 23:36:12
【问题描述】:

假设我想为我在 EC2/ECS/EKS 中运行的 Spring Boot 应用程序使用 RDS 代理,我使用标准 JDBC 连接配置让一切都按预期工作。我是否仍需要使用 C3P0 之类的库来配置应用程序端连接池,或者这会是多余的吗?

我假设使用 RDS 代理的好处是能够在连接到同一个数据库的多个不同类型的应用程序(无服务器和非无服务器)之间共享连接池。

【问题讨论】:

  • 这取决于您的架构。有些人仍然使用数据库级代理和应用程序级连接池。 (例如:Elixer 应用程序)但最终数据库级代理将具有更多优势。(如 proxysql)

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


【解决方案1】:

我主要会重复使用我刚刚对另一个问题给出的答案Does RDS proxy affects current application side pooling?

中间有一个数据库代理,“连接”有两条独立的腿:

  1. 首先,有一个从应用程序到代理的连接。您所说的“应用程序端池”就是这种类型的连接。由于创建此类连接的新实例仍然存在相关开销,因此在您的应用程序中继续使用连接池可能是一个好主意。
  2. 其次,存在从代理到数据库的连接。这些连接由代理管理。这种类型的连接数由代理配置控制。如果您将此配置设置为 100%,那么您将允许代理使用最多 the database's max_connections value,而其他客户端可能无法连接。

所以,应用程序连接池不是多余的。当您的应用程序想要使用连接时,它需要从其本地池中获取连接。然后,代理需要将其与数据库连接配对。代理将尽可能重用与数据库的连接(这种技术也称为multiplexing)。

或者,引用官方文档:“您可以同时打开许多到代理的连接,并且代理会保持较少数量的连接打开到数据库实例或集群。这样做进一步减少了数据库上连接的内存开销服务器。这种技术还减少了“连接过多”错误的机会。”

回到您最初的问题,是的,“跨多种不同类型的应用程序共享连接池”是其中一个好处:您不必配置不同的应用程序连接池以保持在数据库的 max_connections 值内. RDS Proxy 的其他优势,包括效率、故障转移、安全性等,请参见the official docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多