适用于:Azure SQL 数据库
三个示例均实现了同一个 Wingtip Tickets SaaS 应用程序。 该应用是一个简单的活动列表和票证 SaaS 应用,面向小型场地:剧院、俱乐部等。 每个场地都是应用的租户,并且有自己的数据,例如会场详细信息、活动列表、客户、票证订单等。 该应用与管理脚本和教程一起展示了端到端 SaaS 方案。 此方案包括预配租户、监视并管理性能、架构管理和跨租户报告和分析。
三种 SaaS 应用程序和租户模式
此应用有三个版本;每个版本在 Azure SQL 数据库上都使用了不同的数据库租户模式。 第一个示例使用每租户的独立应用程序和其自己的数据库。 第二个应用使用具有每个租户的数据库的多租户应用。 第三个示例使用多租户应用,并且具有分片式多租户数据库。
每个示例包含应用程序代码以及管理脚本和教程,其中介绍了各种设计和管理模式。 每个示例均可在 5 分钟内完成部署。 可并行部署这三个示例,以比较它们在设计和管理方面的不同。
“每租户一个独立应用程序”模式
“每租户一个独立应用程序”模式使用单个租户应用程序,并且每个租户具有一个数据库。 每个租户的应用,包括其数据库,均部署到单独的 Azure 资源组。 资源组可以部署在服务提供商的订阅或租户的订阅中,并由提供程序代表租户进行管理。 每租户独立应用程序模式提供了最佳的租户隔离,但是它的经济成本通常是最高的,因为无法跨多个租户共享资源。 此模式非常适合于较为复杂并部署到较小数量的租户的应用程序。 相较其他模式,使用独立部署,能够更轻松地为每个租户自定义应用程序。
请查看相关教程和 GitHub .../Microsoft/WingtipTicketsSaaS-StandaloneApp 上的代码。
“每个租户一个数据库”模式
“每个租户一个数据库”模式适用于注重租户隔离并想要运行集中式服务以经济高效地使用共享资源的服务提供商。 将为每个场所或租户创建数据库,并集中管理所有数据库。 数据库可以托管在弹性池中,以提供经济高效且轻松的性能管理,从而管理租户的不可预知的工作负荷模式。 目录数据库将保管租户与其数据库之间的映射。 使用弹性数据库客户端库的分片映射管理功能管理此映射,从而为应用程序提供高效的连接管理功能。
请查看相关教程和 GitHub .../Microsoft/WingtipTicketsSaaS-DbPerTenant 上的代码。
分片多租户数据库模式
多租户数据库对于寻求降低每个租户成本的服务提供商是有效的,并且他们能接受较低的租户隔离度。 此模式可将大量租户封装到单个数据库,从而降低每个租户的成本。 可以通过跨多个数据库对租户进行分片,实现几乎无限的缩放。 目录数据库将租户映射到数据库。
此模式还允许使用混合模型,可以在同一数据库中通过容纳多个租户来优化成本,或者通过为单个租户提供专属数据库来优化隔离。 可以在租户预配时或之后逐个租户进行选择,而不会对应用程序产生影响。 如果需要以不同的方式处理不同租户组,使用此模式可获得良好效果。 例如,可将低成本租户分配到共享数据库,而将高级租户分配到其自己的数据库。
查看 GitHub 上的 Wingtips 教程 和 WingtipTicketsSaaS-MultiTenantDB 代码(https://github.com/Microsoft/WingtipTicketsSaaS-MultiTenantDb)。