你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在衡量、分配和优化成本时,多租户解决方案通常需要特别考虑。 本文包含关键指南,可帮助你以解决方案架构师的身份有效地评估和管理成本,该架构师可与多租户应用程序配合使用。
关键考虑因素和要求
请考虑在解决方案中衡量消耗量的要求。 这些要求在 “度量每个租户的消耗量”中更详细地介绍。
测量的目的
决定具体的目标是非常重要的。 请考虑以下示例目标:
计算每个租户的大致销售商品成本。 例如,如果部署了大量共享资源,则可能需要大致估计每个租户产生的成本。
计算每个租户产生的确切成本。 例如,如果向租户收取其产生的确切消耗量的费用,则需要准确了解每个租户的资源成本。
确定比其他租户成本高得多的离群租户。 例如,如果提供 统一费率定价模型,则可能需要确定任何租户是否消耗了预配容量的不成比例,以便可以应用公平使用策略。 在许多情况下,此用例不需要对成本进行精确度量。
降低解决方案的总体 Azure 成本。 例如,你可能想要评估每个组件的成本,然后确定是否为工作负荷过度预配。
通过了解租户衡量消耗量的目标,可以确定成本分配是否需要近似或精确。 此区别会影响可以使用的特定工具和应遵循的做法。
共享组件
通过将租户移动到共享基础结构,可以降低多租户解决方案的成本。 但是,需要仔细考虑共享资源的影响,例如租户是否开始遇到 干扰邻居问题。
还需要考虑度量和分配共享组件成本的方式。 例如,可以在使用共享组件的每个租户之间平均分配成本。 或者,可以计量每个租户的使用情况,以便更准确地衡量其共享组件的使用情况。
要考虑的方法和模式
在多租户体系结构中规划成本分配时,请考虑以下策略和设计模式,以确保透明度、公平性和可伸缩性。
使用资源标记分配成本
Azure 使你能够将标记应用于资源。 标签是一种键值对。 使用标记来添加自定义元数据。 标记对于许多管理操作很有用,并且可以用于分析 Azure 消耗的成本。 应用标记后,可以 确定与每个标记关联的成本。
在多租户解决方案中使用标记的方式可能会因体系结构而异。
在某些解决方案中,可以为每个租户部署专用资源。 例如,可以为每个租户部署专用 部署标记 。 在这些方案中,很明显,应将这些资源关联的任何 Azure 消耗分配给相应的租户。 若要支持此方法,可以使用租户 ID 标记 Azure 资源。
在其他方案中,可能具有一组共享资源。 例如,应用 分片模式时,可以部署多个数据库并分散租户。 请考虑使用租户 组 的标识符标记资源。 可能无法轻松地将成本分配给单个租户。 但是,可以使用此方法将成本缩小到定义的租户组。 如果你注意到特定分片的累积成本高于其他分片,则还可以使用消耗信息来帮助你在分片之间重新平衡租户。
注释
可以应用于资源的 标记数有限制 。 使用共享资源时,最好不要为共享资源的每个租户添加标记。 相反,请考虑添加具有分片 ID 的标记,或者以其他方式标识租户组。
请考虑使用 部署标记模式 和 垂直分区租赁模型构建的示例多租户解决方案。 每个部署缩放单元都包括一个共享 Web 服务器和分片数据库。 可以将标记应用于每个 Azure 组件,如下图所示。
请考虑以下标记策略:
- 每个资源都有一个
stamp-id标记。 - 每个分片数据库都有一个
shard-id标记。 - 专用于特定租户的每个资源都有一个
tenant-id标记。
使用此标记策略可以轻松将成本信息筛选为单个标记。 还很容易找到特定于租户的资源的成本,例如租户 C 的数据库总成本。共享组件没有 tenant-id 标记,但缩放单元的共享组件的成本可以在分配使用该缩放单元或分片的租户之间分配。
检测应用程序
在 Azure 资源与租户之间没有直接关系的情况下,请考虑检测应用程序以收集遥测数据。
应用程序层可能已经收集日志和指标,这些日志和指标有助于回答有关计量的问题。 请考虑以下使用特征:
- 一段时间内为每个租户发出的 API 请求数。
- 特定租户全天的活动高峰期。
- 租户 A 和租户 B 之间的使用模式差异。
在 Azure 中, Application Insights 通常会捕获这些指标。 通过使用 遥测初始值设定项,可以扩充 Application Insights 捕获的遥测数据,以包含租户标识符或其他自定义数据。
但是,Application Insights 和其他日志记录和监视解决方案不适用于精确成本度量或计量目的。 Application Insights 旨在 对数据进行采样,尤其是在应用程序有大量请求时。 采样旨在降低监视解决方案的成本,因为捕获每个遥测数据通常可能会变得昂贵。
如果需要出于计费目的跟踪有关消耗或使用量的精确详细信息,则应改为生成自定义管道来记录必要的数据。 然后,应根据你的需求来聚合数据。 可用于此目的的 Azure 服务包括 Azure 事件中心 ,用于捕获大量遥测数据和 Azure 流分析 以实时处理它。
使用 Azure 预留和 Azure 节省计划来降低成本
使用 Azure 预留 ,可以通过预先提交到特定级别的支出来降低 Azure 成本。 预留适用于许多 Azure 资源类型。
可以在多租户解决方案中有效地使用预留。 请考虑下列因素:
部署包含共享资源的多租户解决方案时,请考虑工作负载所需的基线消耗级别。 可以考虑该基线消耗的预留,然后在不可预知的峰值期间为更高的消耗付费标准费率。
为每个租户部署资源时,请考虑是预先提交到特定租户的资源消耗量,还是跨租户组合进行预提交。
使用 Azure 预留可以 限定预留范围 ,以应用于资源组、订阅或一组订阅。 此功能意味着,即使跨多个订阅分片工作负荷,也可以利用预留。
当租户具有不可预知的工作负荷时,预留范围也很有用。 例如,考虑一个解决方案,其中租户 A 只需要特定资源的一个实例,但租户 B 和 C 各自需要两个实例。 然后,租户 B 变得不那么繁忙,因此可以减少实例计数,租户 A 会变得更加繁忙,因此增加实例计数。 你的预留将应用于需要它们的租户。
用于计算的 Azure 节省计划 是一个灵活的成本节省计划,与即用即付价格相比,该计划可节省大量成本。 你同意签订为期一年或三年的合同,并获得符合条件的计算服务的折扣。 这些服务包括虚拟机、专用主机、容器实例、Azure Premium Functions 和 Azure 应用服务。 无论区域、实例大小或操作系统如何,这些计算服务都会节省成本。 有关详细信息,请参阅 Azure 节省计划概述和 Azure 节省计划文档。
合并预留和节省计划 ,以进一步优化成本和灵活性。
要避免的反模式
完全忽略成本跟踪。 必须至少大致了解你产生的成本,以及每个租户如何影响交付解决方案的成本。 否则,如果成本随时间而变化,则没有基线可供比较。 你可能无法预测租户的增长如何影响成本和盈利能力。
假设或猜测没有数据。 确保成本度量基于实际信息。 可能不需要精确的度量值,但根据实际数据进行估算。
用于精度的过度工程。 你可能不需要对每个租户产生的每笔成本进行详细的会计。 生成不必要的精确成本度量和优化过程可能会适得其反,因为它们增加了工程复杂性并创建脆弱的流程。
实时测量成本。 大多数解决方案不需要最新的成本测量。 由于计量和消耗数据的处理可能很复杂,因此应记录必要的数据,然后以异步聚合和处理数据。
使用监视工具进行计费。 确保 使用专为成本监视和计量而设计的工具。 应用程序监视解决方案通常不适合此类数据,尤其是在需要高精度时。
供稿人
Microsoft维护本文。 以下参与者撰写了本文。
主要作者:
- John Downs |Azure 模式和做法的主要软件工程师
其他参与者:
- 雪莉·巴比隆 |适用于 Azure 的高级客户工程师 FastTrack
- 阿森·弗拉基米尔斯基 | 客户首席工程师,FastTrack for Azure
若要查看非公开的LinkedIn个人资料,请登录LinkedIn。