缩放容器和无服务器应用程序

提示

此内容摘自电子书《为 Azure 构建云原生 .NET 应用程序》,可在 .NET 文档上获取,也可作为免费可下载的 PDF 脱机阅读。

Cloud Native .NET apps for Azure eBook cover thumbnail.

扩展应用程序的方法有两种:纵向扩展或横向扩展。纵向扩展是指将容量添加到单个资源,横向扩展是指添加更多的资源来增加容量。

简单的解决方案:纵向扩展

升级现有的主机服务器,增加 CPU、内存、提升磁盘 I/O 速度和网络 I/O 速度,这就是“纵向扩展”。 纵向扩展云原生应用程序涉及从云供应商处选择功能更强大的资源。 例如,可以在 Kubernetes 群集中创建具有更大 VM 的新节点池。 然后,将容器化服务迁移到新池。

无服务器应用通过选择高级 Functions 计划或专用应用服务计划中的高级实例大小进行纵向扩展。

横向扩展云原生应用

云原生应用程序通常会经历较大的需求波动,需要在一瞬间进行扩展。 它们倾向于横向扩展。横向扩展是通过在现有群集中增加额外的计算机(称为节点)或应用程序实例来横向进行的。 在 Kubernetes 中,可以通过调整应用的配置设置来进行手动扩展(例如,扩展节点池),也可以自动扩展。

AKS 群集可通过以下两种方式之一进行自动扩展:

首先,横向 Pod 自动扩展程序监视资源需求,并自动扩展 Pod 副本以满足需求。 当流量增加时,会自动预配其他副本以横向扩展你的服务。 同样,当需求减少时,它们将被删除以横向缩减服务。 你来定义要扩展的指标,例如 CPU 使用率。 你还可以指定要运行的最小和最大副本数目。 AKS 监视该指标并相应地进行扩展。

接下来,使用 AKS 群集自动扩展程序功能,实现在 Kubernetes 群集之间自动扩展计算节点以满足需求。 这样就可以在需要更多的计算容量时,自动将新 VM 添加到基础 Azure 虚拟机规模集。 它还会在不再需要节点时将其删除。

图 3-11 展示了这两个扩展服务之间的关系。

Scaling out an App Service plan.

图 3-11. 横向扩展应用服务计划。

两者共同作用,确保容器实例和计算节点处于最佳数量,以支持波动的需求。 横向 Pod 自动扩展程序优化所需的 Pod 数。 群集自动扩展程序优化所需的节点数。

缩放 Azure Functions

Azure Functions 根据需要自动横向扩展。 服务器资源是基于触发事件的数量动态分配和删除的。 你只需为运行 Functions 时使用的计算资源付费。 计费基于执行次数、执行时间和使用的内存。

尽管默认使用计划为大多数应用提供了经济实惠的可扩展解决方案,但借助“高级”选项,开发人员可以灵活地满足自定义 Azure Functions 要求。 升级到高级计划可以控制实例大小、预热实例(以避免冷启动延迟)和专用 VM。