Azure 中的多租户应用程序

多租户应用程序是一种共享资源,它允许“单独租户中的用户”像使用其自己的应用程序一样查看应用程序。 适合实施多租户应用程序的典型情况是,不同租户中的所有应用程序用户都可能希望定制用户体验,但在其他方面具有相同的基本业务要求。 大型多租户应用程序的示例包括 Microsoft 365、Outlook.com 和 visualstudio.com。

从应用程序提供商的角度来看,多租户技术的优势大多涉及运营和成本效益。 应用程序的一个版本可以满足许多租户/客户的需求,从而使你能够整合系统管理任务,例如监视、性能优化、软件维护和数据备份。

下面提供了一系列从提供商的角度来看最重要的目标和要求。

  • 预配:必须能够为应用程序配置新租户。 对于具有大量租户的多租户应用程序,通常必须通过启用自助服务配置来自动化此过程。
  • 可维护性:必须能够升级应用程序,并在多个租户使用该应用程序时执行其他维护任务。
  • 监视:必须能够随时监视应用程序以确定和解决任何问题。 其中包括监视每个租户如何使用应用程序。

实施得当的多租户应用程序可为用户提供以下好处:

  • 隔离:各个租户的活动不会影响其他租户使用应用程序。 租户无法访问彼此的数据。 看上去租户好像拥有应用程序的专用权。
  • 可用性:各个租户希望应用程序始终可用,并可能在 SLA 中明确保证。 同样,其他租户的活动不应影响应用程序的可用性。
  • 伸缩性:应用程序可进行缩放以满足各个租户的需求。 其他租户的状态和操作不应影响应用程序的性能。
  • 成本:成本低于运行单租户专用应用程序,因为多租户技术支持资源共享。
  • 可定制性。 能够通过多种方式(例如添加或删除功能、更改颜色和徽标,或者甚至添加自己的代码或脚本)为单个租户定制应用程序。

总之,虽然提供高度可扩展的服务必须考虑很多事项,但对于许多多租户应用程序,也有多个共同的目标和要求。 有些要求在特定情况下可能并不相关,并且各个目标和要求的重要性在各种情况下也会有所不同。 作为多租户应用程序的提供商,目标和要求还有:满足租户的需求、盈利能力、计费、多个服务级别、配置、可维护性监视以及自动化。

使用 Azure 服务总线进行跨租户通信示例

使用 Azure 服务总线进行跨租户通信示例演示了一种多租户解决方案,该解决方案使用服务总线消息队列来处理提供商与其一个或多个客户之间的跨租户通信。 提供商与其每个客户相互安全地通信。 若要下载包含说明的完整示例,请参阅使用 Azure 服务总线进行跨租户通信示例

多租户应用程序的 Azure 功能

Azure 提供了许多功能,使你能够解决在设计多租户系统时遇到的关键问题。

隔离

  • 按使用或不使用 TLS 通信的主机头对网站租户进行分段
  • 按查询参数对网站租户进行分段
  • 辅助角色中的 Web 服务
    • 辅助角色通常在应用程序后端处理数据。
    • 通常充当应用程序前端的 Web 角色。

存储

数据管理(如 Azure SQL 数据库)或 Azure 存储服务(例如可存储大量非结构化数据的表服务,以及可存储视频、音频和图像等大量非结构化文本或二进制数据的 Blob 服务)。

  • 针对每个租户的 SQL Server 登录名,保护 SQL 数据库中的多租户数据。
  • 对应用程序资源使用 Azure 表 - 通过指定容器级别的访问策略,可以调整权限,且无需为使用共享访问签名加以保护的资源发布新 URL。
  • 对应用程序资源使用 Azure 队列 - Azure 队列通常用于代表租户驱动处理过程,但也可以将其用于分发配置或管理所需的工作。
  • 对应用程序资源使用 Service Bus 队列 - 对于将工作推送到共享服务的租户特定应用程序功能,可以使用单个队列,该队列中的每个租户发送方只有推送到该队列的权限(派生自 ACS 发布的声明),同时只有服务接收方有权从该队列中提取来自多个租户的数据。

连接和安全服务

  • Azure Service Bus 是位于两个应用程序之间的消息传送基础结构,允许应用程序以松散耦合的方式交换消息,从而改进扩展性并提高恢复能力。

网络服务

Azure 提供了一些联网服务,它们支持身份验证且提高了托管应用程序的可管理性。 这些服务包括:

  • 利用 Azure 虚拟网络,可以设置和管理 Azure 中的虚拟专用网 (VPN),并将其与内部部署的 IT 基础结构安全链接。
  • 利用虚拟网络流量管理器,可以跨多项 Azure 托管服务对传入流量进行负载均衡,无论这些服务运行在同一数据中心内,还是运行在全球的不同数据中心内。
  • Azure Active Directory (Azure AD) 是一项基于 REST 的新型服务,它可为云应用程序提供标识管理和访问控制功能。 可对应用程序资源使用 Azure AD,这不仅可以将身份验证和授权功能从代码中分离出来,而且还提供对用户进行身份验证和授权以获取对 Web 应用程序和服务的访问权限的简便方法。
  • Azure Service Bus 为分布式应用程序和混合应用程序提供了安全消息传送和数据流功能,例如在 Azure 托管的应用程序与本地应用程序和服务之间进行通信,而不需要复杂的防火墙和安全基础结构。 可对应用程序资源使用服务总线中继,以便访问公开为终结点的服务,这些服务可能属于租户(例如托管在系统之外的服务,如本地服务),也可能是专门为租户配置的服务(因为特定于租户的敏感数据通过这些服务传输)。

预配资源

Azure 提供许多方法来为应用程序预配新租户。 对于具有大量租户的多租户应用程序,通常必须通过启用自助服务配置来自动化此过程。

  • 辅助角色使你能够配置和取消配置每租户资源(例如当新租户注册或取消时),收集度量值以供计量使用,以及根据特定计划或在达到关键性能指标阈值时作为响应来管理缩放。 同一角色也可用于推出解决方案的更新和升级。

  • Azure Blob 可用于为新租户配置计算资源或预先初始化的存储资源,同时可提供容量级别访问策略以保护计算服务包、VHD 映像和其他资源。

  • 为租户配置 SQL 数据库资源的方式包括:

    • 在脚本中使用 DDL 或将其作为资源嵌入程序集。
    • 使用以编程方式部署的 SQL Server 2008 R2 DAC 包。
    • 从主引用数据库进行复制。
    • 使用数据库“导入”和“导出”从文件中配置新数据库。