云原生的创新源泉

云原生趋势下,应用容器化比例正在快速增长,Kubernetes 也已成为云原生时代新的基础设施。 Forrester 预测到 2022 年,全球组织/公司在生产环境运行容器化应用。从今天不足 30%的比例将大幅度提升到超过 75%,企业应用容器化的趋势势不可挡。我们可以看到两个普遍的现象。首先,在云上托管 Kubernetes 已经成为企业上云及运行容器的优先选择。另外,用户使用容器的方式也在改变,从无状态应用到核心企业应用再到数据智能应用,越来越多的企业使用容器来部署生产级别、复杂度高和高性能计算的有状态应用。比如 Web 服务、内容资料库、数据库,甚至 DevOps、AI/大数据应用等。

容器里面的数据库 xshell 数据库容器化是趋势吗_阿里云

随着基础设施从物理机到虚拟机,到以 Kubernetes 为代表的容器环境,甚至到 Serverless 的逐渐演进,今天的计算和应用正在面临巨大的变化。这种变化使得资源粒度越来越细,生命周期越来越短,计算按需使用。

从用户视角来看云原生带来的存储变化,最明显的就是用户使用存储界面发生上移,和应用不直接相关的存储服务从应用层下沉到云平台,用户更关心应用。

举例来说,传统形态用户需要关心所有硬件和软件,逐渐过渡到用户关心虚拟机、操作系统和整个应用软件栈,到今天在 Serverless 里演变成用户只关心应用业务和代码。系统资源从物理资源层、虚拟化资源层上升到应用开发层,用户无需关心底层的基础设施。

在这样的技术体系下,存储的能力的演变主要体现在以下 3 个方面:

1、高密
虚拟机时代,一个虚拟机就对应一个完整的存储空间,可以用其存储整个应用所需要的所有数据相关的访问和存储需求。在Serverless 函数计算环境,应用被切分为一个个函数,对应的资源都需要存储管理,因此,存储的密度发生了很大的变化,存储密度更高。

2、弹性
随着应用拆分的粒度越来越细化,存储密度逐渐提升,Serverless 函数计算大规模实例需要高并发启动,存储需要极致弹性的能力。

3、极速
从Serverless 函数计算的角度来看,函数是整个进程的一个部分,生命周期自然变短。由此出现大量短生命周期的容器实例。随着生命周期越来越短,需要存储快速挂载/卸载,快速访问。

随着服务界面发生上移,存储管控界面被重塑,内置存储和外置存储变得更加清晰。Serverless 环境里,用户可见界面是外置存储(包括文件存储和对象存储),而内置存储(包括镜像存储和临时存储)对用户是不可见的,内置存储由阿里云来管理,提供了创新的机会。

镜像加速的技术创新

阿里巴巴容器规模化部署的挑战

容器里面的数据库 xshell 数据库容器化是趋势吗_容器_02

阿里巴巴容器规模化部署主要面临的挑战体现在以下几个方面:

1、业务体量大。 集群规模大,高达十万量级;所有应用全部容器化,并且应用镜像大,通常以数十 GB 大小为主。

2、更快的部署速度。 业务规模持续增长,要求云平台可以快速的部署应用,才能够处理业务增长,尤其双十一大促时紧急扩容,难以事前对各服务准确预估容量。

3、然而大规模的创建或者更新容器集群依然很慢,主要原因是容器部署镜像的下载和解压很慢,主要的技术挑战如下:

• 时间开销大:时间开销 ∝ 镜像大小 * 节点数;一千节点就需要存一千份镜像;

• CPU 时间开销大: gzip解压慢,且只能串行解压;

• I/O 压力大: 下载、解压两轮写盘,包括众多节点同时写盘,对云盘产生“共振”;

• 内存占用扰动: 对宿主机 page cache 产生严重扰动;

• 但是有效数据占比少: 启动时平均仅需镜像数据的6.4%。

应对以上技术挑战,大规模容器部署的关键需求抽象总结为三点:

1、按需: 下载解压速度足够快、数据按需访问和按需传输。

2、增量分层: 数据解耦,通过 OCI-Artifacts 标准 overlayfs 把层次做划分,增量数据,时间资源使用更有效。

3、Remote Image : 采用远程镜像技术,改变镜像格式,同时减少本地资源的消耗。

Remote Image 技术方案对比

Remote Image 主要有两种技术实现的方式,一种是基于文件系统,第二种是基于块设备。Remote Image 技术方案对比如下图所示:

容器里面的数据库 xshell 数据库容器化是趋势吗_云原生_03

基于文件系统的 Remote Image 技术的主要特点是直接提供文件系统接口,是容器 Image 的自然扩展。复杂度高,稳定性、优化和高级功能的实现难度大。在通用性上,和操作系统绑定,能力固定,不一定匹配所有应用。同时攻击面较大。行业代表主要是 Google CRFS,Microsoft Azure Project Teleport,AWS SparseFS。

基于块设备实现的 Remote Image 技术的主要特点是可配合常规文件系统一起使用,如 ext4;普通容器、安全容器、虚拟机均可直接使用。复杂度、稳定性、优化和高级功能更容易实现。在通用性上,与操作系统和文件系统解绑,应用可自由选择最合适的文件系统,如 NTFS,作为依赖打包进 Image。并且攻击面较小。

阿里巴巴选择了 Date Accelerator for Disaggregated Infrastructure (简称为 DADI),同时进行了规模性验证。

阿里巴巴自研容器镜像加速技术 DADI

DADI 是阿里巴巴的独创性的技术方案。DADI 镜像服务是一种可以做到敏捷又弹性部署应用的分层块级镜像服务。DADI 彻底摒弃了传统容器启动的瀑布类型(即下载、解包、启动),实现了远程镜像的细粒度按需加载,容器启动前不在需要部署镜像,容器在创建后可以立即启动。

DADI 的数据路径如下图所示,虚线之下是内核态,虚线之上是用户态。DADI 将镜像抽象为虚拟块设备,并在其上容器应用挂载常规文件系统如 ext4。当用户应用读取数据时候,读取请求先通过常规的文件系统处理,文件系统将请求转换为虚拟块设备的一次或者多次读取。对块设备的读取请求被转发到用户态的 DADI 模块,最后转换为一个或者多个 Layer 的随机读取。

容器里面的数据库 xshell 数据库容器化是趋势吗_Serverless_04

DADI 镜像采用块存储+分层技术,每层只记录被增量修改的数据块,支持压缩以及实时的按需解压缩;支持按需传输,只传输用到的数据块下载使用;DADI 还可以采用 P2P 传输架构,一传十、十传百,在大规模集群内将网络流量均衡到所有多个节点上去。

DADI 关键技术解读

DADI 增量镜像可以通过基于块+分层技术来实现,其中每个层对应于一个 LBA 的变更。DADI 的关键技术包括远程镜像的细粒度按需传输,高效的在线解压缩,基于 trace 读取,用于处理突发工作的 P2P 传输技术。DADI 在提高部署应用的敏捷性和弹性方面非常有效。

1、分层块设备 Overlay Block Device

每层记录被增量修改的变长数据块 LBA,不涉及文件/文件系统的概念,以 512 字节为最小粒度。快速索引,支持变长记录,以节省内存,各记录的 LBA 不重叠,支持高效的区间查询。

2、原生支持可写层

提供追加写文件和随机写稀疏文件两种模式构建 DADI 镜像。只读层,每个只读都可以按照不同类型的大小,每层查询区间,速度极快。可写层由存储原始数据(Raw Data)和存储索引(Index)两部分组成,接受 append only 组织而成。

容器里面的数据库 xshell 数据库容器化是趋势吗_容器_05

3、ZFile 压缩格式

标准压缩文件格式,例如 gz,bz2,xz 等,无法高效的进行随机读写操作,无论读取压缩文件中的哪一部分,都需要从头部开始解压,为了支持 layer blob 的压缩并同时支持远程镜像的按需读取,DADI 引入了 ZFile 压缩格式。ZFile 的压缩格式如下图所示,按固定大小数据块压缩,只解压读到的数据块,支持多种有效的压缩算法,包括 lz4,zstd,gzip 等,采用通用格式,不绑定于 DADI。

容器里面的数据库 xshell 数据库容器化是趋势吗_阿里云_06

4、基于 Trace 预取

记录应用过程中的读取日志、只记位置、不记数据本身。在应用冷启动时,若已有 trace 记录,则 DADI 将根据trace提前把数据预取回本地,采用高并发读取,更加高效。Trace 作为一个特殊的 layer 存于 image,专门用于加速,用户不可见,未来可容纳其他加速文件。如下图绿色部分表示加速层、容纳 trace 文件以及其他文件。

容器里面的数据库 xshell 数据库容器化是趋势吗_容器里面的数据库 xshell_07

5、按需 P2P 传输

在我们的生产环境中,有几个关键应用程序已经部署在数千台服务器上,并且包含高达数 GB 的 Layer,这些应用程序的部署给 Registry 和网络基础设施带来了巨大压力。为了更好的处理此类大型应用,DADI 将最近使用的数据块缓存在每个宿主机的本地磁盘上,采用 P2P 的方式在主机之间传输数据。

容器里面的数据库 xshell 数据库容器化是趋势吗_Serverless_08

1、采用树形拓扑结构分发数据

• 各个节点均缓存最近使用过的数据块

• 跨节点请求大概率命中父节点自己的 cache

• 未命中的请求会递归向上传递,直到 registr

2、拓扑结构由 root 节点动态维护

• 每个 layer 单独一个传输拓扑

3、每个机房单独部署一组 root

• 多节点高可用架构

• 基于一致性哈希的分工

大规模启动耗时测试

容器里面的数据库 xshell 数据库容器化是趋势吗_容器_09

我们将 DADI 容器启动延迟与 .tgz 镜像、Slacker、CRFS、LVM 和 P2P 镜像下载进行了比较,使用 DockerHub.com 上的 WordPress 镜像,我们观测单实例的冷启动延迟,所有服务器和主机位于同一数据中心。如左图所示,结果表明,使用 DADI 可以明显减少容器的冷启动时间。

我们在公共云上创建了 1000 个 VM,并将他们用做容器的主机。在每个主机上启动 10 个容器,总共 10000 个容器。测试使用 Python 编写的一个小程序 Agility,访问 HTTP 服务器并在服务端记录时间。如右图所示,结果表明 DADI 的冷启动在 3 秒之内快速完成。

DADI 在阿里巴巴的规模化运行

容器里面的数据库 xshell 数据库容器化是趋势吗_容器里面的数据库 xshell_10

DADI 已经在阿里巴巴集团规模化运行,在阿里巴巴的生产环境内大规模部署。数据显示 DADI 在 10000个宿主机上启动 10000 个容器仅需3-4 秒。DADI 完美应对双十一大促洪峰,目前在阿里巴巴集团内部已经部署了接近十万台服务器宿主机,支持集团 Sigma、搜索、UC 等业务在线、离线应用超过 2 万个,极大提高了应用发布、扩容效率,体验如丝般顺滑。我们在全球最大的电子商务平台之一的生产环境中使用 DADI 的经验表明,DADI 在提高部署应用的敏捷性和弹性方面非常有效。

拥抱开源,释放云原生技术红利

现在,DADI 正在通过贡献社区的方式更好地释放云原生技术红利,也希望与更多企业和开发者共建容器镜像标准。

目前 DADI 已经开放了支持 Contained(docker 尚不支持 remote image),支持节点直连 Registry + 本地缓存技术,支持构建、转换镜像。

未来还会开放 P2P 按需传输:将 P2P 子系统重新设计为 Registry 的延伸,将支持共享存储,如 nfs、hdfs、ceph、glusterfs 等,全局 Registry +机房共享存储 + 节点本地缓存 + P2P 数据传输,构建机房内缓存。

 

容器持久存储的技术演进

存储接入技术面临的挑战

容器里面的数据库 xshell 数据库容器化是趋势吗_容器_11

上面我们谈到了 Serverless 应用架构的新范式,现在我们看到一个趋势,从虚拟机到普通容器,再逐渐演变为神龙裸金属部署安全容器。从存储的布局角度来看,其面临的显而易见的挑战是更加高密和多租户。

容器接入技术趋势: 计算层基于 ECS + 普通容器的架构向基于神龙 + 安全容器架构演进,单节点密度达到 2000,单实例规格最小粒度内存 128MB,1/12 CPU。容器接入技术的趋势,带来了 I/O 资源放大的挑战。

阿里云存储在端接入上有自己的思考,存储分为内置存储(镜像和临时存储)和外置存储(文件系统/共享文件系统、大数据文件系统、数据库文件系统等)。

存储系统如何和底层更好的连接?存储接入容器的方式是通过 virtio 的能力卸载到神龙Moc 卡上,神龙 Moc 卡 + virtio 的通路和底层存储服务更好的联动。

持久存储 - 面向现代化应用的弹性供给云盘 ESSD

容器里面的数据库 xshell 数据库容器化是趋势吗_云原生_12

ESSD 云盘为用户提供高可用、高可靠、高性能的块级随机访问服务,并提供原生快照数据保护和跨域容灾等丰富的企业特性。

面向现代化应用的弹性供给云盘 ESSD 具备两个关键特性:

  • 云盘挂载密度提升 4 倍,单实例最大支持 64 块云盘
  • 性能与容量完全解耦,用户需求不需要预先设定,按需而定。

举例来说,为了应对很多用户面临的问题:无法准确预估业务峰值,在性能配置上难以做好精准规划。如果性能配置预留过高,会造成日常资源的大量闲置浪费;而如果性能预留不足,业务突发洪峰会造成业务受损。我们推出了 ESSD Auto PL 云盘,它支持性能指定配置的同时,支持按业务负载自动伸缩,单盘可以自动提升到最高 100 万 IOPS 性能,为不可预期的突发访问提供安全便捷的性能自动配置。

持久存储 - 容器网络文件系统 CNFS

针对容器中使用文件存储的优势和挑战,阿里云存储团队与容器服务团队共同推出了容器网络文件系统 CNFS,内置在阿里云托管的 Kubernetes 服务 ACK 中。CNFS 通过将阿里云的文件存储抽象为一个 K8s 对象(CRD)进行独立管理,包括创建、删除、描述、挂载,监控及扩容等运维操作,使用户可以在享受容器使用文件存储带来的便捷的同时,提高文件存储的性能和数据安全,并提供容器一致的声明式管理。

容器里面的数据库 xshell 数据库容器化是趋势吗_阿里云_13

CNFS 在可访问性、弹性扩容、性能优化、可观测性、数据保护、声明式等六个方面针对容器存储进行了深度优化,使其与开源方案相比具有以下明显优势:

  • 在存储类型方面,CNFS 支持文件存储,目前支持阿里云文件存储 NAS
  • 支持 Kubernetes 兼容的声明式生命周期管理,可以一站式管理容器和存储
  • 支持 PV 的在线扩容、自动扩容,针对容器弹性伸缩特性优化
  • 支持更好的和 Kubernetes 结合的数据保护,包括 PV 快照、回收站、删除保护、数据加密、数据灾备等
  • 支持应用级别的应用一致性快照,自动分析应用配置和存储依赖,一键备份、一键还原
  • 支持 PV 级别监控
  • 支持更好的访问控制,提高共享文件系统的权限安全,包括目录级 Quota、ACL
  • 提供性能优化,针对文件存储的小文件读写,提供更优化的性能
  • 成本优化,提供低频介质及转换策略,降低存储成本

最佳实践

数据库容器化使用 ESSD 云盘高密挂载的最佳实践

容器里面的数据库 xshell 数据库容器化是趋势吗_容器_14

数据库容器化使用 ESSD 云盘高密挂载的业务场景主要面临的需求是:数据库部署模式从虚拟机向容器化发展,持续提升弹性和可移植性,简化部署。容器部署密度随着 CPU 核数线性增长,需要持久化存储提升挂载密度。数据库作为 IO 密集型业务,对单机存储性能提出更高要求。

我们的解决方案是数据库使用 g6se 存储增强型实例,单实例提供最高 64 块云盘挂载密度,g6se 存储增强型实例,提供最高 100 万 IOPS,4GB 存储吞吐,适配单机高密部署的性能需求。

数据库容器化使用 ESSD 云盘高密挂载的优势是:

  • 高密挂载:相比上代实例,云盘挂载密度提升 400%,提升数据库实例单机部署密度。
  • 高性能:单机最高 100 万 IOPS,多个云盘之间 IO 天然隔离,提供稳定可预期读写性能。
  • 高弹性:ESSD 云盘 支持 IA 快照,快照立即可用实现只读实例的秒级创建。
  • 高可靠性:云盘基于 9 个 9 数据库可靠性设计,同时支持快照、异步复制等数据保护手段,解决软硬件故障带来的数据安全风向。

Prometheus 监控服务使用文件存储的最佳实践

容器里面的数据库 xshell 数据库容器化是趋势吗_容器里面的数据库 xshell_15

Prometheus 的实现方式是Prometheus server 主要用于抓取和存储数据。Client libraries 可以用来连接 server 并进行查询等操作,push gateway 用于批量,短期的监控数据的归总节点,主要用于业务数据汇报等。不同 exporter 用于不同场景下的数据收集,如收集 MongoDB 信息 MongoDB exporter。

Prometheus 的核心存储 TSDB ,类似 LSM tree 的存储引擎。我们看到一个趋势,存储引擎多节点数据同步,需要引入 Paxos 一致性协议。中小型客户在管理引擎的时候,管理一致性协议的时候难度非常大,架构将计算和存储分离,计算是无状态的,TSDB 的存储的引擎释放给分布式文件系统,天然需要 NAS 共享文件系统。

Prometheus 监控服务使用文件存储的优势是:

  • 共享高可用: 多 Pod 共享 NAS 持久化存储,计算节点 Failover 实现容器应用的高可用。
  • 0 改造: 分布式 POSIX 文件系统接口,无需任何改造
  • 高性能: 支持并发访问,性能满足瞬间拉起索引查询,同步进行数据加载以及低时延索引查询 + 写入
  • 高弹性: 存储空间不需预配置,按需使用,按量计费,适配容器弹性能力

总结

面向容器和 Serverless Computing 的存储创新发展驱动了存储视角的新变化,整个存储界面上移,开发者更加专属于应用本身,基础设施的运维尽量被托管。存储供给的特性更加高密、弹性、极速。

以上为大家分享了阿里云容器存储的技术创新,包括 DADI 镜像加速技术,为容器规模化启动奠定了很好的基础,ESSD 云盘提供极致性能,CNFS 容器网络文件系统提供极致的用户体验。