架構(gòu)細(xì)節(jié)剖析:Ceph 和 Swift該如何選擇?
Ceph和Swift,哪種更好?這個(gè)問(wèn)題上大家爭(zhēng)論不休,本文從兩者的架構(gòu)角度分析兩種方式各自的優(yōu)缺點(diǎn),并且給出如何選擇的建議。
當(dāng)工程師們討論存儲(chǔ),談到Ceph和Swift時(shí),他們通常都一致認(rèn)為其中一個(gè)非常棒,另外一個(gè)卻很糟糕。但問(wèn)題時(shí),他們?cè)谀膫€(gè)好哪個(gè)不好上卻意見(jiàn)不一。
經(jīng)常會(huì)有客戶問(wèn)我相同的問(wèn)題,“我們聽(tīng)說(shuō)Ceph可以代替其他所有類型的存儲(chǔ)。為什么不能用它做所有事情呢?”
我會(huì)在Vancouver的OpenStack Summit大會(huì)上從架構(gòu)角度探討Ceph和Swift,分享在這兩者之間到底該如何抉擇,也會(huì)為兩種平臺(tái)的解決方案都給出建議。本文,我們一起看看他們的架構(gòu)細(xì)節(jié)和不同之處。
深入淺出
Swift在OpenStack開始發(fā)展之初就出現(xiàn)了,大概在五年之前。它是OpenStack的核心項(xiàng)目,并且被無(wú)數(shù)次證明強(qiáng)大且穩(wěn)定。
問(wèn)題是,Swift的設(shè)計(jì)導(dǎo)致在傳輸速度和延遲時(shí)間上都不強(qiáng)。造成這個(gè)問(wèn)題的主要原因是Swift集群進(jìn)出的流量都要通過(guò)代理服務(wù)器。
另一個(gè)原因,也是很多人認(rèn)為Ceph更好的原因,是Swift不支持塊存儲(chǔ)和文件存儲(chǔ)。
最后,當(dāng)對(duì)象副本不一定同時(shí)更新時(shí)延遲的問(wèn)題便會(huì)浮現(xiàn),這會(huì)導(dǎo)致請(qǐng)求者在第一次更新某個(gè)對(duì)象到新版本之后,讀取到的卻仍然是舊版本。這種行為被稱為最終一致性。
另一方面,Ceph也有自己的問(wèn)題,特別是在云環(huán)境上。它的多地域支持,雖然經(jīng)常被當(dāng)做優(yōu)勢(shì)來(lái)宣傳,但實(shí)際上還是master-slave模型。因?yàn)橹荒軓膍aster到slave進(jìn)行復(fù)制,所以在多于兩個(gè)地域時(shí),基礎(chǔ)架構(gòu)上的負(fù)載分布會(huì)很不均衡。
Ceph的兩地域設(shè)計(jì)也不太實(shí)際,因?yàn)橹恢С謒aster上的寫入,而不阻隔slave上的寫入。這樣的配置最嚴(yán)重時(shí)可能導(dǎo)致整個(gè)集群的崩潰。
Ceph的另一個(gè)短板是安全性。云計(jì)算節(jié)點(diǎn)上的RADOS客戶端直接與RADOS服務(wù)器交互所使用的網(wǎng)絡(luò)與Ceph用于未加密復(fù)制流量的網(wǎng)絡(luò)相同。如果某個(gè)Ceph客戶端節(jié)點(diǎn)被入侵,攻擊者便能得到存儲(chǔ)網(wǎng)絡(luò)的所有流量。
針對(duì)Ceph的弱點(diǎn),你可能會(huì)問(wèn),為什么不直接構(gòu)建一個(gè)Ceph集群,擴(kuò)展到兩個(gè)地域呢?一個(gè)原因是Ceph只能同步寫入,并且要求寫入節(jié)點(diǎn)達(dá)到quorum數(shù)才能成功返回。
了解這些問(wèn)題之后,我們來(lái)假定有一個(gè)集群跨越兩個(gè)地域,相隔數(shù)千英里,100ms延時(shí),非常慢的網(wǎng)絡(luò)連接。假定將兩個(gè)副本寫入到本地地域,另外兩個(gè)寫入到遠(yuǎn)程地域。這時(shí)四次副本的quorum數(shù)是三次,這就意味著這次寫請(qǐng)求在至少完成一次遠(yuǎn)程拷貝前都不會(huì)返回。也就意味著即使是很小量的一次寫入也會(huì)延遲0.2秒,而大批量寫入則會(huì)因?yàn)橥掏铝肯拗茋?yán)重受阻。
另一方面,Swift,在與之相同的兩地域架構(gòu)中,會(huì)先在本地寫入,然后基于一致性設(shè)計(jì)在一段時(shí)間里復(fù)制到遠(yuǎn)程地域。Swift也要求寫入 quorum,但是可以在集群上配置write_affinity設(shè)置強(qiáng)制限定寫入quorum在本地地域,因此本地寫入完成后就會(huì)成功返回。
那么我們?cè)贑eph和Swift之間如何抉擇呢?
如何選擇?
如果部署只在單一地域,沒(méi)有計(jì)劃擴(kuò)展到多個(gè)地域的話,Ceph會(huì)是很好的選擇。Mirantis OpenStack底層可以選擇Glance或者Cinder。但是,如果要考慮大規(guī)模部署的話,Swift比Glance更適合。它的多地域能力會(huì)勝過(guò) Ceph的速度和強(qiáng)大的一致性模型。
很多情況下,速度并不是決定因素,安全性則是更大的問(wèn)題,這時(shí),Swift更適合,它封閉的復(fù)制網(wǎng)絡(luò)更為安全。另一方面,如果云基礎(chǔ)架構(gòu)本身已經(jīng)很安全,存儲(chǔ)安全性優(yōu)先級(jí)便會(huì)降低,這時(shí)可能Ceph更適合。
與其比來(lái)比去,不如在同一個(gè)云基礎(chǔ)架構(gòu)里同時(shí)擁有這兩種選擇。比如,可以使用Ceph作為本地高性能存儲(chǔ),而Swift則作為多地域Glance后臺(tái),這時(shí)復(fù)制很重要而速度并不關(guān)鍵。但是,擁有這兩種選擇的解決方案花費(fèi)必然更多,因此可能還是需要二選一。
對(duì)于很多客戶,我的個(gè)人建議是,Mirantis提供了架構(gòu)設(shè)計(jì)評(píng)估來(lái)幫助收集所有需求和參數(shù),提供適合特定使用場(chǎng)景和業(yè)務(wù)驅(qū)動(dòng)的解決方案,會(huì)幫助全面評(píng)估所有業(yè)務(wù),技術(shù)和運(yùn)營(yíng)因素。然后你可以權(quán)衡這些因素,以及這兩種選擇的優(yōu)缺點(diǎn)。誰(shuí)知道呢?你的收獲很可能超過(guò)預(yù)期。






















