CURVE 是網易開源的高性能、高可用、高可靠分布式存儲系統,具有非常良好的擴展性。基于該存儲底座可以打造適用于不同應用場景的存儲系統,如塊存儲、對象存儲、云原生數據庫等。
- 授權協議: Apache 2.0
- 開發語言: C/C++
- 開發廠商:網易
- 軟件類型:分布式應用/網絡
CURVE 的設計開發始終圍繞三個理念:
一是順應當前存儲硬件設施發展趨勢,做到軟硬件結合打造頂級的存儲產品;
二是秉持 “Simple Can be harder than complex”,了解問題本質情況下選擇最簡單的方案解決問題;
三是擁抱開源,在充分調研的前提下使用優秀的開源項目組件,避免造輪子。
當前網易基于 CURVE 已經實現了高性能塊存儲系統,支持快照克隆和恢復 ,支持 QEMU 虛擬機和物理機 NBD 設備兩種掛載方式, 在網易內部作為高性能云盤使用。

特性
- 高性能
高性能是 CURVE 的一大特點,也是項目團隊創建 CURVE 項目的初衷。RPC 層面 CURVE 采用了高性能和低延遲并且已開源的 brpc;在一致性層面選擇了基于 quorum 機制并且開源的 braft,從協議層面來說 quorum 機制在延遲方面天生優于多副本強一致的方式。
實現上 CURVE 對 braft 快照的實現進行了優化,在狀態機的實現上采用 chunkfilepool 的方式 ( 初始化集群的時候格式化出指定比例的空間用作 chunk ) 使得底層的寫入放大為 0;
此外CURVE 還在 chunk 上進行更細力度的地址空間 hash 以達到讀寫分離、減小 IO 碰撞等的效果,從而進一步提升 IO 性能。
網易公布了 Curve 和 Ceph L 版本的測試數據對比,在單卷的場景下,核心的 4K 隨機讀/寫的IOPS 性能,Curve 分別是 Ceph 的 1.84 倍和 1.58 倍,同時延遲相比 Ceph 分別降低 48.39%和 37.50%。

2. 高可用
高可用是 CURVE 的另一大特點。MDS、ChunkServer 以及 SnapShotCloneServer 都支持多實例部署,部分實例異常不影響整個集群的可用性。
- MDS
MDS 是無狀態的,推薦至少部署兩個實例。通過 Etcd 進行選主。多個 MDS 實例通過 Etcd 進行選主,當單個實例失效時,可以秒級切換到另外一個實例。失效實例上正在處理的請求,Client 和 SnapShotCloneServer 都會對其進行重試,以達到不影響集群可用性的效果。
- SnapShotCloneServer
SnapShotCloneServer 與 MDS 類似, 也是通過 Etcd 進行選主,不同的是,它通過負載均衡對外提供服務。失效期間的請求失敗重試都是冪等的,不影響任務的正確性以及集群的可用性。
- ChunkServer
ChunkServer 是一個集群,通過 Raft 協議保持數據一致性,并通過 MDS 做負載均衡。單個節點失效時,會影響到這個節點上存儲的所有 Copyset。
對于 Copyset 上的 Leader 節點,會中斷服務,等待重新選舉;對于Copyset 上的 follower 節點,服務不會受影響。當某個 Chunkserver 節點失效且在一段時間內無法恢復,MDS 會將其上的數據遷移到其他節點上。
更多信息:分布式存儲系統 Curve