CURVE是网易自主设计开发的高性能、高可用、高可靠的分布式存储系统,具有非常好的可扩展性,基于这个存储基础,我们可以构建适合不同应用场景的存储系统,比如块存储、对象存储、云原生数据库等等。目前我们已经实现了基于CURVE的高性能块存储系统,支持快照克隆和恢复、QEMU虚拟机和物理机NBD设备,在网易作为高性能云盘使用。
软件介绍
Curve的设计开发始终围绕三个理念:一是顺应当前存储硬件设施的发展趋势,软硬件结合,打造顶级存储产品;第二,坚持“简单能比复杂难”,在认识问题的本质时,选择最简单的方案解决问题;三是拥抱开源,在充分调研的前提下使用优秀的开源项目组件,避免做轮子。
目前,网易已经实现了基于curve的高性能块存储系统,支持快照克隆和恢复、QEMU虚拟机和物理机NBD设备,在网易作为高性能云盘使用。
软件功能
1.高性能
高性能是curve的一大特点,也是项目组打造curve项目的初衷。本级RPC曲线采用brpc具有高性能、低延迟和开源性;在一致性层面,我们选择了基于quorum机制和开源的braft。从协议层面来说,在延迟方面,quorum机制天生优于多副本强一致性。在curve的实现上,优化了braft snapshot的实现,在状态机的实现上,采用chunkfilepool(初始化集群时,格式化指定比例的空间作为chunk使用),使底层写放大为0;此外,curve还对chunk上的地址空间进行了更细致的哈希,以达到读写分离、减少IO碰撞等效果,从而进一步提升IO性能。
2.高可用性
高可用性是curve的另一个主要特性。MDS、ChunkServer和SnapShotCloneServer都支持多实例部署,一些实例异常不影响整个集群的可用性。
2.1、MDS
MDS是无状态的,建议至少部署两个实例。通过Etcd选主。Etcd选择了多个MDS实例。当单个实例失败时,它可以在几秒钟内切换到另一个实例。对于失败实例上正在处理的请求,客户端和SnapShotCloneServer都会重试,以达到不影响集群可用性的效果。
2.2、快照克隆服务器
SnapShotCloneServer类似于MDS,但它也通过Etcd选择主机。不同的是,它通过负载均衡向外界提供服务。过期期间失败的请求重试次数是等幂的,不影响任务的正确性和集群的可用性。
2.3、ChunkServer
ChunkServer是一个集群,通过Raft协议维护数据一致性,通过MDS进行负载均衡。当单个节点出现故障时,它将影响存储在该节点上的所有副本集。对于副本集上的Leader节点,服务将被中断,等待重选;对于副本集上的从节点,服务不会受到影响。当Chunkserver节点出现故障并且在一段时间内无法恢复时,MDS会将该节点上的数据迁移到其他节点。