开发者中心 > 专栏 > 内容详情
分享
  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

云原生在京东 | 一文带你深入了解最适合云原生的分布式存储架构—— ChubaoFS

  • 京东智联云开发者
  • 2020-07-31

    在上篇文章云原生在京东丨揭秘五大云原生项目在京东的落地实践中,我们为大家揭秘了KubernetesHarborVitessPrometheusHelm五大云原生项目在京东的实践之路。京东目前基本实现了“All in Containers”,在云原生的应用上保持着几个最:全球最大规模的 Docker 集群、Kubernetes 集群最复杂的 Vitess 集群之一全球容器化最彻底的互联网企业之一。

     

    同时,京东不仅是最彻底的云原生应用者,还致力于为云原生技术开源贡献价值,将内部孵化并经过实践验证的融合分布式文件系统与对象存储服务的 ChubaoFS 捐献给 CNCF,将分布式数据库中间件 Apache ShardingSphere 开源项目捐赠给 Apache 基金会,并成为从 Apache 孵化器毕业的顶级项目,持续在云原生领域推动技术创新,推动云原生计算可持续发展。


    本篇文章就将重点为大家深入介绍ChubaoFS开源项目的历史发展以及在京东的应用实践,帮助你在大会前熟悉这款最适合云原生的分布式存储开源项目——ChubaoFS。

     

    ChubaoFS 是什么?

     

    image.png 

     

    在正式开始前,我们先来了解下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 最适合支持云原生工作负载的。


     

    image.png 

     

    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

     

     

    活动预告

     

    2020年7月30日-8月1日2020 Cloud Native + Open Source Virtual Summit China 中国峰会将首次以线上形式召开。作为 CNCF 云原生基金会白金会员,继去年参与 KubeCon 后,今年京东智联云将继续在大会中亮相,不仅带来多场精彩演讲,还将通过京东智联云云上展厅,近一步展示京东云原生技术动态与前沿技术。

     

    image.png 

     

    京东架构师张墨飞将在大会上为大家带来《深入了解ChubaoFS 存储引擎 精彩分享,介绍融合分布式文件系统与对象存储服务的分布式存储ChubaoFS,与您深入探讨ChubaoFS的架构、开发和细节,并讨论诸如复制、故障转移等话题,敬请关注!

     

     

     


    共0条评论