2015年,滴滴为解决小文件和图片的存储,成立 GIFT 小对象存储项目。伴随着业务不断成长,我们面临的挑战也越来越多,经历多次非结构化存储架构演进,具体如下图所示:
随着公司不断发展,滴滴的业务有两个发展的趋势:云原生技术战略和新业务涌现,都给存储系统带来了新的挑战。
在云原生战略中,业务的极致弹性是提高资源利用率降低成本的一个目标。保障极致弹性的基础是容器的轻量化,而要实现容器的轻量化就必须实现存算分离。但目前弹性云的容器都是使用本地盘来存储业务日志或数据,这样天然和宿主强绑定,无法实现存算分离,且宿主机的磁盘利用率只有30%左右,容器漂移后数据还会出现易丢失现象。如果是业务日志数据,还需要通过采集方式存储到 HDFS 中,即:本地盘一份,HDFS 一份,双份存储,成本高。
同时,滴滴的自动驾驶,机器学习,国际化,金融等业务的不断发展,涌现了很多边端上传大量数据、服务端训练的场景,而边端和服务端对存储的需求又有一定的差异。例如:机器学习的训练场景主要是通过 S3 协议上传数据到滴滴 GIFT 对象存储系统中,通过类似 S3FS 方式挂载文件系统进行训练,这种模式缺点是处理流程长,延迟高,性能无法满足业务需求,且非完整的文件系统,对于 apend 或 rename 操作非常重。
解决思路
为了满足云原生技术战略和新业务的涌现需求,弹性云 K8S 通过 Posix 协议挂载网络盘写入网约车日志或数据,并通过 S3 或 HDFS 协议并发查询日志,解决了数据因飘移造成丢失、采集链路长(也就是通过 S3 或 HDFS 协议直接读取 Posix 写入日志数据)等问题,同时管理弹性云磁盘又能提供磁盘利用率。而机器学习的训练场景可以通过 S3 协议上传数据,Posix 协议去挂载训练,也可以解决流程长,延迟高问题。
我们需要提供一套支持多协议融合的云原生分布式存储系统,内部称之为:OrangeFS 云原生数据湖存储系统,整个系统核心技术主要包括:
多协议融合:采用统一文件组织结构,在这种结构基础上实现 Posix、S3、HDFS 三种不同存储协议融合。
云原生:基于 CSI 插件可以快速地在 Kubernetes 上使用 OrangeFS。
多云存储引擎:为了保证云上云下架构一致,应用于不同的场景,云下可以使用滴滴自研的 DFS 数据存储服务,线上可以使用 AWS S3、阿里云 OSS、腾讯云 COS、谷歌云等等。
多租户:为了降低业务部署成本,我们支持多租户管理,提供细粒度的租户隔离策略。
核心技术
1. 文件组织结构
为了减少数据流动成本,我们参考并学习行业通用的多协议融合模式,主要有2种,第一种:在对象存储系统基础上构建文件系统,比较常见 S3FS。第二种:采用统一文件组织结构,在这种结构基础上实现 Posix、S3、HDFS 三种不同存储协议,例如:JuiceFS、CubeFS。
基于AWS S3对象存储实现的 S3FS,可以把 S3 bucket 挂载到系统中以 POSIX 方式访问,但无法提供原子的 rename和文件的随机写操作。例如:在 ofs-test 桶中有“/a/a1/a2/1.txt…”等文件,需要 rename 根目录下的a/文件夹为x/,具体如下图所示&