我有一个 user_service 应用程序,它使用以下配置连接到 MySQL 数据库:
datasource:
url: jdbc:mysql://localhost:3306/user_serviceDB
username: root
password: ****
driver-class-name: com.mysql.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
我已将此应用程序容器化并将其部署在 AWS 上。当负载增加时,AWS ECS 通过创建新容器自动启动服务的新实例。在这种情况下,数据库连接会发生什么情况?是否为每个新实例创建新的数据库连接,这些实例是否连接到单独的数据库实例,或者它们都连接到同一个数据库?
如果您的数据库与您的应用程序在同一个容器中运行(从您的配置中指定的本地主机判断),我相信在扩展过程中创建的每个新容器也将启动一个新的、单独的数据库实例。
另一方面,如果您的数据库托管在容器外部,例如在 AWS RDS 或 EC2 实例中,则所有容器都可以连接到同一数据库。但在这种情况下,当前 URL (localhost) 将不起作用,因为 localhost 指向容器本身,而不是外部数据库。
您需要更新数据库 URL 以指向数据库的主机名或终端节点,例如 AWS RDS 提供的主机名或终端节点。
对于生产环境,我强烈建议将数据库与应用程序解耦并将其托管在外部。这确保了一致性、可扩展性和更轻松的管理,因为所有容器都连接到同一个集中式数据库而不是孤立的实例。