云原生存储和云存储有什么区别?

作者 | 李鹏(壮怀) 阿里云智能事业群高级技术专家

导读:新的企业负载/智能工作负载容器化、迁云、存储方面遇到的性能、弹性、高可用、加密、隔离、可观测性以及生命周期等方面的问题,不但需要存储产品层次的改进,更需要在云原生的控制/数据平面的改进,推进云原生存储和云存储的演进。本文将介绍一下问题场景,探讨可行的解决方案,最终得出云原生存储以及云存储目前可以做什么和未来还需要做什么。

引言

前段时间有幸参加了由 Infra Meetup 联合 Kubernetes & Cloud Native Meetup 共同组织的面向云原生持久化应用的 Meetup,结合最近对云存储、开源存储、云原生存储的思考,对云原生存储到底是什么、需要做些什么以及云原生存储未来挑战是什么,做了更多的反思和梳理,一家之言,分享了几个初步观点。随着云原生应用对可迁移性、扩展性和动态特性的需求,相应的,对云原生存储也带来了密度、速度、混合度的要求,所以对云存储基本能力又提出了在效率、弹性、自治、稳定、应用低耦合、GuestOS 优化、安全等方面的诉求。

云原生现状

容器和云原生计算被企业快速接纳

Forrester 预测:到 2022 年, 全球组织/公司在生成环境运行容器化应用,从今天不足 30% 的比例将大幅度提升到超过 75%,企业应用容器化的趋势势不可挡。

另一方面,根据 IDC 对未来企业级存储市场的增长趋势预测:云存储的需求相比于 2015 年,到 2020 年将会有 3 倍以上的增长。企业存储市场中,数据管理类企业核心数据消耗的存储所占的比例将从 15% 提升到 23%,结构化数据和 DBMS 数据在企业存储市场中将进一步加强。对云原生来说,核心企业应用/智能应用,使用云原生存储来部署生产可用的有状态应用,呈现加速上升趋势。海外存储巨头 EMC、NetApp 拥抱云原生,积极布局 REX-Ray flexrex、Trident 等云原生存储编排方案。

Kubernetes 逐渐成为云原生时代的基础设施

过去的一年中(2018 年 – 2019 年),Kubernetes 逐渐成为云原生时代的基础设施,越来越多的互联网、数据库、消息队列等有状态企业核心应用,逐步迁移到云原生平台 Kubernetes,对不同的云上块存储的性能在时延和吞吐,以及稳定性提出了不同的要求,比如:

  • 毫秒级 NvME SSD 级别的稳定时延,来满足高性能 KVstore 和数据库需求;
  • 随着应用单机部署密度的提升,对块存储单机密度的挑战;
  • 本地块存储共享,对块存储的弹性和隔离性也提出了更高需求。

在云原生环境下,如何以声明方式来满足不同的业务场景,成为了云原生存储在实现控制面和数据面上的挑战。

在智能应用 AI 场景下,高性能计算、流式计算也尝试通过 Kubernetes 云原生平台来部署,使用云存储方式来完成训练、计算、推理等方面的工作,这对云存储在 Kubernetes 环境的选择及使用方面提出了挑战。比如,有证据表明 Spark 生态正在逐步从 Hadoop YARN 向 Kubernetes 原生的调度器以及扩展调度器 e.g. Gang Scheuler 迁移。

在云计算环境中:由于成本和存储计算分离的模型,HDFS 仍然会以存储协议的方式存在,但存储方式会逐步从 HDFS 的 3 副本向对象存储(OSS,S3)迁移;GPU 多机多卡 MPI 计算、Flink 流式计算的 Kubernetes 化已经逐步成为主流,存储访问方式也多以对象存储方式呈现。

但是在使用对象存储过程中,大数据/AI 应用的计算效率仍面临着严峻的挑战:

  • 减少同一节点对同一 Block 的反复拉起产生的网络 IO;
  • 减少数据的 Shuffle 产生的写 IO;
  • 实现计算对数据感知,计算向数据迁移的就近计算。

目前的 Kubernetes 调度器以及云存储特性并未给出好的解决方案,所以这也给云原生存储在加速大数据计算、弥补 IO 吞吐不足方面提供了发挥的舞台。

大数据离线计算比如基因计算,已经通过 Kubernetes 云原生平台来大规模的运行计算任务:对文件存储峰值吞吐 10GBps – 30GBps 的峰值刚性兑付,需要独立的高吞吐的文件存储形态和交付方式在云原生环境下的演进和变革。

容器服务成为云原生时代基础设施

随着企业应用上云越来越多地选择使用容器化方式,容器服务在不同的云厂商中都有大幅度的业务增长,容器服务已经逐步成为云原生时代新的基础设施和最佳使用云资源的入口。

云原生存储对云计算/云存储来说也有了新的内涵,有必要重新思考云存储和云原生存储的本质区别和联系。

云原生存储和云存储的思考

Cloud Native Storage vs Cloud Storage:

  • 对立还是统一?
  • 两者之间的联系?
  • 差异和侧重点?

1. 云原生存储 = 云存储 UI,面向应用的申明式应用层存储 + 效率等能力组合;

云原生存储声明的六要素:

  1. 容量 Size
  2. 性能 IOPS,、吞吐、时延
  3. 可访问性,共享/独享
  4. IO 可观测性
  5. QoS
  6. 多租户隔离

2. 分层存储,重用基础设施红利,不重新发明轮子,针对新的负载类型部分存储形态上移;

3. 在控制平面实现效率、自治方面能力,最大化存储稳定和安全。

市场上的云原生存储

为了更好的理解在云环境中如何构建云原生存储,先看几个在 Kubernetes 企业环境中部署主流的云原生存储,以及对比云存储的形态:

  • Ceph on Kubernetes with Rook
  • Portworx
  • OpenEBS

Ceph on Kubernetes with Rook

Ceph 是圣克鲁兹加利福尼亚大学的 Sage Weil 在 2003 年开发的,也是他博士学位项目中的一部分。Ceph LTS 成熟稳定、高可用、生态强大,在云原生时代和 Kubernetes 紧密集成。

Ceph 基于 RADOS(Reliable Autonomic Distributed Object Store )的高可用存储,在云原生时代之前 2003 年发行起,已经广泛生产部署的高可用存储,支持最广泛的块存储 RBD、文件 POSIX Cephfs 以及对象存储访问协议。

RedHat/SUSE 目前是 Ceph 最主要的商业化支持者,在多个容器平台落地案例中,RBD、CephFS 都被采用作为容器平台实施的主要存储,用来弥补基础云存储的缺失。

Rook 目前是在 Kubernetes 产品级可用的部署和运维 Ceph 编排工具。

Ceph 的基本架构由数据面 OSDs (RADOS) 和控制面 MON / RBD / RADOSGW / CEPHFS 组成,以 CRUSH Algorithm 作为核心算法处理数据冗余和高可用,上层的应用存储通过 librados 同数据面 OSDs 直接完成数据的读写,能够支持快照、备份、监控可观测性等能力,可以通过 Rook 直接通过 Kubernetes 输出,RedHat/SUSE 也提供独立的集群安装能力。

Ceph 的一些基本架构特征和能力:

  • 控制面:MON/RBD/RADOSGW/CEPHFS;
  • 数据面:OSDs(RADOS);
  • 快照、备份、支持 IO 监控等存储性能监控,支持 RBD QoS 的服务端限速能力。

Portworx

Portworx 以容器服务的方式部署,每个节点称为 PX,向下对接各种公有云的块存储或者裸金属服务器,向上提供块或文件服务。不绑定硬件形态和厂商,可接入任何一家公有云或者自建服务器集群(只需支持 iSCSI 或 FC 协议)。

目前 Portworx 主打能力云灾备 DR、多云复制,具备完备的快照(ROW)、多云管理、同步复制(RTO,秒级)异步复制(RPO<=15min),可以通过 Kubernetes CRD 申明方式,优雅实现持久化云下应用带数据自动迁移云上能力。PX 可以独立部署,并不强依赖 Kubernetes 的容器网络。

Portworx 的一些基本功能/性能特征:

  • 弹性扩展, PX 自动识别服务器节点的能力,可动态调度 IO;
  • 控制面
  • 支持主流容器编排工具:Kubernetes、Mesos、Swarm 等;
  • 支持 IO 级别的性能监控。

IO 面

  • 数据块和元数据打散到不同的节点;
  • 使用了缓存和高性能 RPC;
  • QoS 隔离:不支持;
  • 根据底层存储的特性 IOPS(4k) 768 – 65024;
  • 时延(4k): 0.58ms – 23ms。

增值特性

  • 加密(三方秘钥托管,传输加密,落盘加密),支持云厂商 KMS 集成和 Vault;
  • 快照(ROW),多云管理,同步复制(RTO,秒级),异步复制(RPO<=15min);
  • 可扩展性 >1000个节点,>10000 个 Volume;
  • 支持拓扑感知计算。

OpenEBS

OpenEBS 基于 Kubernetes 构建的开源版 EBS,软件定义 PV:将各种介质,包括本地磁盘、云等各种存储统一池化和管理。使用 iSCSI 作为存储协议,没有绑定某一个厂商的存储,这是其可以灵活接入各种存储的一个原因,从某种意义上也是更加灵活,轻量。

但是它强依赖容器网络,增加了抽象层 OpenEBS layer, 写入操作要通过抽象层,并且每个卷 PV 都有独立的 controller,增加了额外的开销,虽然可以做到更灵活,但相比于 Portworx、Ceph 来说,其在性能上有比较大的劣势。

OpenEBS 的一些基本功能/性能特征:

  • 控制面:扩展容器编排系统,支持超融合。相比块而言,卷的数量多且卷的大小任意配置,更加灵活;
  • 高可用:每个卷可以有多副本,数据实时同步,数据同步是在不同的存储池间进行同步;
  • 快照、备份、监控存储性能功能;
  • 和 Cloud-Native Tools 有很好的集成:可以使用云原生工具(如 Prometheus/Grafana/Fluentd/Weavescope/Jaeger 等)来配置、监控和管理存储资源。

理解云存储

盘古 VS RADOS

对比以上三种开源/企业存储,为了更容易的理解云存储架构,我们把盘古的分层架构和 Ceph 存储的分层做一个对比。

可以把 CS(Chunk Server)类比 Ceph OSDs 服务进程,把盘古的 Master 进程类比于 Ceph MDSs 进程。

把云产品块存储类比于 Ceph RBD, 文件存储类别于 CephFS, 对象存储类比于 RADOSGW,本地块存储/高性能文件存储 CPFS 产品暂没有对应。

随着盘古架构的演进,和盘古 2.0 的全面推广、用户态 TCP 网络协议栈的推广、全面的 RDMA 存储网络、全面优化的 RPC 性能,上层产品存储也享受到了底层存储变革的巨大红利,进入了亚毫秒级别时延,和百万 IOPS 的时代,云原生存储也必然是要在产品存储层次之上,能够继承这些能力。

云原生存储在公有云和专(私)有云中的差异

通过分析了市场上云原生存储,我们可以发现这些存储都有共同的特征就是支持声明化的 API,可以实现对性能、容量、功能等方面的度量和声明,或多或少对质量/稳定/安全都有不同支持。

进一步来说,云原生负载可以直接通过数据平面无损耗的使用产品存储在容量、性能、可访问性的能力,在控制平面继续提升面向用户应用的 IO 可观测性、应用级的 QoS、多租户的隔离能力。通过控制平面接口实现 CSI/Flexvolume 等可声明的存储接口,并提供对部分存储生命周期的 Operator,容器编排把业务应用和存储粘合成为实际的负载声明,可能是更加正确使用云存储的姿势。

由于公有云的基础设施产品存储的完备,可以使用更加轻量化的数据平面(virtio, nfs-utils, cpfs-sdk, oss-sdk)来访问产品存储。

专有云环境差异较大,部分虚拟化或者无虚拟化环境,SAN 和裸盘是主要存储方式,需要通过类似构建 ceph RADOS 或者盘古实现 SDS,然后通过数据平面(librados/px/pv-controller)实现存储的访问。

针对 vSphere,OpenStack,飞天所构建的专有云,有接近于公有云的存储提供方式,但因为部署模块的差异,也存在不同的控制/数据平面支持能力的差异。

简单来说就是:

  • 公有云 Cloud Native Storage = Declarative API + Cloud Storage
  • 专有云 Cloud Native Storage = Declarative API + Native Storage

公有云中的云原生存储

  • 存储分层,重用基础设施红利,不重新发明轮子。

云原生存储

  • 提升数据平面的一致性(kernel/OS/net/client/sdk 优化参数和版本控制);
  • 构建统一的控制平面 CSI/Flexvolume/Operator, 提供面向客户声明 API;
  • 在调度编排层面实现拓扑感知,实现云盘的 zone awareness, 本地盘的 node awareness。

块存储

在控制平面通过与 Aliyun Linux 2 OS 结合使用 Kernel Cgroup blkio 实现进程级别的 buffer IO 控制,提升了在应用层对本地盘、云盘的 QoS 控制的粒度。通过对本地盘的 LVM 切分可以实现对单机云盘的密度提升;通过对挂载点/设备 IO 指标测采集能力,实现 IO 的可观测性。

云原生存储- 块存储的主要特征指标:

  • 容量: 单盘 32TB
  • 时延:0.2ms – 10ms
  • IOPS: 5K – 1M
  • 吞吐:300Mbps – 4Gbps (本地 NvME ESSD: 2GBps)
  • 可访问性:单可用区独占
  • QoS:单盘隔离,进程隔离
  • 多租户:单盘隔离

详情见:云盘性能

文件存储

在控制平面可以通过对 Pod Security Policy 和 SecuritContext 的控制,实现应用的强制 UID/GID 控制,实现应用对文件系统的 ACL 控制。控制平面实现对文件系统生命周期的控制,通过对挂载点 IO 指标测采集能力,实现 IO 的可观测性。

云原生存储- 文件存储的主要特征指标:

  • 容量:单文件系统 10PB
  • 时延:100 微妙 – 10ms
  • IOPS: 15K – 50K
  • 吞吐:150Mbps – 20GBps
  • 可访问性:多集群多可用区共享
  • QoS:IO 争抢
  • 多租户:PSP ACL (namespace)

CPFS 并行文件系统

在控制平面实现对文件系统 ACL 控制,对 QoS 提供客户端限速的可配置性,文件系统提供生命周期的声明式管理能力 Operator,进一步在云原生环境内实现 CPFS 文件系统的声明式部署。

云原生存储- 高性能文件存储的主要特征指标:

  • 容量:单文件系统 100PB
  • 时延:0.5ms – 10ms
  • IOPS: 50K – 1M
  • 吞吐:10Gbps – 1000GBps
  • 可访问性:多集群多可用区共享
  • QoS:支持客户端限速
  • 多租户:PSP ACL (namespace)

总结:云原生存储 v1 – 功能性

今天的云原生存储已经实现了在控制平面/控制平面接口对阿里云产品存储的全品类支持,在数据平面也完成了大部分系统级和客户端层的优化。

但随着大量的持久化企业应用和智能化应用的容器化迁移,我们依然面临着更多的问题和挑战。

在整个云原生存储 v1 的开发过程中,感谢阿里云存储团队,在文件存储、块存储和对象存储的通力合作和帮助,共同打造的云原生时代的存储。

随着云原生应用对可迁移性,扩展性和动态特性的需求,对云原生存储也带来了相应的密度、速度、混合度的要求,所以对云存储基本能力之上又提出了在效率、弹性、自治、稳定、应用低耦合、GuestOS 优化、安全等方面的诉求。

新的企业负载/智能工作负载容器化、迁云、存储方面遇到的性能、弹性、高可用、加密、隔离、可观测性、生命周期等方面的问题,不但需要存储产品层次的改进,更需要在云原生的控制/数据平面的改进,推进云原生存储和云存储的演进,这是对云原生存储 v2 的展望和规划,我们会在后续文章进一步揭示这些新的场景、需求、方案以及发展方向。

Image placeholder
yapi
未设置
  59人点赞

没有讨论,发表一下自己的看法吧

推荐文章
Java和C语言有什么区别?学哪个语言好就业?

Java和C语言都是现阶段IT行业,说起它们之间的区别还是相当大的。许多编程语言的初学者在学习初期,都会遇到这样的问题,Java和C语言学哪个语言好就业?其实只要你学好其中随意一门,就业就都不会有太大

angular和vue之间有什么区别?

相同:1.数据绑定:vue和angular绑定都可以用{{}}2.都支持内置指令和自定义指令3.都支持内置过滤器和自定义过滤器。区别:1.学习成本和API设计:vue相比于angular来说更加的简单

jquery和js之间有什么区别?

js是一种脚本语言,常用于网页客户端编程,使网页在客户端浏览器中,实现更多地动态功能,表现出更加丰富的视觉效果。jQuery是一个简洁而快速的JavaScript库,可用于简化事件处理,HTML文档遍

jquery中prop()和attr()之间有什么区别?

1、操作对象不同很明显,attr和prop分别是单词attribute和property的缩写,并且它们均表示"属性"的意思。不过,在jQuery中,attribute和property却是两个不同的

jsp和html之间有什么区别?

HTML(HypertextMarkupLanguage)文本标记语言,它是静态页面,和JavaScript一样解释性语言,为什么说是解释性语言呢?因为,只要你有一个浏览器那么它就可以正常显示出来,而

vue和jquery之间有什么区别?

首先我们来了解一下jquery和vue是什么?Vue是什么?Vue.js是一个前端JavaScript框架,用于构建用户界面。它是开源的。当使用其他JavaScript库时,它还可以用作集成工具。它本

jquery中$和$()之间有什么区别?

$就是jQuery的别称而jQuery就是jQuery库提供的一个函数。这个函数的作用是根据()里的参数进行查找和选择html文档中的元素,函数作用之一就是GetElementByID的代替,但()内

jquery on()与click()之间有什么区别?

jqueryon()与click()的区别click()属于静态加载,当页面加载完,就不在为新增加的元素添加点击事件。on()属于动态加载,当页面加载完,可以为新增加的元素添加事件。但是必须选定负级元

jquery中on和bind之间有什么区别?

bind方法与on方法都是事件绑定,但是两者却又有着一个大区别:事件冒泡(事件代理);jquery文档中bind和on函数绑定事件的用法:.bind(events[,eventData],handle

为什么说Kubernetes的崛起预示着云原生时代到来?

现在,云原生、Kubernetes已经成为企业IT领域的时髦概念,几乎所有的企业都在关注;如果不提这些概念,好像企业就会在云市场竞争中失去绝对话语权。那么,云原生和Kubernetes是怎样一种关系?

从容器到云原生,为什么灵雀云敢说自己“没有明显短板”?

Kubernetes虽然是最热门容器技术,但是放眼中国市场,除了阿里云、腾讯云、华为云这几家大厂,能把Kubernetes整明白并且可以成功落地的企业,凤毛麟角。容器改变了软件开发和部署的面貌,也导致

🚀 Hyperf 发布 v1.1.8 版本 | 企业级的 PHP 微服务云原生协程框架

更新内容 新增 #965新增RedisLua模块,用于管理Lua脚本; #1023hyperf/metric组件的Prometheus驱动新增CUSTOM_MODE模式; 修复 #1013修复Js

🚀 Hyperf 发布 v1.1.9 版本 | 企业级的 PHP 微服务云原生协程框架

更新内容 本周更新主要为DI组件新增了懒加载功能,配置为懒加载后,注入的对象为一个代理对象,在使用到时,才会实现对象的初始化。以及为DIContainer增加了set和define方法来动态的增加对象

🚀 Hyperf 发布 v1.1.9 版本 | 企业级的 PHP 微服务云原生协程框架

更新内容本周更新主要为DI组件新增了懒加载功能,配置为懒加载后,注入的对象为一个代理对象,在使用到时,才会实现对象的初始化。以及为DIContainer增加了set和define方法来动态的增加对象管

工程师笔记:我对数据库系统云原生化的一些思考

作者|张敏(于期)阿里云智能高级技术专家划重点我眼中的云原生我认为的云原生关键能力我眼中的云原生化技术手段我对数据库云原生化的思考伴随着云原生技术越来越热门,阿里内部关于CloudNative、Ser

云计算下半场,从金融业变革看云原生的机遇与挑战

在数字化转型过程中,上云上平台是非常关键的一步。如今是否上云已经不需讨论,云计算在国内经过十年的发展走到了下半场,成为传统产业升级的新助力。而伴随着容器、微服务等技术的逐步成熟,云计算也走到了云原生时

云原生时代,分布式系统设计必备知识图谱(内含22个知识点)

作者|杨泽强(竹涧)阿里云技术专家我们身处于一个充斥着分布式系统解决方案的计算机时代,无论是支付宝、微信这样顶级流量产品、还是区块链、IOT等热门概念、抑或如火如荼的容器生态技术如Kubernetes

当金融科技遇上云原生,蚂蚁金服是怎么做安全架构的?

蚂蚁金服在过去十五年重塑支付改变生活,为全球超过十二亿人提供服务,这些背后离不开技术的支撑。在2019杭州云栖大会上,蚂蚁金服将十五年来的技术沉淀,以及面向未来的金融技术创新和参会者分享。我们将其中的

一图读懂POLARDB BOX的云原生力量

9月26日,2019杭州云栖大会上,阿里云宣布正式推出高性能数据库一体机——POLARDBBOX,用户部署在自有数据中心即可享受云数据库的便捷体验,同时还为Oracle等传统数据库用户提供一键迁移功能

阿里云联合微软开源全球首个开放云原生应用模型OAM

10月17日下午消息,阿里云联合微软正式开源全球首个开放云原生应用模型(OpenApplicationModel,简称OAM)。阿里云智能基础产品事业部总经理蒋江伟表示,该模型旨在为云端应用开发者、运

Kubernetes1.14 版发布,增强了云原生平台的Windows节点支持

Kubernetes1.14GA版本,是开源云原生平台Kubernetes在2019年的一次重大更新。自3月25日开始,这一版本正式推出,供开发者全面使用。  Kubernetes,由云原生计算基金会

华为云存储All-Flash战略打造全新智能数据底座

华为全球产业展望报告显示,全球年数据增量将从2018年的32.5ZB快速增长到2025年的180ZB,但目前企业数据利用率只有10%,数据价值没有得到充分释放。面对海量数据爆炸式的增长和发掘数据内在价

jsp和css的区别?

一、JSPJSP全名为JavaServerPages,他实现了Html语法中的java扩张(以形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端

css3.0和css2.0区别?

css3.0和css2.0区别?css3加强了css2的功能,增加了新的属性和新的标签,并且删除了一些冗余的标签,在布局方面减少了代码量。以前比较复杂的布局现在一个属性就搞定了(columns之类的属

css内边距和外边距的区别?

css内边距和外边距的区别?(一)内边距CSSpadding属性定义内边距,即边框与元素内容之间的空白区域padding属性接受长度值或百分比值,但不允许使用负值.wrap{ display:inli