管理大规模的虚拟机集十分不易,尤其是在使用模式不相同、或者对应的请求量存在波动时 —— 既要保持吞吐量和响应能力,同时最大程度的降低运行成本。
Azure VMSS 正是应对这种需求的解决方案。
区别于前两篇 Availability Sets、Availability Zones 两种高可用性机制,VMSS 除了保障高可用以外,提供了更综合的 VMs 的管理面。
讲一个段子:
在公司的时候,有时会接到这样的需求:客户要进行下云迁移。理由是:每个计算资源打开一看,工作负载仅占分配量的10%。客户觉得预算撑不住了、太费钱了,想通过下云迁移来实现经费收紧的目标。
但其实,稍微了解一点云知识,就可以知道计算资源的分配和成本优化,可以通过横向/纵向紧缩(Scale In / Scale Down)来快速完成,并且偶尔的负载增加也可以通过临时的弹性扩展来承接。
一般,出现这样需求的客户,不是本身的云管理方案不太完整,就是对云管理和成本优化不太了解。
因此,了解一些云知识,是资深程序员或者架构师不可或缺的能力之一。
一、什么是 VM Scale Sets
Azure VM Scale Sets(Azure 虚拟机规模集,简称 Azure VMSS),旨在简化管理和扩展 Azure VMs 的大规模部署。VMSS 能解决的问题:
- 自动化管理。通过自动化脚本和统一工具,集中管理大量虚拟机,减少手动对每个虚拟机维护的工作量和复杂性。
- 高可用性。自动分配和管理虚拟机,确保应用的高可用性,减少单点故障。
- 弹性扩展。随着应用访问量的增加,能够快速自动地横向扩展计算资源。
- 成本优化。动态调整资源使用,根据负载量自动缩放虚拟机数量,优化成本支出。
VMSS 是使用虚拟机组成的,并添加了负载均衡等组件进行综合实现,还提供了管理层和自动层来运行和缩放应用程序。相比于 IaaS,已经趋向 PaaS 的表现。
在 VMSS 发布之前,用户通常只能手动依次地创建和管理 VMs,或使用自主方案去集成现有工具以进行自动化。
二、支持的场景
VMSS 支持计算资源、大数据、容器化等场景的工作负载,以基础设施层的身份,服务于生成大规模的服务。
比如:
- Web 应用和 API: 用于支持高流量网站和 API 服务,自动扩展和缩减以应对流量波动。
- 游戏服务器: 动态管理和扩展游戏服务器,以应对高峰期的玩家数量。
- 大数据处理: 处理大规模数据集,如数据仓库和大数据分析平台。
- 容器编排: 支持 Kubernetes 和其他容器编排工具,提供弹性和高可用的基础设施。
因此,如果处理需求各异且不可预测的大型工作负载,则 VMSS 是很好的解决方案。
另外,不推荐使用 VMSS 的场景:
- 托管在单个 VM 上的应用程序,该 VM 的利用率没有波动,并且没有允许负载均衡的体系结构。
在这种情况下,直接使用 VM 是一个合适的选择,但应定期检查 VM,以确保 VM 的大小与工作负载的性能相符。 - 托管在单个 VM 上的应用程序,每天仅由少数人在固定时段使用。
在这种情况下,可以使用 VM 本身的计划来启动和关闭 VM,从而优化成本,确保 VM 在营业时间可用,在没有任何用户工作时处于脱机状态。
三、特性和机制
使用 VMSS 可以创建并管理一组负载均衡的 VMs,同时根据需求量、或定义的计划自动增减 VM 实例的数目。
1、VMSS 的组件
创建一个 VMSS 会自动生成以下组件:
- 默认情况情况下,生成两个 VM 实例
- 一个负载均衡器
- 一个公网 IP(挂在负载均衡器上)
- 一个虚拟网络 VNET
- 一个网络安全组 NSG
- 一个 VMSS 的控制面,以及背后的自动层
VMSS 使用负载均衡器在 VMs 之间分配请求。
并且 VMSS 通过配置负载均衡器中的 health probes,来确认整个规模集中每个 VM 实例的可用性。 - 探针 ping 通,则认为 VM 实例可用。
- ping 失败或超时,规模集则判定 VM 实例不可用,则不会向它发送请求。并且结合启用的“自动实例修复”策略,尝试修复 VM 实例。
2、VMSS 的业务流程模式
VMSS 的业务模式分为两种:
- Uniform orchestration(统一业务流程模式)
指在同一个 VMSS 中使用相同规格和配置的 VMs —— 主要运用于大规模无状态的工作负载,多应用于各 VM 运行相同的应用程序。 - Flexible orchestration(灵活业务流程模式)
同一个 VMSS 中包含有不同规格和配置的 VMs,可以用于运行不同的应用程序。
不同于符合直觉的“统一业务流程模式”,灵活业务流程上的 VMs 可以拥有不同的配置和应用程序,并为整个 VM 集提供了统一的体验。
同时,灵活模式对容错域进行了兼容,这对于运行基于仲裁的工作负载或有状态的工作负载而言至关重要。因此,在使用 VM 的过程中,比起使用 Availability Sets,Azure 会更推荐使用 VMSS 的灵活业务模式。
使用场景举例:- 基于仲裁的工作负载
- 开源数据库
- 有状态应用程序
- 需要混合虚拟机类型的服务
- 遗留的可用性集
更多业务流程的比较,可见官方文档:Azure 中虚拟机规模集的业务流程模式 - Azure Virtual Machine Scale Sets
3、自动缩放
VMSS 的自动缩放分为两种:
- 计划缩放。
如果已知在指定日期/时段内工作负载会增加,可以使用此方法。 - 指标缩放。
通过监视与规模集关联的性能指标来调整缩放,比如 CPU 使用率、IO 等。
如果这些指标超过指定阈值,规模集可以自动启动新的虚拟机实例;如果指标表明不再需要额外资源,规模集可以回收多余的实例。
4、Spot instance VMs
Azure 为 VMSS 提供了使用 Spot instances 的选项。
Spot instance VMs 不太好翻译,背后代表的意思是:Azure 平台上的一些闲置的 VM(暂时还没有租户使用的)。
可以允许 VMSS 使用这些虚拟机,优点是比正常的售价便宜(根据不同的地区,节省可以高达80%);缺点是 Azure 平台随时可能回收 —— 回收时只会给用户发个通知,然后会根据用户设置的逐出策略从 VMSS 中删除这些虚拟机,所以 SLA 完全不保证。
因此,这个 VMSS with Spot instances,只推荐使用于 —— 处理可以服务中断的工作负荷(例如批处理作业)、开发/测试环境等场景。
四、约束
- 实例限制: 单个规模集最多支持 1,000 个虚拟机实例。
- 虚拟机系统支持:支持 Linux 和 Windows 虚拟机。