虽然弹性计算的产品种类越来越多,但不同产品的技术架构大同小异。下面以当前最主流的产品形态——云服务器为例,探查其背后的技术秘密。
1.4.1 工作原理
云服务器通常以虚拟机的方式提供给用户,在创建后被称为“实例”(Instance)。每个实例至少需要一个块存储设备作为系统盘,用来安装操作系统镜像,同时也可以搭载更多的块存储设备作为数据盘。弹性计算一般推荐使用“云盘”形态的虚拟块存
储设备,因为它更加可靠和灵活。实例还需要通过虚拟的“弹性网卡”连接到虚拟网络交换机上,从而加入用户的VPC(Virtual Private Cloud,虚拟专有网络)中与外部通信。图1-4 描绘了云服务器的基本构成。
云服务器中包括虚拟机、虚拟的“云盘”和虚拟的“弹性网卡”等。很显然, “虚拟化”是云服务器的基础技术,包括计算虚拟化、存储虚拟化和网络虚拟化。虚拟化的基本原理是用软件将物理设备分隔成多个逻辑分片,这些分片提供与物理设备相同的接口和能力,相互不感知,从而实现“虚拟”的设备。这些虚拟设备与物理设备之间是多对一、多对多甚至一对多的关系。正是依靠虚拟化技术,弹性计算才能将物理资源池化,然后按照用户的需求动态地虚拟出大小不一的设备,灵活地提供给用户使用。
图1-4 云服务器的基本构成
计算虚拟化技术的核心部件被称为虚拟机管理器(Hypervisor),它实现了对物理服务器的CPU、内存等资源的分片,即把这些资源切分成多份,并将每一份模拟成标准的CPU、内存等设备,变成一台虚拟的服务器,即虚拟机,如图1-5 所示。每一台虚拟机可以运行自己的操作系统,并在逻辑上与运行在同一台物理服务器上的其他虚拟机完全隔离,不能互相访问彼此的数据。Hypervisor 还可以控制每台虚拟机能够使用的物理资源的性能容量,例如CPU 时钟周期、内存大小等,从而实现虚拟机之间的性能隔离。主流的Hypervisor 包括Xen、KVM 等。
存储虚拟化采用当前最流行的计算和存储分离的架构,如图1-6 所示,用池化的存储服务器提供虚拟的云盘,而计算服务器上的虚拟机则通过网络来访问这些云盘。1
存储虚拟化首先利用软件把多个存储服务器上的存储介质(例如SATA 硬盘或者SSD 盘)联合起来,形成一个巨大的存储资源池;然后把每个云盘需要存储的数据切分成一个个小块,并按照一定的映射规则分散存储到资源池的存储介质中,提升访问性能;最后将每个小块冗余存储在多个独立的物理介质中,实现极高的可靠性。
网络虚拟化一般采用SDN(Software Defined Network,软件定义网络)的方式实现,解决云数据中心网络支持多租户同时使用的问题。用户可以在云上创建VPC, 相当于传统的自建数据中心网络,但是其中的网卡、交换机、路由器等网络设备变成了逻辑设备,一般通过软件技术来实现。不同的VPC 之间是完全隔离的,除非经过特殊的互联授权,否则无法互相访问。一个VPC 可以包含一台或多台虚拟网络交换机,每台虚拟网络交换机对应一个网络地址段资源,这些交换机之间通过路由器实现互联互通。而云服务器的网卡在创建时需要指定连接到某台虚拟交换机上,从中分配相应的地址资源,这样该云服务器就可以与同一个VPC 中的其他云服务器进行通信了。网络虚拟化的多租户隔离逻辑可以通过网络的覆盖(Overlay)技术实现,就像在物理网络中构建出了一个个互相隔离的隧道:虚拟机使用虚拟网卡发出的数据包会被重新封装并加上虚拟网络的信息,然后根据虚拟网络的拓扑发送到目标物理服务器上;目标物理服务器在解包后,根据其携带的虚拟网络信息转发给相应的虚 拟机。
图 1-5 Hypervisor 和虚拟机实例 图 1-6 存储虚拟化
1.4.2 总体架构
计算、存储和网络的虚拟化技术只是弹性计算整体技术栈的冰山一角。我们可以从一台云服务器的创建过程来探讨一下弹性计算背后的技术,如图 1-7 所示。第 1 章 开 篇 19
1.请求创建示例:用户创建实例的请求会被Open API 层接收。
2.分配服务器:该请求被传递给管控系统。管控系统相当于弹性计算的神经系统,需要执行大量的业务逻辑,比如售卖逻辑、约束校验、库存检查等;并在计算服务器的资源池中挑选一台合适的服务器来“安顿”新的虚拟机实例,这个决策是由一个高度复杂的调度子系统来完成的。
3.创建实例:管控系统正式发起新实例的创建,将命令发送给计算虚拟化、存储虚拟化和网络虚拟化的管控子系统。
4.资源虚拟化:网络资源和云盘创建就绪后,被选中的服务器上的Hypervisor 创建虚拟机,挂载云盘,同时创建一张弹性网卡将该虚拟机接入指定的VPC 中。至此,这台云服务器实例就创建好了。
图1-7 一台云服务器的创建过程
创建只是虚拟机生命周期中的一小步,之后的运行、重启、迁移、变配、运维等数十种操作,无不依赖弹性计算背后所集成的大量技术。图 1-8 描绘了弹性计算的整体技术架构。下面就以控制面和数据面两个切面来展开介绍,引出其中的关键技术。
1.4.3 控制面
弹性计算的控制面管理着每个实例的生命周期,它暴露给用户的接触面通常包含Open API 及基于API 构建的Web 控制台和CLI 命令行工具,除简单的管控操作外, 还支持实例的迁移、部署、运维和伸缩等。用户可以通过直接使用这些工具或者第三方生态包装过的工具来管理其所购买的实例。
在用户可见的管理界面和工具的背后,是弹性计算的核心管控技术,实现了实20
例生命周期管理、资源调度、库存闭环和主动运维等,对弹性计算的性能提升至关重要,特别是弹性、成本和稳定性。
控制面数据面用户DevOps 第三方生态工具用户应用客户机操作系统 Open API,Web控制台&CLI 管理工具计算产品弹性售卖弹性伸缩弹性编排运维自动化弹性裸金属虚拟机弹性容器实例专有宿主机管控技术虚拟化/安全沙箱技术实例生命周期管理资源调度库存闭环主动运维 计算虚拟化 网络虚拟化 存储虚拟化安全沙箱物理设施层芯片服务器物理网络数据中心
图 1-8 弹性计算的整体技术架构
下面列举弹性计算在控制面上的关键技术。
1)弹性伸缩技术。弹性伸缩技术允许用户配置触发的伸或者缩的规则,例如基于时间的规则、基于性能指标的规则等。预测式伸缩技术是利用机器学习来发现用户应用的负载变化规律、预测未来走势,并根据这个走势提前调整计算资源的规模,从而将弹性伸缩技术从自动化演进到智能化。
2)库存闭环技术。弹性是一种供应能力,云服务提供商如何做到让用户无限索取的同时保证自身库存成本最优,是一件极具挑战的事情。库存闭环技术通过打通资源的售卖、跟踪、分析、预测、下单、生产、提货、上架、部署、上线等整条链路的闭环,以及自动化的产品转换、跨IDC 产品平衡等库存调配,建立数据化、可视化、自动化、智能化和精细化的库存管理体系,从而提升资源利用率和弹性保障能力。
3)资源调度技术。资源调度技术旨在分配合适的服务器给用户提供所需的计算或存储资源,而且这种分配可以随着变化来动态调整,以保障用户应用的高可用性和稳定性。弹性计算的服务器资源池通常包含很多版本和种类均不同的服务器,而产品规格也多达上百种,再加上用户的实际工作负载特征各异,如重CPU、重存储 I/O、第 1 章 开 篇 21
重网络等,有些负载持续稳定,而有些负载规律波动。资源调度技术通过一次在线调度和二次离线调度,可达到避免争抢、减少闲置、缩小宕机影响面的目的,让整个系统在性能、成本和稳定性上达到平衡。
4)异常检测和预测技术。硬件的故障和软件的缺陷是不可避免的,通过对异常的检测和预测,实现及时补救,可以大大降低甚至避免故障带来的影响,从而提高弹性计算产品的稳定性,特别是可用性。异常检测,首先需要识别故障相关的关键指标,然后依托于精细、实时的监控和分析技术,及时发现异常,从而触发系统快速做出反应。而异常预测,则通过启发式规则、机器学习等技术,基于监控数据提前预知和规避可能的故障。阿里云弹性计算云服务器产品的单实例可用性能达到99.975%, 异常检测和预测技术功不可没。
5)热迁移技术。热迁移技术能把一台运行中的实例或云盘从一个物理位置转移到另一个物理位置,同时不影响其运行,是支持库存优化、故障规避、轮转升级等场景的关键技术。它的难度堪比给飞行中的飞机更换引擎。热迁移实现的基本原理是把实例的状态从源服务器拷贝到目标服务器,由于在拷贝过程中实例的状态还在不断变化,所以在做最后的切换时需要暂停实例,并把新产生的变化再同步一次, 然后完成切换,唤醒实例继续运行。热迁移云盘的做法与之类似,Post-copy 这种方式更好。无论哪种方式,降低对运行中的实例的性能影响,甚至做到“无感”都是重大挑战。
1.4.4 数据面
弹性计算的数据面直接支撑着用户应用的运行,它暴露给用户的标准接口是 x86 服务器及其上运行的客户机操作系统(Guest OS)。这里有弹性裸金属服务器、虚拟机和弹性容器三种产品形态上的选择,而专有宿主机则给了用户独占物理服务器来运行虚拟机或容器实例的选项。
实现这些产品形态的核心技术是虚拟化技术;随着云原生应用的蓬勃发展,更轻量的安全沙箱技术也正变得日益重要。
下面列举弹性计算在数据面上的关键技术。
1)客户机操作系统。客户机操作系统是弹性计算数据面上的主要接口,为用户的应用提供标准化的运行环境。弹性计算一般提供主流操作系统的镜像,其中包含适配底层的虚拟化和物理硬件所做的定制和优化。为了让这些定制和优化更加极致地为用户提供卓越的性能和体验,领先的云服务提供商都会推出自己的操作系统发行版,例如阿里云就推出了Aliyun Linux。通过剪裁不必要的功能、模块和软件,针22
对自身的物理硬件和虚拟化技术做定向的优化,再搭载其特有的增值能力,例如安全加固和可服务性提升工具,Aliyun Linux 已成为阿里云弹性计算技术栈上重要的一环。
2)软硬一体的虚拟化平台。虚拟化是弹性计算数据面上的核心技术,经历了几代技术变迁,最新一代已经演进到了软硬一体的虚拟化平台,例如阿里云的神龙计算平台。该技术通过专用的硬件将原来在物理机上运行的网络、存储、管控等负载,完全下沉到定制的计算节点上并进行硬件加速,性能更好;而主机侧运行高度定制和“瘦身”的QEMU 及KVM 的虚拟机管理程序,使得物理机上的资源可以最大限度地被释放并用于售卖。
3)异构资源虚拟化。异构计算加速是近年来的热点技术之一,被认为是处理多媒体、大数据和机器学习的利器,目前主要形态包括 GPU、FPGA 和 NPU 等。早期的异构计算走硬件直通的路线,随着 GPU SR-IOV 虚拟化和分片虚拟化技术的支持, vGPU 已经成为现实。FPGA 虚拟化技术更加复杂,不仅依赖 CPU 和系统软件虚拟化, 还依赖 FPGA 的逻辑编程硬件抽象接口 Shell 实现硬件虚拟化的能力。而实现这些异构计算能力的池化是未来的重要技术发展方向,可进一步提高异构资源部署的灵活性和利用率。
4)超高速云盘。云盘是云服务器常用的块存储设备形态,具备高可用、高持久、易运维、使用灵活等诸多优点。如何让云盘具备可以与本地盘媲美的高吞吐和低延时,则颇具挑战。例如阿里云的 ESSD 云盘基于计算和存储分离架构,存储端使用自研的分布式文件存储系统,而计算端采用多线程多队列轮询(Polling), VHost-User 新一代 I/O 虚拟化,软硬一体化的高性能用户态网络协议栈服务等机制, 实现了超高 IOPS 、超低时延的云盘,为 I/O 密集型应用提供了一个更好的选择。
5)VPC 网络虚拟化。VPC 相当于一套虚拟的数据中心网络。如何实现同时具备强隔离、高性能、高可用和可扩展的虚拟网络,是一项巨大的技术挑战。以阿里云自研的洛神系统(注:虚拟网络管理系统)为例,其控制面具备超大规模虚拟网络管理能力,用户通过 API 能够进行网络实时变配,秒级响应业务流量的弹性伸缩;洛神系统的数据面基于软硬件协同技术,具备高吞吐、低延迟的特点,使得云服务器的网络性能能够与物理机相媲美。另外,洛神系统基于数据驱动的管理平面能够自动分析和定位链路故障,通过冗余链路实施秒级容灾切换,在网络可用性指标上相比物理机具有更大优势。
6)轻量级安全沙箱。轻量级安全沙箱为云原生应用而生,启动快、资源占用少, 且安全隔离性好,是运行在容器上的应用的最佳选择。目前社区中存在多种技术路线,例如基于 Kata Containers 的 Micro VM 方案、基于进程虚拟化的 gVisor 方案,以及基于 Unikernel 的方案。阿里云的弹性容器实例就是运行在自研安全沙箱中的。这项技术充分利用了虚拟化层的技术和能力,并可对垂直业务场景实现端到端优化,是阿里云面向云原生时代的关键基础技术。
1.4.5 物理设施层
弹性计算依赖大量物理设施和硬件,包括物理网络、数据中心、芯片和服务器 等,每一个领域都涉及众多关键技术,例如物理网络中的自研交换机和网络协议,数据中心的选址、整机柜设计、弹性功耗调度、液冷,芯片中的厂商定制、自研芯片, 服务器中的自研L6 设计等,因为不是本书的重点,所以不再展开。有兴趣的读者可以阅读阿里巴巴集团编写的《企业数字化基石——阿里巴巴云计算基础设施实践》一书,该书对物理设施层的技术做了非常详尽的介绍。