一、背景介绍
作为网易集团的基础软件团队,网易数帆在存储层面研发和维护了面向高性能需求的Curve开源存储、面向对象存储场景的NOS以及面向大数据场景的HDFS等多套系统,其中NOS(NetEase Object Storage)作为一款对象存储产品,旨在为用户提供简便高效的互联网数据存取服务。从2012年上线至今,NOS已有近8年的历史,当前数据总量接近百PB规模。早期的NOS底层存储引擎使用的是网易数帆自研的SDFS和NEFS,虽然它们都提供了极高的稳定性和足够的性能,但在数据保护方式上均采用了三副本的冗余策略,这使得存储成本随着数据规模的不断扩大而快速上涨。因此,NOS团队近几年来开始实践另一种数据保护策略,即Erasure Coding(纠删码,简称为EC)。鉴于网易数帆块存储团队已经积累了多年的Ceph实践和运维经验,而且Ceph本身也是开源社区最火热的存储系统之一,我们最终选择了使用其作为底层EC存储引擎。不过,考虑到NOS已有成熟的网关和用户/桶管理等系统,我们并没有使用Ceph提供的对象存储RGW,而是选择了直接对接Rados接口。
二、架构调整
显然,对于一个庞大的存储系统而言,切换底层引擎不是一蹴而就的事情,在很长一段时间内会存在多个引擎同时运作的情况。为此我们专门开发了一套LifeCycle组件,将较低频的数据逐步迁移到EC池,整个系统的基本架构大致如下:
其中的DDB是网易自研的高性能分布式数据库,主要用于存储NOS的各项元数据信息。在它的帮助下,我们可以方便地做到小对象合并,管控数据存储位置等(在下一章节详述);同时它也让Rados成为一个比较纯粹的数据存储引擎。
EC策略虽然可以节省空间成本,但是在性能尤其是时延方面与副本有较大差距,因此我们并不打算完全替换掉原来的副本池,而是采用类似分层存储的设计,使得:
Comments