S3 协议兼容的分布式对象存储系统 Yig | 软件推介

2018 年 5 月 27 日 开源中国


Apache 2.0

Google Go

跨平台


Yet another Index Gateway


Yig 是 S3 协议兼容的分布式对象存储系统。它脱胎于开源软件 ceph ,在多年的商业化运维中, 针对运维中出现的问题和功能上的新需求,重新实现了一遍 radosgw 用于解决以下问题:


  1. 单 bucket 下面文件数目的限制

  2. 大幅度提高小文件的存储能力

  3. bucket 下面文件过多时,list 操作延迟变高

  4. 后台 ceph 集群在做 recovery 或者 backfill 时极大影响系统性能

  5. 提高大文件上传并发效率


Yig 设计


设计一个新的存储系统解决以上问题,无非这些思路


  1. 隔离后台 rebalance 影响

  2. 根据 haystack 的论文,默认的 filestore 或者 bludestore ,并不特别适合小文件存储,需要新的存储引擎

  3. radosgw 对 librados 提高的 omap 和 cls 用得太重,我们如何简化架构,让代码更容易懂,也更不容易出错。

  4. 更加统一的 cache 层,提高读性能


架构如图所见:




从整体看,分为2层:


  1. S3 API layer,负责 S3 API 的解析,处理。所有元数据存储在 hbase 中,元数据包括 bucket 的信息,object 的元数据(如ACL,contenttype),multipart 的切片信息,权限管理,BLOB Storage 的权值和调度。所以的元数据都 cache 在统一的 cache 层。可以看到所有元数据都存储在 hbase 中,并且有统一的 cache ,相比于 radosgw 大大提高的对元数据操作的可控性,也提高了元数据查询的速度。

  2. BLOB Storage 层,可以并行的存在多个 Ceph Cluster 。只使用 rados_read/rados_write 的 API 。如果其中一个 ceph cluster 正在做 rebalance ,可以把它上面所有写请求调度到其他 ceph 集群,减少写的压力,让 rebalance 迅速完成。从用户角度看,所有的写入并没有影响,只是到这个正在 rebalance 的 ceph cluster 上的读请求会慢一点儿。大规模扩容也非常容易,比如存在这种情况,初期上线了5台服务器做存储,发现容量增加很快,希望加到50台,但是在原 ceph 集群上一下添加45台新服务器,rebalance 的压力太大。在 yig 的环境中,只要新建一个45台的 ceph 集群,接入 yig 的环境就行,可以快速无缝的添加容量。


在 ceph 层提升性能


使用 libradosstriper API 提升大文件读取写入性能


对于大文件,相比与 radosgw 每次使用 512K 的 buf ,用 rados_write 的 API 写入 ceph 集群,yig 使用动态的 buf ,根据用户上传的速度的大小调整 buf 在 (512K~1M) 之间。 并且使用 rados striping 的 API 提高写入的并发程度。让更多的 OSD 参与到大文件的写入,提高并发程度。 拆分方法如图:



使用 kvstore 提升小文件存储性能


针对小文件,直接使用 kvstore 存储,底层使用 rocksdb ,这个方案相比与 bluestore 或者 filestore 更轻。性能更好。但是要注意2点:


  1. 默认的 kvstore 并没有打开布隆过滤器,需要在 ceph 的配置文件中配置打开,否则读性能会很差

  2. 在 Ceph 的 replicatePG 层,每次写 object 之前,都会尝试读取原 Object ,然后在写入。这个对于 rbd 这种大文件的应用影响不大,但是对于小文件写入就非常糟糕。 所以我们在 rados 的请求中加入的一个新的 FLAG: LIBRADOS_OP_FLAG_FADVISE_NEWOBJ,在 replicatedPG 中会检查是否有这个 FLAG ,如果有,就不会尝试读取不存在的小文件。通过这个 patch ,可以极大的提升小文件的写入性能和降低 cpu 的利用率。


测试


功能测试


因为采用了标准的 S3 接口,可以使用标准的工具。


  1. 采用标准的 python boto 库测试 yig

  2. 复用 ceph 社区的 s3-test 项目测试 yig


性能测试


  1. ceph cluster 性能测试原始 ceph 性能,使用 rados bench 测试4k小文件的随机读写。

  2. 使用 wrk 配合 lua 脚本测试 S3 API

  3. 使用 ycsb 测试 S3 API 性能


部分性能测试数据: 测试平台: 后台3台物理机,ceph 采用普通硬盘,hbase 采用普通硬盘,3副本方案 测试场景:写入1K小文件,然后测试在 90% read 和 10% write 的情况下(类似有于线上环境)的性能数据 测试结果:


load 数据阶段性能: 可以看到即使是在3副本的情况下,S3 写入 iops 仍然很高,可以注意到没割一段时间,iops 的的性能会下降,这是由于 rocksdb 后台在做 compaction 。




模拟线上环境性能:


由于是读多写少的环境,iops 相比于纯写入有很大提升,也不容易发生 compact ,所以 iops 能维持在较高的水平。延迟情况是90%以上的请求延迟小于1s,平均延迟就更小了。


项目详情及源码地址获取:




参与「程序员专属信用卡调研

让我们打造最适合程序员的信用卡!


美食、购物、航旅…优惠折扣等着你哦~


扫码参与投票




推荐阅读

看似简单的 Windows 记事本,其实维护起来并不简单

联想回应“反对预装国产系统”消息:谣言,一直支持国产

锤子又为开源捐款!480 万门票收入捐给 OpenSSL 与 OpenBSD

吃透这套架构演化图,从零搭建 Web 网站也不难!

谷歌终于开放 ".app" 顶级域名注册

点击“阅读原文”查看更多精彩内容

登录查看更多
1

相关内容

Python分布式计算,171页pdf,Distributed Computing with Python
专知会员服务
105+阅读 · 2020年5月3日
【北京大学】面向5G的命名数据网络物联网研究综述
专知会员服务
35+阅读 · 2020年4月26日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
63+阅读 · 2020年3月26日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
65+阅读 · 2020年3月9日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
83+阅读 · 2019年11月25日
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
可能是讲分布式系统最到位的一篇文章
InfoQ
8+阅读 · 2018年11月19日
跨框架深度学习可视化框架 VisualDL | 软件推介
开源中国
3+阅读 · 2018年4月26日
基于 Storm 的实时数据处理方案
开源中国
4+阅读 · 2018年3月15日
10个深度学习软件的安装指南(附代码)
数据派THU
17+阅读 · 2017年11月18日
Spark的误解-不仅Spark是内存计算,Hadoop也是内存计算
Image Segmentation Using Deep Learning: A Survey
Arxiv
43+阅读 · 2020年1月15日
Arxiv
34+阅读 · 2019年11月7日
VIP会员
相关VIP内容
Python分布式计算,171页pdf,Distributed Computing with Python
专知会员服务
105+阅读 · 2020年5月3日
【北京大学】面向5G的命名数据网络物联网研究综述
专知会员服务
35+阅读 · 2020年4月26日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
63+阅读 · 2020年3月26日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
65+阅读 · 2020年3月9日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
83+阅读 · 2019年11月25日
相关资讯
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
可能是讲分布式系统最到位的一篇文章
InfoQ
8+阅读 · 2018年11月19日
跨框架深度学习可视化框架 VisualDL | 软件推介
开源中国
3+阅读 · 2018年4月26日
基于 Storm 的实时数据处理方案
开源中国
4+阅读 · 2018年3月15日
10个深度学习软件的安装指南(附代码)
数据派THU
17+阅读 · 2017年11月18日
Spark的误解-不仅Spark是内存计算,Hadoop也是内存计算
Top
微信扫码咨询专知VIP会员