热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

阿里云徐立:面向容器和ServerlessComputing的存储创新

云原生的创新源泉云原生趋势下,应用容器化比例正在快速增长,Kubernetes也已成为云原生时代新的基础设施。Forrester预测到2022年&#x

云原生的创新源泉

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

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

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

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

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

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

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

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

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

镜像加速的技术创新

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

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

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 技术方案对比如下图所示:

基于文件系统的 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 的随机读取。

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

DADI 关键技术解读

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

1、分层块设备 Overlay Block Device

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

2、原生支持可写层

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

3、ZFile 压缩格式

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

4、基于 Trace 预取

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

5、按需 P2P 传输

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

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

  • 各个节点均缓存最近使用过的数据块
  • 跨节点请求大概率命中父节点自己的 cache
  • 未命中的请求会递归向上传递,直到 registry

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

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

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

  • 多节点高可用架构
  • 基于一致性哈希的分工

大规模启动耗时测试

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

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

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

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 数据传输,构建机房内缓存。

大家可通过查看以下 Github 的链接了解更多信息:

  • 控制平面 (for containerd):

https://github.com/alibaba/accelerated-container-image

  • 数据平面(overlaybd):

https://github.com/alibaba/overlaybd

容器持久存储的技术演进

存储接入技术面临的挑战

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

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

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

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

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

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

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

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

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

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

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

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

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

最佳实践

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

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

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

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

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

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 容器网络文件系统提供极致的用户体验。

随时云原生创新序幕拉开,云原生存储创新刚刚走出第一步,相信和各位行业专家一起开创和 Reinvent 存储的创新机会。

作者:徐立

原文链接

本文为阿里云原创内容,未经允许不得转载。


推荐阅读
  • 本文介绍了Paxos的世界中关于复制日志与状态机的概念和重要性。通过存储日志来实现数据的持久化,并通过日志流来记录数据的变化,而不是直接持久化数据本身。这样做的好处是简化了持久化存储的操作,并且方便多机之间的数据同步。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了自动化测试专家Elfriede Dustin在2008年的文章中讨论了自动化测试项目失败的原因。同时,引用了IDT在2007年进行的一次软件自动化测试的研究调查结果,调查显示很多公司认为自动化测试很有用,但很少有公司成功实施。调查结果表明,缺乏资源是导致自动化测试失败的主要原因,其中37%的人认为缺乏时间。 ... [详细]
author-avatar
吴碧菱乐其怡伶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有