curve是網易開源的高性能、高可用、高可靠分布式存儲係統,具有非常良好的擴展性。基於該存儲底座可以打造適用於不同應用場景的存儲係統,如塊存儲、對象存儲、雲原生數據庫等。curve的設計開發始終圍繞三個理念:一是順應當前存儲硬件設施發展趨勢,做到軟硬件結合打造頂級的存儲產品;二是秉持“Simple Can be harder than complex”,了解問題本質情況下選擇最簡單的方案解決問題;三是擁抱開源,在充分調研的前提下使用優秀的開源項目組件,避免造輪子。
當前網易基於curve已經實現了高性能塊存儲係統,支持快照克隆和恢複 ,支持QEMU虛擬機和物理機NBD設備兩種掛載方式, 在網易內部作為高性能雲盤使用。
1、高性能
高性能是curve的一大特點,也是項目團隊創建curve項目的初衷。RPC層麵curve采用了高性能和低延遲並且已開源的brpc;在一致性層麵選擇了基於quorum機製並且開源的braft,從協議層麵來說quorum機製在延遲方麵天生優於多副本強一致的方式。實現上curve對braft快照的實現進行了優化,在狀態機的實現上采用chunkfilepool的方式(初始化集群的時候格式化出指定比例的空間用作chunk)使得底層的寫入放大為0;此外curve還在chunk上進行更細力度的地址空間hash以達到讀寫分離、減小IO碰撞等的效果,從而進一步提升IO性能。
2、高可用
高可用是curve的另一大特點。MDS、ChunkServer以及SnapShotCloneServer都支持多實例部署,部分實例異常不影響整個集群的可用性。
2.1、MDS
MDS是無狀態的,推薦至少部署兩個實例。通過Etcd進行選主。多個MDS實例通過Etcd進行選主,當單個實例失效時,可以秒級切換到另外一個實例。失效實例上正在處理的請求,Client和SnapShotCloneServer都會對其進行重試,以達到不影響集群可用性的效果。
2.2、SnapShotCloneServer
SnapShotCloneServer與MDS類似, 也是通過Etcd進行選主,不同的是,它通過負載均衡對外提供服務。失效期間的請求失敗重試都是冪等的,不影響任務的正確性以及集群的可用性。
2.3、ChunkServer
ChunkServer是一個集群,通過Raft協議保持數據一致性,並通過MDS做負載均衡。單個節點失效時,會影響到這個節點上存儲的所有Copyset。對於Copyset上的Leader節點,會中斷服務,等待重新選舉;對於Copyset上的follower節點,服務不會受影響。當某個Chunkserver節點失效且在一段時間內無法恢複,MDS會將其上的數據遷移到其他節點上。