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