你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

多租户解决方案中控制平面的体系结构方法

控制平面是软件即服务 (SaaS) 和多租户解决方案的重要组成部分,尤其是可帮助大规模管理解决方案。 通常,控制平面包含两个主要组件:

  • 租户目录,用于存储有关租户的重要信息,例如:
    • 租户配置。
    • 为租户资源部署的 SKU。
    • 租户分配到的部署标记
  • 管理环境更改的过程,这些更改由租户生命周期事件触发。 例如,租户加入、租户脱离和任何所需的定期维护。

控制平面本身是一个应用程序。 你需要仔细考虑控制平面,并以与解决方案的任何其他部分相同的严谨性和谨慎性来设计它。 如需详细了解什么是控制平面、为什么应使用它以及设计控制平面时的注意事项,请参阅多租户控制平面的注意事项

本文介绍设计和创建控制平面时可考虑使用的一些方法。 此处介绍的方法列表并不全面。 尽管这些方法都有效,但还有其他有效的体系结构。

要考虑的方法和模式

下表总结了一些可用于控制平面的方法之间的差异。 比较手动、低代码和自定义方法。

注意事项 手动 低代码 “自定义”
操作开销 低到中等
该方法适用于的生命周期事件频率 Rare 偶尔-经常 经常
实现的时间和复杂性
控制平面维护责任
Testability
不一致的风险 中-低

手动过程

构建完全自动化的控制平面并不总是必要的,尤其是当你刚刚起步并且只有少量租户时。

你可将租户目录保存在某个中心位置,例如保存在 Excel 工作簿或 JSON 文件中,而这些工作簿或文件存储在你的团队可以访问的位置。 无论采用何种格式,最好以结构化方式存储信息,以便以编程方式轻松处理数据。

注意

手动构建控制平面是开始管理多租户应用程序的好方法,但它仅适合少量租户(少于 5-10 个)。 手动加入的每个租户都会增加管理开销和不一致的风险。 仅当只有几个租户并且不需要自动或自助服务加入时,才应使用此方法。

对于租户加入和维护活动等流程:

  • 尽可能创建脚本或自动化管道,即使手动运行它们也是如此。 通过使用脚本或管道,可确保每个租户的步骤一致运行。
  • 对于最初无法编写脚本的任务,请全面并详细地记录该过程。 记录方法和原因。 如果将来有人最终会实现任务自动化,他们应充分了解这两者。

下图说明了对初始控制平面使用手动过程的一种方法:

此图显示了在控制平面上使用脚本和其他手动流程的一种方法。

下载此体系结构的 Visio 文件

手动方法的优点

  • 轻量级:文档、脚本和管道易于开发和修改。 这使得它们非常适合用于确定过程,因为你可以快速迭代和发展它们。
  • 低成本:维护和运行手动方法的成本较低。
  • 验证过程:即使你最终打算使用更加自动化的方法,在投入时间开发更强大的自动化之前,从手动方法开始作为概念验证也是验证维护策略的好方法。

手动方法的缺点

  • 缺乏控制:此方法依赖于每个参与的人都要操作正确。 有人可能会无意或有意地偏离规定的流程。 流程中的每一个变化都会增加环境中出现不一致的风险,这使得持续管理变得更加困难。
  • 访问控制挑战:使用此方法时,通常需要向操作你的解决方案的任何人授予范围广泛且高度宽松的访问权限,这使得很难遵循访问分段的最佳做法。
  • 可伸缩性:运行手动过程所需的工作量随需要管理的租户数而变化。
  • 可测试性:手动过程难以验证和测试。

何时考虑放弃手动方法

  • 当团队无法跟上维护应用程序所需的工作量时。 例如,当租户数量超出临界点时(对于大多数团队来说,租户数量在 5 到 10 个之间)。
  • 当你预计租户增长超过租户的临界数量时,需要为管理该租户数量所涉及的工作做好准备。
  • 需要缓解不一致的风险时。 例如,你可能会发现由于某人没有正确遵循流程或流程中存在太多模糊之处而发生一些错误。 随着越来越多的租户手动加入,以及团队的壮大,不一致的风险通常会增加。

低代码控制平面

低代码或无代码控制平面建立在旨在业务流程自动化和信息跟踪的平台上。 有许多平台使您在不编写自定义代码的情况下执行这些任务。

例如,Microsoft Power Platform 就是这些平台之一。 如果使用 Power Platform,则可将租户目录保留在 Dynamics 365、Dataverse 或 Microsoft 365 中。 如果一开始不想完全致力于自动化所有内容,也可以考虑保留用于手动过程的同一租户目录。

对于租户加入和维护,您可以使用 Power Automate 来运行执行租户管理、配置租户、触发管道或 API 调用等的工作流。 如果数据位于 Power Automate 可访问的位置,则可以使用 Power Automate 监视租户目录的更改。 如果使用手动租户目录,也可手动触发 Power Automate 工作流。 如果需要团队中的某人验证某些内容或执行无法完全自动化的其他步骤,你可能会决定在工作流中包含手动审批步骤。

此方法还允许 Web 应用程序直接向租户目录添加记录,而无需人工干预,从而为客户提供自助注册服务。

下图演示了如何使用 Microsoft Power Platform 创建具有自助服务注册的控制平面:

此图显示了使用 Power Automate 和 Dataverse 作为低代码控制平面的一种方法。

下载此体系结构的 Visio 文件

低代码方法的优点

  • 轻量级:创建一组低代码工作流并将它们连接到周围系统通常既快速又便宜。
  • 使用平台工具:可使用本机平台功能来存储数据、创建管理门户供你的团队使用,并在工作流运行时对其进行监视。 通过使用本机平台功能,可以避免自行生成大量组件。
  • 可自定义:如果需要更多自定义,通常可使用自定义代码和流程来增强工作流。 例如,可使用 Power Automate 在 GitHub Actions 中触发部署工作流,或者可调用 Azure Functions 来运行自己的代码。 这也有助于促进逐步实施。
  • 低开销:低代码服务通常是完全托管的,因此无需管理基础结构。

低代码方法的缺点

  • 必需的专业知识:要使用低代码平台创建流程并有效地使用这些平台,通常需要具备专有知识。 许多组织已经使用这些工具,因此你的团队可能已具备所需的专业知识,但也可能没有。 应考虑是否需要对团队进行培训才能有效地使用这些平台。
  • 管理:处理大量低代码配置的管理可能比较困难。
  • 可测试性:考虑如何测试和促进对控制平面的更改。 在托管平台中,创建用于测试和促进更改的典型 DevOps 过程更加困难,因为更改通常是通过配置而不是通过代码进行的。
  • 设计:仔细考虑如何满足安全性和可靠性等非功能性要求。 这些要求通常在低代码平台上进行管理。

何时考虑放弃低代码方法

  • 最终,你的需求可能会变得非常复杂,以至于你无法合理地将它们纳入低代码解决方案中。 如果需要克服工具限制以满足你的需求,建议停止使用托管解决方案而转向使用自定义控制平面。

自定义控制平面

还可考虑创建自己的完全自定义的控制平面。 此选项提供的灵活性最大,功能最强,但所需的工作量也最大。 租户目录通常存储在数据库中。 在这种情况下,不能直接使用目录,而应通过管理界面对其进行管理,该界面可能是自定义应用程序或系统,例如你组织的客户关系管理 (CRM) 应用程序。

通常需要创建一组围绕所有租户管理功能设计的控制平面组件。 这些组件可能包括管理门户或其他用户界面、API 和后台处理组件。 如果需要在发生租户生命周期事件时执行部署代码或基础结构之类的操作,那么部署管道也可能构成控制平面。

请确保任何长时间运行的处理都使用适当的工具。 例如,可将 Durable FunctionsAzure 逻辑应用用于编排租户加入或部署的组件,或者用于需要与外部系统通信的组件。

与低代码方法一样,此方法使你可以让 Web 应用程序在无需人工干预的情况下直接将记录添加到租户目录中,从而为客户提供自助服务注册。

下图显示了创建提供自助服务注册的基本自定义控制平面的一种方法:

该图显示了使用 Durable Functions、SQL 数据库和服务总线创建的控制平面。

下载此体系结构的 Visio 文件

自定义方法的优点

  • 充分的灵活性和完全可自定义性:可完全控制控制平面的功能,并可在需求发生变化时更改它。
  • 可测试性:可为控制平面应用程序使用标准软件开发生命周期 (SDLC),并实现正常的测试和部署方法,就像对主要应用程序所做的那样。

自定义方法的缺点

  • 维护责任:此方法需要更多的维护开销,因为你需要自己创建所有内容。 控制平面与应用程序的任何其他部分一样重要。 在开发、测试和操作控制平面时,您需要非常谨慎,以确保其可靠性和安全性。

混合方法

还可考虑使用混合方法。 可结合使用手动和自动系统,也可使用 Microsoft Power Platform 等托管平台并通过自定义应用程序对其进行增强。 如果您需要自定义控制平面的可定制性,但不一定想要构建和维护完全自定义的系统,请考虑实施混合方法。 请记住,在某些时候,你对手动过程或托管平台的自动自定义可能会变得与完全自定义的系统一样复杂。 每个组织的临界点都不同,但如果混合方法维护起来很麻烦,则应考虑转向完全定制的系统。

逐步实现

即使你知道你最终希望实现控制平面的自动化,你也不一定需要从这种方法开始。 创建应用程序的初始阶段的常见方法是从手动控制平面开始。 随着应用程序的发展和更多租户的加入,你应开始识别瓶颈区域并根据需要实现自动化,进而转向使用混合方法。 随着自动化程度的提高,你最终可能会拥有一个完全自动化的控制平面。

要避免的反模式

  • 长期依赖手动过程。 尽管在刚开始或租户数量较少且需要相当轻量级管理时使用手动流程是合理的,但你需要计划如何随着业务的发展而扩展到自动化解决方案。 如果您需要雇用额外的团队成员来跟上手动流程的需求,这是一个好兆头,表明您应该开始自动化控制平面的各个部分。
  • 对长时间运行的工作流使用不适当的工具。 例如,避免使用标准 Azure Functions、同步 API 调用或具有执行时间限制的其他工具来执行长时间运行的操作,例如 Azure 资源管理器部署或多步骤编排。 请改用Azure 逻辑应用Durable Functions 和其他可执行长时间运行的工作流或操作序列的工具。 有关详细信息,请参阅Azure Functions 的性能和可靠性异步请求-答复模式

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者:

其他参与者:

后续步骤