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