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