假设我有一个多租户单片应用程序,它使用单独的架构(或DB)方法来隔离租户'数据。多个租户使用单个运行的应用程序实例来访问其数据。下图总结了这个想法:
到目前为止,这么好。现在,我必须扩展应用程序。为此,我增加了运行实例的数量,负载均衡器将每个请求路由到其中一个实例。通过这样做,每个实例为每个租户的数据库保留一个连接池,因为它可以处理来自任何租户的请求。结果是这样的:
问题在于随着租户数量的增加呈指数级增长 - 租户数量增加需要更多运行实例,两者都需要更多的连接数,这需要越来越多的资源来跟踪连接池。如果我有一个微服务应用程序会变得更糟。
我的问题是:这种做法是否可维护?有哪些可能的替代方案以及如何实施它们?
答案 0 :(得分:2)
每个租户的数据库问题是您必须向所有应用实例添加新的连接定义,每个数据库实例都有自己的生命周期,需要单独的备份配置,权限,监控等。在这方面,基于模式的方法更容易实现和扩展。至少在关系数据库的范围内。您还可以使用每个租户的鉴别器,因此表空间在租户之间共享,但每个条目都有一个唯一的租户ID作为鉴别器列。根据您的业务,您还可以混合和匹配策略,例如每个租户的模式和具有高级计划的客户的专用数据库实例......