在上篇文章《云原生在京东丨揭秘五大云原生项目在京东的落地实践》中,我们为大家揭秘了Kubernetes、Harbor、Vitess、Prometheus、Helm五大云原生项目在京东的实践之路。京东目前基本实现了“All in Containers”,在云原生的应用上保持着几个最:全球最大规模的 Docker 集群、Kubernetes 集群、最复杂的 Vitess 集群之一、全球容器化最彻底的互联网企业之一。
同时,京东不仅是最彻底的云原生应用者,还致力于为云原生技术开源贡献价值,将内部孵化并经过实践验证的融合分布式文件系统与对象存储服务的 ChubaoFS 捐献给 CNCF,将分布式数据库中间件 Apache ShardingSphere 开源项目捐赠给 Apache 基金会,并成为从 Apache 孵化器毕业的顶级项目,持续在云原生领域推动技术创新,推动云原生计算可持续发展。
本篇文章就将重点为大家深入介绍ChubaoFS开源项目的历史发展以及在京东的应用实践,帮助你在大会前熟悉这款最适合云原生的分布式存储开源项目——ChubaoFS。
ChubaoFS 是什么?
在正式开始前,我们先来了解下ChubaoFS是什么?
ChubaoFS是京东自研的云原生存储平台,提供分布式文件系统与对象存储服务,为云原生应用提供计算与存储分离的持久化存储方案。它为运行在Kubernetes容器平台之上的云原生应用提供了多租户、POSIX兼容、可挂载的文件系统,同时,ChubaoFS还通过流行的S3协议来提供对象存储功能。
ChubaoFS内部高效实现了数据与元数据弹性扩展、顺序和随机读写模式、强一致复制算法、以及安全认证等核心特性。通过支持CSI(Container Storage Interface)与Helm,ChubaoFS可以被轻松部署并与Kubernetes紧密配合。
ChubaoFS在京东的缘起与开源
ChubaoFS最早于2017年在京东内部创建,设计的最初目的是为京东的大型容器集群提供持久化存储的解决方案,同时还可以用作业务端的通用云存储。经过长期内部孵化与实践验证,京东将ChubaoFS开源捐献给CNCF,并被CNCF Storage SIG工作组列入Cloud Native Landscape项目。
ChubaoFS的设计有着独到的特点,名为《CFS: A Distributed File System for Large Scale Container Platforms》的论文,被国际顶级数据库会议ACM SIGMOD 2019收录。评审给出了非常高的评价:“CFS design and implementation are interesting and well described.” “Several design decisions made this system better than Ceph for their use case.”
ChubaoFS——最适合支持云原生的分布式存储架构
得益于其几乎无限的可伸缩性和分布在多个节点工作内存中的健壮元数据子系统,元数据节点也可以实现弹性可扩展,在所有分布式文件系统中,ChubaoFS 是最适合支持云原生工作负载的。
ChubaoFS由元数据子系统,数据子系统和资源管理节点组成,可以通过客户端访问不同文件系统实例,卷。
元数据子系统由元数据节点组成,每个节点可以管理一组元数据分片。
数据子系统有数据节点组成,每个节点管理一组数据分片。
在ChubaoFS中,卷是一个逻辑概念,由多个元数据和数据分片组成。 从客户端的角度看,卷可以被看作是可被容器访问的文件系统实例。 一个卷可以在多个容器中挂载,使得文件可以被不同客户端同时访问。 一个ChubaoFS集群可以有上百个卷,大小从几GB至几TB不等。
概括来说,资源管理节点定期获取元数据和数据子系统信息,客户端则定期从资源管理器拉取元数据和数据分片信息,并且进行缓存。通常来讲,文件操作由客户端发起,直接与数据和元数据节点通信,无需资源管理节点介入。
ChubaoFS在设计上还针对可扩展性、多租户、一致性和兼容性上做出了以下尝试:
1.可扩展元数据管理
元数据操作有时候会成为文件系统的性能瓶颈。在我们的平台中,由于可能会有成百上千的客户端同时访问文件,这个问题变得非常突出。单独节点存储元数据很容易成为性能瓶颈。所以,ChubaoFS中使用了分布式元数据子系统,以便提供高可扩展性。 元数据子系统可以认为是内存元数据存储。我们使用了两个B-Tree,inodeTree和dentryTree,来加快索引速度。每个元数据分片根据inode id范围进行划分。
2.多租户
为了降低存储成本,很多应用和服务都使用了共享的存储基础设施。不同负载交织在一起,文件大小可以从几KB至几百GB,读写模型从顺序到随机。一个成熟的文件系统应该可以高性能地服务于这些负载。ChubaoFS的存储引擎同时提供了对大文件和小文件的随机/顺序读写的支持。
3.强一致性的复制协议
出于性能考虑,ChubaoFS根据文件写入方式的不同采用不同的复制协议来保障副本之间的一致性。
4.POSIX兼容
ChubaoFS兼容POSIX接口,可以使得上层应用的开发变得简单,并且大大降低新用户的学习难度。同时,ChubaoFS在实现时放松了对POSIX语义的一致性要求来兼顾文件和元文件操作的性能。
5. 兼容S3对象存储接口:
ChubaoFS提供S3兼容的API,用于访问通过POSIX兼容的API存储的统一数据副本,实现对象存储服务。
6.高性能:
对于高并发场景的大小文件性能均做了优化,尤其是针对小文件场景做了专门的优化,从而可以支撑更多用户场景,比如AI训练平台图片,视频文件的存储,以及图片系统等。
ChubaoFS应用场景广泛,支撑2000 多个业务稳定运行
京东作为中国最大的电商平台之一,业务场景复杂多样,ChubaoFS已经稳定服务于京东 2000 多个应用以及在线业务,业务场景不仅限于海量数据的备份存储,还包括数据库备份,MySQL底层存储(历史表),人工智能平台模型训练的后端存储,点击流业务Nginx日志存储成本结算,Elasticsearch底层存储,Hbase后端存储等。
同时,为了合理配置物理硬件资源,京东对于存储与计算分离的需求比较迫切。ChubaoFS作为云原生的分布式文件系统,与容器集群良好的兼容性,以及可靠的性能和稳定性,为这一目标的实现提供了坚实的技术保障。
下面我们就来看一下ChubaoFS在京东内部的两个典型应用:
Harbor+ChubaoFS构建高可用镜像仓库
2016年初,京东的技术架构部开启了全面的容器化建设道路,同时也是在这一年我们选择了Kubernetes作为计算资源编排的方案。那个时候,Kubernetes 才刚刚开源差不多一年时间,CNCF也才成立一年,京东可以算是先驱者之一。最初京东使用原生镜像仓库来作为镜像中央存储库, 但是在使用过程中发现它存在一些问题。因此从2016京东就转为Harbor的忠实用户。Harbor 是一个开源的镜像仓库项目,操作简单、运行稳定,为京东节省了大约 60% 的镜像中央存储库维护时间。
随着业务量的增长,存储镜像的数据会变得越来越庞大,京东需要一个稳定、可靠、高性能的存储方案。京东选择ChubaoFS作为 Harbor 后端存储方案, Harbor+ChubaoFS可以构建一个高可用的镜像中心架构,多个 Harbor 实例可以同时使用 ChubaoFS 共享容器镜像,它给 Harbor 提供了稳定的,可弹性扩展的,高性能的分布式存储服务。
京东Elasticsearch使用ChubaoFS实现计算存储分离
Elasticsearch 是一个开源的分布式、可扩展、实时的搜索与数据分析引擎,它可以快速存储、搜索和分析大量数据。由于较高的性能和较低的使用门槛,京东内部有很多场景都在使用 Elasticsearch。随着业务的不断增长,集群数量及消耗的服务器资源成比例上升,京东 Elasticsearch 实例上升为上万个,维护的集群快速增长为上千个,集群规模从几个到几十个不等。
但是整体资源的利用率却相对较低,磁盘使用率仅为 28% 左右,日常平均读写 IO 在 10~20M/ 秒(日志分区 IO 在 60-100M / 秒)。造成资源浪费的原因是集群规模普遍较小,为保证突发情况下,读写请求对 IO 的要求,一般会为集群分配较为富余的资源,物理机分配的容器也会控制在一定量级。 我们做个假设,如果大量的服务器 IO 都可以共享,那么某个集群突发请求对 IO 的影响其实可以忽略的。
基于这种假设以及对提高磁盘使用率的迫切需要,京东引入了ChubaoFS 作为存储,将 Elasticsearch 作为无状态的实例进行存储计算分离。 得益于 ChubaoFS 是为大规模容器集群挂载而设计的通用文件系统,几乎是零成本接入,只需在物理机上安装相应的客户端,就可以将 ChubaoFS 当成本地文件系统来用。经测试,在集成 ChubaoFS 之后, Elasticsearch 使用 ChubaoFS 甚至在某些场景下要优于本地磁盘。
参考资料:
ChubaoFS 网站:https://www.chubao.io/
ChubaoFS 设计相关论文,收录在 ACM SIGMOD 2019
CFS: A Distributed File System for Large Scale Container Platforms.
https://dl.acm.org/citation.cfm?doid=3299869.3314046
文档:
https://chubaofs.readthedocs.io/zh_CN/latElasticsearcht/
https://chubaofs.readthedocs.io/en/latElasticsearcht/
ChubaoFS 社区交流:
Mailinglist: chubaofs-maintainers@groups.io
Slack: chubaofs.slack.com