一、引言
1.1 对象存储介绍
1.1.1 什么是对象存储?
对象存储(Object Storage)是一种用于存储和访问非结构化数据(如文档、图片、视频等)的存储技术,具有以下主要特点:
- 对象存储将数据以对象的形式进行存储,每个对象包含数据、元数据和一个全局唯一的标识符。
- 对象存储通过RESTful API来读取、写入和删除对象,提供简单的对象访问接口。
- 对象存储设计为大规模、高扩展性和高可用性,可横向扩展到数十亿个对象。
- 对象存储数据具有冗余性和高持久性,确保数据不易丢失。
- 对象存储使用基于软件的缩放,方便根据需求弹性调整存储空间。
此外,对象存储服务提供商通常还会基于存储的数据类型提供更多的增值服务,以集团内部的NOS对象存储为例,它对存储的图片提供了裁剪、缩略、格式转换、水印等服务,对存储的视频提供了转码、格式转换、水印等服务,使得对象存储更加方便易用。
1.1.2 对象存储的发展历程
- 20世纪90年代:理念产生。
- 21世纪初:Amazon S3推出,业界开始认识对象存储优势。
- 2007年:OpenStack Swift面世,开源对象存储方案问世。
- 2011年:阿里云OSS对象存储服务上线。
- 2012年:网易杭研对象存储服务NOS正式上线,NOS的发展里程可以参考这篇文章:网易对象存储NOS十周年纪念文章
- 当前:对象存储已成为云存储主流,大量互联网、移动应用使用对象存储。
未来对象存储会向更大规模、更低成本方向发展,并支持更多的API,会应用在更多场景中。
1.1.3 对象存储市场规模和前景
全球对象存储市场:
- 2020年规模约为150亿美元
- 2025年预计达到290亿美元,复合年增长率达14%
中国对象存储市场:
- 2020年规模超过10亿美元
- 2025年预计达到22亿美元,复合年增长率超过17%
对象存储占整个存储市场的比重也在稳步提升,由于其成本优势和云计算的驱动,未来几年对象存储市场仍将保持较快增长。
主要对象存储服务供应商包括:
- 国际:Amazon S3、Oracle Cloud、Microsoft Azure、Google Cloud
- 国内:阿里云OSS、腾讯云COS、华为云OBS、百度云BOS
随着数据量爆炸式增长,对象存储已经成为云计算时代主流的非结构化数据存储方式之一。其市场前景广阔,预计未来将继续维持高速增长态势。
1.2 什么是温冷数据?
热冷数据通常符合2:8比例分布,其中80%的数据都是温冷数据,我对他们的定义分别是:
- 温数据:访问时延在100ms以上到秒级,可以在线同步访问的数据
- 冷数据:数据已经归档(比如多份数据合并压缩),存储在需要一定时间(通常分钟或小时级)才能解冻取回的存储系统(包括磁带库、分布式冷存储等离线存储系统),不可在线访问的数据
- 热数据:本地磁盘上的数据访问时延通常在us级,集中式或分布式存储上的数据访问时延通常在ms级左右,可以低时延、大带宽实时访问的数据
为什么会有温冷数据?数据的访问频率是随着存储时间拉长而逐渐降低的,也就是数据通常具有时间尺度上的热点效应,因此大量需要(相对)长期保留的数据都会逐渐变成温冷数据,数据从热转温通常需要1周到1个月,从温转冷需要1个月到半年。
- 在网络流量行为分析系统中,通常将最近一个月的数据作为热数据,其他的作为温数据或冷数据
- 在电商交易订单系统中,通常将最近三个月的订单作为热数据,其他的作为温数据或冷数据
- 在大数据存储服务中,通常将最近一周或一个月的数据作为热数据,其他的作为温数据或冷数据
二、对象存储在温冷数据场景应用突破
2.1 业界应用情况
目前比较流行的数据类开源项目基本都已支持将数据存储到兼容S3的对象存储上,主要有:
- 数据库类:
- MySQL – 通过一些插件可以将冷数据存到S3,如 MyDumper、Spider、LiunxServer
- ClickHouse – 支持使用S3作为冷数据存储
- Elasticsearch – 支持使用S3作为snapshot备份存储
- Cassandra – 支持将S3用作外部存储
- MongoDB Atlas – 提供与S3的集成方案
- 数据处理类:
- Spark – 支持读取和写入S3数据
- Hive – 可以将对象存储服务作为外部表(External Table)来使用,实现对对象存储服务中数据的查询
- HBase – 以将对象存储服务作为后端存储(Backend Storage)来使用,实现对HBase表中数据的持久化
- Kafka – 支持将topic日志备份到S3
- Flink – 可以将checkpoint数据保存到S3
- Pulsar – 可以与S3集成作为tiered storage
- Hadoop – 支持在HDFS之外使用S3作为数据存储
- Presto – 支持使用S3作为存储层
- 监控类:
- Prometheus – 支持使用S3作为长期存储介质
- Grafana – 支持使用S3作为备份存储
- ELK – Filebeat/Logstash支持发送日志到S3
- CI/CD类:
- Jenkins – 支持将作业日志、构建artifacts等存入S3
- Drone – 支持以S3作为离线缓存
- 机器学习框架:
- PyTorch – 支持从S3加载数据
- TensorFlow – 可以直接读取S3上的数据集
- SageMaker – 支持把模型保存到S3
- 代码托管平台:
- GitLab – 可以使用S3兼容的对象存储做备份
- Gitea – 支持把仓库备份到S3
- 容器编排工具:
- Kubernetes – 支持使用S3作为数据卷
- Docker – 可以把镜像上传到S3仓库
- Docker Registry – 支持使用S3作为镜像存储后端
- 文件存储类:
- CurveFS:网易自研开源的共享文件存储服务(兼容POSIX协议、SMB/CIFS、NFS、S3协议,HDFS协议正在开发即将发布),支持将数据存储到S3兼容的对象存储服务,支持存储到自研的CurveBS块存储服务,规划支持单副本kv存储
- JuiceFS:与CurveFS类似,提供开源和商业版,但开源版本有较多的功能缺失,并且在元数据的性能、可靠性、可用性方面也不如CurveFS
- Alluxio:是一个缓存加速框架,不兼容POSIX,元数据性能差,数据可靠性低
- JindoFS(OSS-HDFS):阿里云基于OSS提供的HDFS协议适配插件
- EMRFS:AWS基于S3提供的HDFS协议适配插件
2.2 集团内应用情况
我了解到的部分应用场景(应该不全面):
- AI训练:
- 将经过特殊的格式转换后的训练数据集存储到NOS,通过range读的方式读取其中的部分数据;训练完得到的模型数据也可以存到NOS
- 通过CurveFS将数据集、模型数据直接存储到NOS,不需要格式转换,并且可以通过多级缓存进行访问加速
- ES冷数据:
- 使用ES专用的S3冷数据转存插件讲数据保存到NOS或其他对象存储服务
- 使用CurveFS挂载本地目录,配合ES的冷数据转存规则自动转存到NOS
- gitlab冷数据:杭研gitlab历史代码仓库,通过CurveFS挂载本地目录方式直接存储到NOS,节约存储成本,并且支持在线访问
- 互娱游戏出海场景下的公有云上Hadoop业务(内部知识分享平台文章链接已隐去)
- harbor镜像仓库:https://harbor.cloud.netease.com 的后端存储也是NOS
- 伏羲游戏出海场景下的存算分离架构(内部知识分享平台文章链接已隐去)
CurveFS+NOS正在探索的业务方向:
- IDC内部基于CurveFS+hdfs sdk+NOS替代hdfs
如有类似业务,欢迎与我们联系交流。
三、推动因素分析
3.1 对象存储价格优势显著
阿里云各类型存储的官网列表价对比:
存储类型
|
按量付费单价
|
普通云盘
|
0.3 元/GiB/月
|
容量型文件存储NAS
|
0.35 元/GiB/月
|
标准型本地冗余OSS对象存储
|
0.12 元/GiB/月
|
从内部的NOS对象存储来看,随着存储密度提升以及磁盘价格下降(当前NOS对象存储采用的存储型服务器至少配置36块20TB硬盘,60盘的机型也在逐步落地使用),对象存储成本持续下降,NOS的低频存储价格已经低至 0.03XX 元/GiB/月。而我们维护的文件存储服务,则通常选择10块8TB硬盘的机型来部署,单从存储密度上就已经有了数倍差距。
3.2 存算分离架构驱动
存算分离架构(Compute and Storage Separation Architecture)是一种云计算架构设计模式,其主要思想是将计算资源和存储资源进行分离,实现各自独立弹性扩展。
该架构的主要特征包括:
- 计算资源和存储资源物理上分离,可以独立扩展。
- 计算资源可以是无状态的,数据存储在分布式存储系统中。
- 通过高速网络连接计算资源和存储资源。
- Applications直接面向存储资源开发,计算资源可以根据需求弹性调度。
- 存储资源提供标准数据访问接口,屏蔽实际存储实现的细节。
- 计算资源无状态、存储状态化,易于水平扩展。
- 高容错性,计算资源的故障不会影响存储数据。
存算分离架构的优点包括:
- 计算和存储弹性扩展更加灵活
- 资源利用率更高
- 可根据需求调度计算资源
- 高可用性和容错性
总体来说,存算分离架构适合需要频繁水平扩展和业务波动较大的云计算场景,可以有效提升资源利用率和系统可靠性。
大数据业务场景下的存算分离相关介绍,网上有很多相关案例可以搜索查看。(内部知识分享平台文章链接已隐去)
3.3 业务上云的必然选择
上面给出了各类云存储的成本对比,业务上云之后如果基于成本考量,很容易可以推导出对象存储是最优选择。另外如果要基于云盘部署各类存储服务(比如hdfs),通常至少要2副本才能保证服务可用性,因此价格相比对象存储要高出更多。
另外databricks在2017年就在其博客上给出了5条使用S3替代hdfs的理由,第一条就是成本低:https://www.databricks.com/blog/2017/05/31/top-5-reasons-for-choosing-s3-over-hdfs.html
当然各大公有云厂商,也都顺应时代潮流,推出了各类大数据的对象存储插件,比如阿里云的JindoFS(OSS-HDFS)、AWS的EMRFS,都是为了让大数据业务能把数据直接存储到对象存储。
除了公有云厂商推出的专属插件,也有许多开源软件基于对象存储提供各类文件存储服务,比如前面提到的几个CurveFS、JuiceFS、Alluxio等。
这些开源软件的推出,其中立和开放性更容易获得用户的认可和信赖,也让基于对象存储的各类文件存储生态更加繁荣活跃,性能优异、功能全面并且避免厂商锁定是他们的最大优势。
3.4 其他因素
- 简单易用、接口统一:对象存储提供的Restful API和丰富的SDK,以及协议的高度标准化(通常都兼容S3协议),使得各类上层业务接入对象存储非常容易,适配门槛极低
- 生态工具完善:各种数据相关的知名开源软件(上面列出了部分)都已经提供了完善的对象存储插件,基本做到了开箱即用
- 访问性能提升:随着技术架构的演进和硬件能力的提升,对象存储已经不再是当年的上百ms的时延,随机和吞吐性能都有了大幅提升,而且可以水平扩展,已经可以很好的支持各类数据存储业务(非极端性能敏感型)
四、未来展望
4.1 各类项目提供对象存储插件的弊端
- 各自为战,无法互相兼容,重复造轮子
- 不兼容标准Posix协议,做了比较多的折中处理
例如ElasticSearch、Hadoop在直接使用S3插件的情况下,就存在诸多不便之处,详情可参考网络文章。(这里的公司内部知识分享平台的文章地址隐去了)
4.2 对象存储天然的短板
- 元数据访问效率低,时延高,例如列出所有对象就非常困难
- 数据访问时延高,随机访问性能差,无法支持热数据读写
- 不兼容Posix协议,需要应用开发专门的适配插件才能使用对象存储
4.3 解决方案
CurveFS产生的背景,其中一个重要的目标就是解决的对象存储的短板,相比传统的分布式文件系统,基于对象存储的CurveFS具备如下几个特色:
- 支持标准的Posix协议,支持共享文件存储(类似NFS的一写多读模式和多节点数据写入的一致性能力),业务可无缝从本地文件系统迁移到CurveFS
- 针对AI训练/机器学习场景、elasticsearch/hdfs等大数据场景做了专门优化,支持内存缓存、本地磁盘缓存、分布式内存缓存(基于memcached或其他kv存储)等多级缓存,可对文件读写进行缓存加速并保持数据写入可靠性,支持数据预热到缓存中加速读取过程,大数据场景下使用curvefs+对象存储相比本地副本存储方案具备更高的性价比优势以及易用性优势
- 基于multi-raft支持元数据的分区存储,具备无限扩展性,性能可随节点数线性扩展,不存在性能热点问题
- 支持将文件数据存储到对象存储和CurveBS块存储上(适用于shuffle盘的单副本存储引擎也在规划中),可以做到冷热数据分层存储和生命周期管理(roadmap),数据容量可无限扩展
更多架构细节可以参考这些文章:
五、总结
简单总结两点:
- 对象存储性价比优势明显,在温冷数据存储场景的份额将持续扩大
- 企业应充分利用对象存储降本增效,配合CurveFS等存储中间件提升存算分离的便利性,调优存储架构
六、参考资料
- NOS这10年暨上线10周年纪念:http://aspirer.wang/?p=1716
- 聊聊大数据下的存算分离:(内部知识分享平台文章链接已隐去)
- Curve开源项目代码仓库:https://github.com/opencurve/curve
- 使用Curve云上部署Hadoop,轻松节约50%存储成本:(内部知识分享平台文章链接已隐去)
- 游戏出海大数据架构升级研究与实践:(内部知识分享平台文章链接已隐去)
- CurveFS在Elasticsearch冷热数据存储中的应用:(内部知识分享平台文章链接已隐去)
- https://www.databricks.com/blog/2017/05/31/top-5-reasons-for-choosing-s3-over-hdfs.html
- Curve Roadmap 2023:https://github.com/opencurve/curve/issues/2207
- CurveFS架构设计介绍:https://github.com/opencurve/curve/blob/master/docs/cn/curvefs_architecture.md
- New Bing AI、Claude AI