对于分布式存储产品,朋友们第一反应总是:基于Ceph的吗?

Ceph、HDFS、Glusterfs、Lustre、BeeGFS都是优秀的分布式文件系统,是我们学习的榜样。但碧海存储系统是坚持近十年、一次自主研发的尝试。碧海存储系统具有良好的扩展能力,业界领先的优异性能,在重负载时系统运行稳定,IO性能波动小。

1.系统架构与可扩展性

碧海存储采用无中心架构,基于分布式NoSQL数据库方式管理名字空间,目录访问具有更好的性能,并支持搜索功能;基于一致性hash算法实现数据定位,彻底消除传统存储中元数据服务器所带来的可扩展性瓶颈;系统从3节点起步,可轻松扩展至上千个节点。

碧海存储支持块、文件、对象多种存储方式。

碧海存储系统属于软件定义存储,可部署在标准的x86、ARM、飞腾、申威、龙芯等服务器上。

2.数据保护

碧海存储系统无单点故障,实现了磁盘级、节点级、机架级的容错。支持多副本、纠删码、RAID,以及RAID+多副本等多种容错方式,可针对不同的数据安全和存储成本需求选择不同的容错方式。多副本之间使用强一致性协议。

碧海存储系统以自适应速率方式修复受损数据:既可避免修复流量影响业务负载,又可以在系统空闲时全速率修复,降低数据丢失风险。

1.jpg

3.性能优化技术

分布式存储系统的IO路径很长,从客户端的消息编码、发送,到数据存储服务器端的消息接收、解码,从磁盘读写数据,再发回应答。每个环节处理不好都会拖慢整体的性能。只有处理好每一个细节,才能取得优异的性能。

在所有影响性能的因素中,并发性是第一重要的因素。

目前计算机系统中应用程序级别实现并发的方法,主要有进程池、线程池、基于非阻塞IO的事件驱动等方式。学术界和工业界对这些方法的优劣存在长期的争论,新编程语言的出现也使得这一选择更加难以分辨。实践是检验真理的标准。碧海存储系统在开发过程中,尝试比较了所有的方法,最终选择“进程池+事件驱动”的并发模型,每个CPU启动一个IO进程,每个进程内部使用事件驱动模型。这样既能够发挥多核CPU的性能,又消除了多线程并发方式导致的调度开销和锁开销,为优异性能奠定了基础,程序的容错性也更好。当然,事件驱动模式使得程序的开发和调试更加困难,这是其代价。

 

其它面向性能优化的措施有:

● 通信协议设计大量使用复合过程,减少IO交互次数;

●使用二进制编解码方式;

●使用类似于Slab、复杂度为O(1)的缓存管理算法;

●基于零拷贝方式在不同模块间传递数据,避免数据拷贝;

●在处理大数据量时,使用高效的算法和数据结构。

4.流控与IO公平性

分布式系统中,流控可能是最具挑战性的问题之一。既要高吞吐量、低延迟,又要避免网络拥塞和存储系统IO Hang,这也是TCP协议发展几十年,还需要不断研究和发展的原因。

碧海存储系统并没有设计新的流控算法和机制,而是充分利用了TCP的流控机制,实现了端到端的流控。在具体实现中,流控问题转换为缓冲区的分配问题。在收到读请求时,立即为其预留缓存区,而不是在执行读操作时因缺乏缓冲区而返回失败;写请求也采取同样策略;只有当可用缓冲区大小超过设定阈值时才接收新的读写请求,否则不再接收新的请求。这样就可以从全局避免类似于“receive-livelock”问题。

在分布式存储系统中,多副本的推送会形成环状的依赖关系,相互等待,导致性能剧烈波动。碧海存储系统采用数据写入磁盘后才发送确认的方式,抑制发送方过快发送数据。

碧海存储系统实现了针对TCP连接的IO公平性调度。在多个业务共享存储系统时,运行更稳定。在VDI场景中,能够实现多个虚机同时显示登录界面的效果。

 

5.易用性

碧海存储系统的易用性,源自对用户体验的极致追求,每个菜单和交互过程,都力求符合用户的直觉。用户无需编写任何配置文件,部署实施简单快速,20节点1PB容量的存储系统可在15分钟内创建完成;Web界面简洁,运维管理轻松直观,集群、节点、磁盘实时性能状态一目了然。长达一年的历史性能记录,为业务负载分析、故障排错提供强有力的支持。

6.性能测试

2.png

3.png

 

在使用固态盘和native客户端时,碧海存储系统的随机读IOPS达到ceph的3倍,随机写性能达到Ceph的4倍;读写延迟分别为Ceph的1/3和1/4(对比版本为:Ceph 12.2.5)。碧海存储系统的性能也超越了优异的同类产品Scaleio。

7.客户体验

目前碧海存储已经广泛应用于虚拟化与私有云、海量文件存储、高性能计算等业务领域,客户覆盖金融、教育、医疗、政府等行业。其优异性能、稳定可靠、易于使用等优点得到了客户的肯定和好评。