阿里云数字新基建系列——混合云架构(第2章-1)

第2章 阿里云基础技术

阿里云经过12年的发展,以IaaS、PaaS分层为标准的云计算基础技术已经非常成熟,同时围绕这两层的泛网络、泛存储、泛安全等对云计算攸关的技术也起着关键支撑作用。当然,阿里云的核心技术有很多,包括但不限于数据库、大数据、IoT、AI等技术。限于篇幅,本章不会涉及这些内容,后续章节主要是介绍IaaS和PaaS层及相关的泛网络、泛存储、泛安全技术原理。

2.1 IaaS

什么是IaaS(Infrastructure as a Service,基础设施即服务)?NIST(美国国家标准与技术研究院) 对IaaS的定义如下:

向用户提供计算、存储、网络及其他计算资源的能力,用户可以基于此部署和运行任意软件包括操作系统和应用,用户可以控制操作系统、存储和部署的应用,也可以对网络组件(如主机防火墙)进行有限控制,但不能管理和控制底层的云基础设施。

阿里云作为云服务商,IaaS 是其交付基础设施服务的一种形式。从广义上说,IaaS基于互联网或者内联网,为用户提供按需使用的存储、计算、网络、安全等资源来部署和运行操作系统及各种应用程序,并产生与之相匹配的按量租赁资源费用。灵活、高效的资源弹性伸缩能力,以及按量付费的服务方式,使得IaaS 服务成本相比于一次性IDC 基础设施和硬件投入具有显著的优势。从狭义上说,IaaS 基于虚拟化技术和分布式调度管理实现CPU 计算单元、块存储/ 对象存储、网络等资源的抽象隔离与集成组成即时服务单元,凭借灵活的弹性伸缩能力和强大的稳定性支撑上层系统(操作系统、中间件和应用等),实现按需管理与永续运行。如图2-1 所示为IaaS 架构示意图。

阿里云数字新基建系列——混合云架构(第2章-1)

图2-1 IaaS 架构示意图

2.1.1 阿里云IaaS 产品体系与应用场景

伴随着国内移动互联网和数字经济发展的浪潮,新的应用开发模式、体系架构、交付和运维模式不断涌现,业界技术呈现快速迭代和不断进化的发展态势。阿里云历时十多年,整个IaaS 产品体系始终保持高速迭代和积极市场响应, 从2009 年推出首款IaaS产品ECS(Elastic Compute Service),到今天涵盖“计算”“存储”“网络”“安全”产品系列;从寥寥数款面向个人用户的小规格云主机产品形态,到“通用云服务器”“GPU/FPGA 云服务器”“神龙裸金属服务器”“超级计算集群SCC”“云桌面”“弹性伸缩”“弹性容器实例”“VPC(Virtual Private Cloud)”“负载均衡”“NAT/VPN/ 智能网关”“高速通道”“对象/ 文件/ 块存储”等累计200 多款IaaS 相关产品,阿里云已经进化形成相对完整的IaaS 计算解决方案簇。阿里云IaaS 产品簇如图2-2 所示。

阿里云数字新基建系列——混合云架构(第2章-1)

图2-2 阿里云IaaS 产品簇

丰富的云产品及产品组合覆盖了越来越多的企业应用场景,阿里云IaaS产品服务支持的典型应用场景包括:

    • 企业建站与服务 :通过阿里云 IaaS 云资源包,即 ECS/RDS(Relational Database Service)/OSS(Object Storage Service)/SLB(Server Load Balancer) 搭建企业Web 官网,或者基于Web 或移动互联网应用服务站点,使站点具备负载均衡和云资源弹性伸缩能力、DDoS(Distributed Denial of Service)防攻击安全防护能力,通过CDN(Content Delivery Network)加速还可以实现网站在不同地域秒开。
    • 互联网游戏:通过阿里云 IaaS 产品“ECS+GPU 虚拟化实例”“OSS 存储”“RDS 数据库和缓存”以及“CDN 加速”等为云游戏提供一站式运营维护解决方案。比如面向资源和游戏的弹性调度与策略,可实现更高的资源使用效率, 低延时串流技术和服务端的渲染能力专门为多媒体云端运算服务。未来还将开放更多的业务功能及运营管理API(Application Programming Interface),支持用户的个性化产品定制和运营策略。
    • 大数据分析:利用阿里云 IaaS 产品DTS(Data Transmission Service)将数据从多数据源导入云上MaxComputer(大数据离线计算)和Blink(在线计算),通过Dataworks 开发与治理构建实时离线一体化数据仓库,满足企业实时推荐、风控和分析业务需求。
    • 视频云与直播:通过阿里云视频直播服务实现移动端的推拉流能力,解决视频直播中手机端的推拉流问题;同时移动端利用MQTT(Message Queuing Telemetry Transport)消息服务实现发送和接收消息,在转发消息时利用内容安全服务对消息内容进行审核。发送的消息可以被存储在“表格存储”中。
    • 云灾备:阿里云 IaaS 支持企业级云灾备方案,通过迁云服务可以将业务切换到云中运行,云上的业务可以充分利用已有产品的同城容灾、异地灾备架构来保障业务的安全运行,也支持利用混合云网关从云中将数据回流到云下机房,形成有效的灾备闭环。
    • 云存储:通过阿里云 IaaS 产品“OSS 对象存储”“SLS(Simple Log Service)日志存储”“表格存储”等与多种实时/ 离线计算框架、计算服务的对接方式,满足结构化、半结构化、非结构化等不同数据类型的海量数据存储需求,提供海量、高可靠、易扩展、高性价比、全面支持计算生态的大数据存储解决方案。

2.1.2 核心技术

阿里云IaaS 架构如图2-3 所示。

阿里云数字新基建系列——混合云架构(第2章-1)

图2-3 阿里云IaaS 架构

传统意义上的IaaS 层一般由IDC 基础设施、虚拟化、 配套存储与网络软件基础设施、云管平台组成,阿里云的IaaS 实现将管理功能纳入飞天分布式系统层,虚拟化和网络则被划分到单独层。下面主要介绍IDC 基础设施、虚拟化,配套存储与网络软件基础设施相关技术。

1. IDC 基础设施

混合云IDC(Internet Data Center,互联网数据中心)标准化建设方案可以参考GB 50174—2008《电子信息系统机房设计规范》A 级或TIA-942《数据中心通信基础设施标准》的T3+ 标准,混合云IDC 机房应满足安全可靠、节能环保、扩展灵活等条件,提供不间断的服务,可用性在99.99% 以上。IDC 机房建设主要内容可以概括成“风”(包间气流)、“火”(消防)、“水”(水冷管道)、“电”(供配电)、“通信网”(用于数据通信的千兆或万兆以太网)、“监控网”(弱电网监控),要求包括:机房基础条件要求、供电设施要求、制冷设施要求、消防设施要求、机柜及桥架要求、网络设施要求、其他设施要求等。

IDC 终端机柜层面布线有两种方式:ToR(Top of Rack)和EoR(End of Rack),混合云IDC 布线更多采用ToR 方式。一般情况下10~20 个机柜背靠背放置一排组成一对机柜组,再加上一组网络交换设备机柜,组成一个POD(Point of Delivery)。ToR 布线方式简化了服务器机柜与网络机柜间的布线,有利于在高密度服务器布置场景下提升空间利用率,在分布式系统和大数据业务高速发展的今天,显然ToR 是更适合混合云业务场景的IDC 终端机柜布线方式。

IDC 基础设施最重要的部分是基础网络。在混合云场景下,IDC 基础网络架构一般采用三层树状结构(核心—汇聚—接入),在基础网络交付实施中主要考虑以下关键点:服务器接入规模、支持POD 数量、单POD 带宽、单POD 支持服务器数量、单POD 接入交换机数量、虚拟机网关ARP 规格、虚拟机迁移域等。为满足高可用要求,在规划混合云IDC 基础网络时应该根据业务场景、网络架构和维护复杂度明确网络关键节点和链路冗余,以及网络接入层和网络汇聚层高可用部署方案。

2. 虚拟化

阿里云IaaS 使用KVM(Kernel Virtual Machine)虚拟化技术实现IDC 物理资源(CPU、内存、网络、存储)的池化与抽象,并提供统一管控入口,实现弹性和可自定义的以ECS 虚拟机为中心的计算资源分配和管理服务。KVM虚拟化通过HVM(Hardware Virtual Machine)在宿主机硬件资源之上提供定制规格的虚拟机,并通过镜像和快照技术实现在虚拟机中运行guest OS,比如RedHat、CentOS、Ubuntu、Windows 等系统,用户的具体业务应用跑在虚拟机的guest OS 之上,如图2-4 所示。

阿里云数字新基建系列——混合云架构(第2章-1)

图2-4 阿里云IaaS KVM 虚拟化平台

阿里云通过KVM 虚拟化平台和飞天云管理系统实现以下功能:

    • 通过提供虚拟机粒度的隔离部署环境及集群规模的动态负载均衡,提高硬件资源利用率,降低采购成本。
    • 对 CPU、内存、存储、网络等资源做了更细粒度的灵活划分,提高资源利用率。
    • 通过提供统一的资源管理、调度、配置,降低用户的部署、维护成本。
    • 快速交付,快速响应用户的新增机器需求。
    • 提供虚拟 CPU、内存、磁盘、网卡热插拔功能,可以快速响应用户已部署业务对计算、网络、存储服务能力的扩展需求。
    • 基于共享存储,提供虚拟机 HA(High Availability,高可用)能力,一旦虚拟机所在的物理机出现故障,就可以在其他物理机上秒级恢复上面的虚拟机。
    • 提供虚拟机热迁移功能,可以提高用户业务的可服务性,降低用户业务的停机时间。例如,在进行硬件维护时,并不会中断该服务器上的业务,可以把上面的虚拟机迁移到另一台服务器上。结合阿里云飞天分布式存储系统实现块共享存储机制,还可以大大缩短迁移的总时间。如果使用了Overlay 网络,则可以在IDC 内部,甚至在IDC 之间迁移虚拟机。
    • 提供虚拟机镜像机制,方便部署到镜像中的业务或者业务组合,一次部署到处运行,也可以提供公共的基础镜像。
    • 提供对业务透明的虚拟存储备份功能,可以大大提高用户数据的可靠性。
    • 提供更加灵活的运维手段,提高运维自动化水平。
    • 利用 Overlay 网络与物理网络解耦,在进行业务网络规划时可以不必考虑物理网络组网,尤其是网络拓扑的限制。

KVM 使用的virtio 驱动协议类似于Xen 上使用的PV(Paravirtualization)驱动,都属于半虚拟化 I/O。半虚拟化I/O 是相对于全虚拟化 I/O 而言的,比如QEMU 模拟的E1000 网卡、IDE 磁盘就属于全虚拟化I/O,其缺点是性能差,通信效率低,基本原因在于全虚拟化设备频繁访问设备寄存器,导致过多的虚拟机退出,而虚拟机退出会消耗很多时间,代价很高;双向通知没有利用生产者—消费者模型中常用的按需通知,导致太多虚拟机退出和中断注入;全虚拟化设备本身限制可能对一些新特性缺乏支持,比如网卡的卸载(offloading)特性,一些老式网卡就不支持。

半虚拟化 I/O 就是专门为虚拟化而生的,在提高数据传输效率、降低I/O开销、新特性(比如网卡的某些高级卸载特性,有些新特性也可能是物理世界所没有的)支持、稳定性方面都做了增强。

virtio 涉及前端部分(guest driver)和后端部分(QEMU),如图2-5 所示。

阿里云数字新基建系列——混合云架构(第2章-1)

图2-5 virtio 技术架构

阿里云标准系统镜像是能够与 Hypervisor 协同工作的半虚拟化技术模式。本质上,半虚拟化弱化了对虚拟机特殊指令的被动截获需求,将其转化为用户操作系统的主动通知。但是,半虚拟化需要修改用户操作系统的源码来实现主动通知。

下面通过分析virtio 网络驱动的前后端实现来说明virtio 通信原理,其他virtio 设备原理类似。

(1)虚拟化 I/O 驱动 virtio

从总体上看,virtio 组成可以分为四层(如图2-6 所示),包括前端Guest系统中的各种驱动程序模块,如 virtio-blk、virtio-net 等;后端 Hypervisor(实现在 QEMU上)中的处理程序模块 virtio 后端 ;中间用于前后端通信的virtio 层和 virtio 环层——virtio 这一层实现的是虚拟队列接口,是前后端通信的桥梁;virtio 环则实现了两个环形缓冲区,分别用于保存前端驱动程序和后端处理程序的执行信息。严格来说,virtio 和 virtio 环可以被看成一层,virtio层属于控制层,负责前后端之间的通知机制和控制流程;virtio 环层负责具体数据流转发。

阿里云数字新基建系列——混合云架构(第2章-1)

图2-6 virtio 组成

由于不同前端Guest 设备(如块设备、网络设备、PCI 设备、balloon 驱动等)的工作逻辑大同小异,单独为每个设备定义一套接口没有必要,而且还要考虑跨平台的兼容性问题。另外,不同后端 Hypervisor(如 KVM、Xen 等)的实现方式也有很大差异,因此就需要一套通用框架和标准接口(协议)来完成两者之间的交互过程。virtio 就是这样一套标准,利用它可以解决上述不通用的问题。

① vHost

vHost 是 virtio 的一种后端实现方案,如图 2-7 所示。virtio 是一种半虚拟化的实现方案,需要虚拟机端和宿主机端都提供驱动才能完成通信。通常,virtio 宿主机端的驱动在用户空间的 QEMU 中实现,而 vHost 在内核中实现,是内核的一个模块(vHost_net.ko)。

阿里云数字新基建系列——混合云架构(第2章-1)

图 2-7  vHost 实现

在virtio 的机制中,guest 与用户空间的 Hypervisor 通信,会造成多次的数据拷贝和 CPU 特权级的上下文切换。guest 发包给外部网络时,首先需要切换到 Host Kernel,Host Kernel 再切换到 QEMU 来处理 guest 的请求, Hypervisor在通过系统调用将数据包发送到外部网络后,会切换回 Host Kernel ,然后再切换回 guest。这样长的路径无疑会带来性能上的损失。

vHost 与 virtio 前端的通信主要采用 eventfd(一种事件驱动的机制)来实现,guest 通知 vHost 这一事件要借助 KVM.ko 模块来完成。在vHost 初始化期间,会启动一个工作线程来监听 eventfd,一旦 guest 发出对 vHost 的 kick 事件,KVM.ko 就会触发ioeventfd 通知 vHost,vHost 通过 virtqueue 的 avail ring 获取数据,并将其设置为used ring。同样,从 vHost 工作线程到 guest 的通信,也采用相同的机制,只不过发出的是一个回调事件,KVM.ko 触发 irqfd 通知 guest。

② vhost-user

在 vHost 实现方案中,由于 vHost 在内核中实现,guest 与 vHost 的通信方式,相较于原生的 virtio 方式,在性能上有了一定程度的提高,因为从 guest到 KVM.ko 的交互只有一次用户态的切换及数据拷贝。这种方式相对于原有的QEMU virtio 性能有较大的提高,但是vHost 转发流程有内核线程的参与,因此整个转发流程伴随着中断、软中断及内核线程的切换,效率仍然较低。

为了避免这种情况,只能将 vHost 从内核态移到用户态,即 vhost-user。vhost-user 是 DPDK 中的一个库。vhost-user 和 vHost 的实现原理是一样的,都是采用 virtio 环共享内存,采用eventfd 机制完成事件通知的。不同于 vHost 在内核中实现,vhost-user 在用户空间中实现,用户空间中两个进程之间的通信采用共享内存的方式,如图 2-8 所示。

阿里云数字新基建系列——混合云架构(第2章-1)

图2-8 vhost-user 实现

SR-IOV host-user 基于 C/S 模式,是采用 UNIX 域套接字(UNIX Domain Socket)方式来完成进程间的事件通知和数据交互的,这种方式相比于 vHost中采用 ioctl 的方式大大简化了。

vhost-user 基于 virtio 环这套通用的共享内存通信方案,只要客户端和服务器端按照 virtio 环提供的接口实现所需功能即可。常见的实现方式是在 guest操作系统中实现客户端,一般集成在 virtio 驱动上;在 QEMU 中实现服务器端,或者在 OVS Snabbswitch 虚拟交换机等其他数据平面中实现。

(2)SR-IOV

SR-IOV(Single Root I/O Virtualization) 允许在虚拟机之间高效共享 PCIe(Peripheral Component Interconnect eXpress,快速外设组件互连)设备,在硬件中实现,可允许创建的新设备与虚拟机直接连接,获得能够与本机性能媲美的 I/O 性能。使用 SR-IOV 技术,单个 I/O 资源可被许多虚拟机共享。共享的设备将提供专用 的资源,并且还可使用共享的通用资源。这样,每台虚拟机都可访问唯一的资源。因此,启用了 SR-IOV 并且具有适当的硬件和操作系统支持的 PCIe 设备(如以太网端口)可以显示为多个单独的物理设备,每个设备都具有自己的 PCIe 配置空间。PCIe 设备的 SR-IOV 实现如图2-9 所示。

阿里云数字新基建系列——混合云架构(第2章-1)

图 2-9 PCIe 设备的 SR-IOV 实现

每个SR-IOV 设备都可有一个物理功能,并且每个物理功能最多可有64000个与其关联的虚拟功能。

① 物理功能

物理功能(Physical Function,PF)用于支持 SR-IOV 功能的 PCI 功能。物理功能包含 SR-IOV 功能结构,用于管理 SR-IOV 功能。物理功能是全功能的PCIe 功能,可以像其他任何 PCIe 设备一样发现、管理和处理。物理功能拥有完备配置的资源,可以用于配置或控制 PCIe 设备。

② 虚拟功能

与物理功能关联,虚拟功能(Virtual Function,VF)是一种轻量级 PCIe 功能,可以与物理功能以及与同一物理功能关联的其他虚拟功能共享一个或多个物理资源。虚拟功能仅被允许拥有用于其自身行为的配置资源。

3. 配套存储与网络软件基础设施

阿里云IaaS 网络主要分为后端网卡I/O 相关虚拟化(virtio-net)和专有网络VPC 两部分。上面介绍了virito 框架,对virtio-net 来说,主要是增加了在virito-pci 之上的二层数据包的传递,前后端之间解包、组包。对virtio-net 来说,后端通过vhost-net 方式实现,vhost-net 的实现主要包含两部分:vhost,这部分实现了公用的vHost 机制(vhost-scsi 也会使用vHost 机制);vhost_net,这部分是与网络相关的处理。vhost_net 甚至可以与SR-IOV 结合,VF 驱动alloc的rx buffer 不使用标准接口,而是直接向vhost_net 申请,vhost_net 从vring 中获取rx buffer,地址转换后交给VF 驱动。

总体来说,阿里云专有网络VPC 包含vSwitch、Overlay、vRouter、Controller几部分。Overlay 网络将从虚拟机出来的L2 包放在一个虚拟隧道中进行传输,在隧道的两端看起来像是同一个L2,从而使虚拟网络和物理网络解耦,组成逻辑大二层网络。Overlay 和Underlay 是两个对立的概念,Underlay 网络是承载Overlay 网络的物理网络,Overlay 网络是通过隧道技术在物理网络之上建立的虚拟网络。Overlay 网络一般通过隧道协议来实现,比如VxLAN、GRE、STT,其中VxLAN 是阿里云用于构建Overlay 网络的协议。阿里云Overlay 网络在以下两个地方实现:

    • 在 Hypervisor 所在的物理机上通过vSwitch 软件实现。
    • 在专属网络交换设备网关上实现。

通过后端网卡I/O 虚拟化和专有网络VPC,阿里云IaaS 构建了一个隔离的网络环境,并可以自定义IP 地址范围、网段、路由表和网关等。此外,也可以通过专线VPN/GRE 等连接方式实现云上VPC 与传统IDC 的互联,构建混合云业务。有关阿里云IaaS 网络的细节内容,将在第5章中介绍。

阿里云IaaS 存储实现主要分为后端存储I/O 虚拟化、镜像/ 镜像接口和存储后端几部分。后端存储I/O 虚拟化利用virtio-blk 实现块存储I/O 通道,ECS虚拟机通过virtio-blk 和ring 的方式将I/O 请求传递到宿主机的块存储数据控制平面,最后通过EBS 服务传递到后端分布式存储系统。阿里云IaaS 存储后端使用自研的飞天分布式存储系统为IaaS 提供业务所需的块共享存储、对象存储和文件存储等服务。“盘古”是飞天中的分布式文件系统组件,盘古将并不高可靠的PC 服务器中的磁盘连接成一个整体,向外提供安全、稳定、易用的文件存储能力。此外,盘古还提供了如下核心价值。

(1)数据安全

盘古通过数据多副本技术来保证数据安全,并不要求磁盘本身的高可用性。因此,盘古可以被架设在PC 服务器和SATA 盘上,但并不要求磁盘本身通过RAID 来保证数据安全。同时,因为盘古将数据打散到整个集群,在发生故障时能更快地做出数据的副本,从而保证数据安全。盘古默认有三个数据副本,能够保证数据具有极高的安全性。

(2)服务高可用

存储服务本身是任何IT 系统中最基本的服务之一,必须具有高可用性。盘古对外承诺两个层次的高可用性:数据的高可用性,单机、单机柜损坏时数据仍然能够读/ 写;服务的高可用性,盘古文件系统能够不受大部分硬件故障的影响而继续提供服务,这里主要指盘古Master 的高可用性。

盘古通过多Master 机制来保证Master 的可用性。盘古的多Master 机制是主从机制,默认三台Master 中有一台为Primary Master,两台为Secondary Master(热备),主从之间通过Paxos 算法来保证内存处于一致的状态。使用Paxos 算法能够在两台Master 达成一致时就返回,在保证服务高可用的同时降低了服务的延时。

关于阿里云分布式存储系统,我们将在后面的章节中详细介绍其架构和实现方式。


上一篇:阿里云数字新基建系列——混合云架构(第1章-3)


下一篇:阿里云数字新基建系列——混合云架构(第2章-3)