Azure 中的多租户应用程序

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

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

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

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

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

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

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

有关多租户应用程序的其他设计注意事项的详细信息,请参阅在 Azure 中托管多租户应用程序

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

隔离

  • 按使用或不使用 SSL 通信的主机头对 Web 应用租户进行分段
  • 按查询参数对 Web 应用租户进行分段
  • 辅助角色中的 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 - Azure AD 不仅允许将身份验证和授权功能从代码中分离出来,而且还提供对用户进行身份验证和授权以获取对 Web 应用和服务的访问权限的简便方法。
  • Azure Service Bus 为分布式应用程序和混合应用程序提供了安全消息传送和数据流功能,例如在 Azure 托管的应用程序与本地应用程序和服务之间进行通信,而不需要复杂的防火墙和安全基础结构。可对应用程序资源使用 Service Bus 中继 - 公开为终结点的服务可能属于租户(例如托管在系统之外的服务,如本地服务),也可能是专门为租户配置的服务(因为特定于租户的敏感数据通过这些服务传输)。

配置资源

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

  • 辅助角色使你能够配置和取消配置每租户资源(例如当新租户注册或取消时),收集度量值以供计量使用,以及根据特定计划或在达到关键性能指标阈值时作为响应来管理缩放。同一角色也可用于推出解决方案的更新和升级。
  • Azure Blob 可用于为新租户配置计算资源或预先初始化的存储资源,同时可提供容量级别访问策略以保护计算服务包、VHD 映像和其他资源。
  • 为租户配置 SQL 数据库资源的方式包括:

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