【问题标题】:Managing a multi-tenant connection pool with separate schema/DB approach使用单独的模式/数据库方法管理多租户连接池
【发布时间】:2017-11-19 17:42:31
【问题描述】:

假设我有一个多租户单体应用程序,它使用单独的架构(或数据库)方法来隔离租户的数据。多个租户使用单个正在运行的应用程序实例来访问他们的数据。下图总结了这个想法:

到目前为止,一切都很好。现在,我必须扩大应用程序的规模。为此,我增加了运行实例的数量,负载均衡器将每个请求路由到其中一个实例。通过这样做,每个实例为每个租户的数据库保留一个连接池,因为它可以服务来自任何租户的请求。结果是这样的:

问题在于它随着租户数量的增加呈指数增长——更多的租户需要更多的运行实例,它们都需要更多的连接,这需要更多的资源来跟踪连接池。如果我有一个微服务应用程序,情况会变得更糟。

我的问题是:这种方法是否可维护?有哪些可能的替代方案以及如何实施它们?

【问题讨论】:

  • 看看这篇文章,有点老了,不过不错msdn.microsoft.com/en-us/library/aa479086.aspx
  • @Hackerman 感谢您的参考。我以前读过这篇论文。它很好地指出了问题,但不是可行的解决方案或管理它的方法。
  • 这个问题你解决了吗?这个连接池很难管理,如果你有解决方案,请分享。谢谢

标签: architecture multi-tenant microservices


【解决方案1】:

每个租户的数据库的问题是您必须向所有应用程序实例添加新的连接定义,每个数据库实例都有自己的生命周期,需要单独配置备份、权限、监控等。在这方面,基于模式的方法更容易实施和扩展。至少在关系数据库的范围内。您还可以使用每个租户的鉴别器,因此表空间在租户之间共享,但每个条目都有一个唯一的租户 ID 作为鉴别器列。根据您的业务,您还可以混合和匹配策略,例如每个租户的架构和专用数据库实例,用于具有高级计划的客户......

【讨论】:

    猜你喜欢
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 2013-03-30
    • 1970-01-01
    相关资源
    最近更新 更多