【问题标题】:Connections pool (database or other service) across cluster of containers跨容器集群的连接池(数据库或其他服务)
【发布时间】:2021-02-09 11:09:46
【问题描述】:

我预计这是一个常见问题,但找不到明确的答案。 场景如下:

  • 您在容器中部署了一个微服务应用程序。每个微服务都部署在自己的容器中,并且可以独立于其他微服务进行垂直/水平扩展。
  • 其中一个微服务需要连接到像数据库这样的服务。您可以使用首选客户端库连接到该特定数据库,使用微服务应用程序内的连接池。
  • 您的应用程序是弹性的,这意味着它应该根据一些工作负载指标进行伸缩,并在需要时部署/删除容器。

现在问题来了。您的数据库只能接受有限数量的连接,比如说 100。还说您需要数据库连接的微服务有一个最大限制为 10 的连接池。这意味着您的微服务实际上无法横向扩展超过 10 个容器,否则您可以超过数据库支持的最大连接数。 理想情况下,您希望独立于数据库连接限制来扩展服务,在容器集群中拥有某种状态池服务,该服务知道当前活动的连接总数。

上述情况有哪些可能的解决方案?

【问题讨论】:

    标签: database containers microservices connection-pooling


    【解决方案1】:

    我不知道您使用的数据库是什么,但例如在 postgresql 中,正如您所说,有一个“池服务”,称为 pgbouncer,https://www.pgbouncer.org/ 充当全局连接池适用于所有需要连接到数据库的服务或实例。

    您将其部署为单独的服务,并将其配置为连接到您的 postgresql 实例,并配置可用的连接数(如果它们可以在服务之间重用).. 等等。然后您必须将微服务连接到这个 pgbouncer 和这样,无论微服务的实例数量如何,您都可以确保不会使数据库过载...

    如果您不使用 postgresql,我很确定其他数据库也有类似的解决方案

    【讨论】:

      猜你喜欢
      • 2019-03-26
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 2014-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多