凡分布式系統,都不可避免地要應對一致性要求。
但在分布式系統中,很少有產品啟用緩存。因為除了需要采用NVRAM/NVDIMM來做掉電保護之外,最重要的是解決分布式緩存的一個關鍵問題——Cache Coherency(緩存一致性)。
➤ 這個問題,戴爾易安信Isilon解決了。
一騎絕塵的橫向擴展NAS.....

戴爾易安信的Isilon是一個分布式集群NAS系統,支持主流的網絡文件系統、對象、REST、SWIFT、HDFS等訪問協議。Isilon系統分為三個子型號:F、H、A。
Isilon F800 All-Flash▼

Isilon還擁有一系列的數據管理軟件功能,包括:INSIGHTIQ、SMARTPOOLS、SMARTQUOTAS、SMARTCONNECT、SNAPSHOTIQ、CLOUDPOOLS、SMARTDEDUPE、SYNCIQ、SMARTLOCK、ASPERA。
Isilon的核心是OneFS集群文件系統。作為一個分布式、對稱式、并行集群文件系統,OneFS將傳統存儲體系結構的文件系統、卷管理器和數據保護三層合并為一個統一的軟件層,從而構建了一個跨集群中所有節點的單一智能文件系統。

分布式緩存的挑戰.....
OneFS屬于對稱式集群,這意味著任何一個節點均可以承載I/O訪問,由此也帶來一個問題,比如節點1和節點2同時緩存了數據A,Host1向節點1發起寫請求更改了數據A為B,那么此時節點2上的數據A就必須立即作廢。
我們不妨先看看PowerMax這個分布式集群SAN系統是如何處理緩存一致性問題的。戴爾易安信的PowerMax采用Hash方式來確定某個數據塊唯一的緩存節點,這樣就不存在緩存一致性的問題,但代價是需要跨節點產生數據流量,而不僅僅是控制流量,因為此時數據需要在多個節點中傳來傳去。
比如數據塊A只能緩存在節點1,如果節點2需要訪問數據塊A,則先計算Hash得出數據塊A所在的節點,然后向該節點發送請求讓其傳遞數據塊A的部分或全部到節點2,再將數據發送給Host端,同時節點2將數據塊A從其本地緩沖區刪除,不能作為下次訪問使用,因為節點2根本不知道數據塊A在其他節點上是否已經發生了變化。
Isilon如何實現緩存一致性.....
這時大家自然想到,如果數據塊A的變化情況能讓集群中所有節點都知道,廣播出去,不就可以保證數據一致性了么?
沒錯,多核心多CPU其實也是一個分布式集群,它就是這么管理緩存的,借助于核間、片間高帶寬低時延網絡,能夠讓分布式緩存的訪存時延降低到一個可接受的范圍內。緩存一致性協議規定了多個緩存之間在什么時候傳送什么消息、以什么方式問答等。比如Intel使用MESIF協議,AMD使用MOESI協議。
Isilon的OneFS采用了與CPU類似的緩存一致性協議實現了緩存一致性,而開發這套協議需要相當的技術水平。
Isilon采用Infiniband互聯,以Sockets Direct Protocol (SDP) over InfiniBand (IB)實現節點間同步,采用MESI協議實現緩存一致性。
MESI表示每個緩存行的4種狀態:
M – Modified: The data exists only in local cache, and has been changed from the value in shared cache. Modified data is typically referred to as dirty.
E – Exclusive: The data exists only in local cache, but matches what is in shared cache. This data is often referred to as clean.
S – Shared: The data in local cache may also be in other local caches in the cluster.
I – Invalid: A lock (exclusive or shared) has been lost on the data
每個節點均記錄本地緩存行的狀態,決定是否要發出廣播。比如訪問一個E狀態的緩存行,就無需通知其他節點,因為E表示該緩存行只存在于本地,其他節點沒有緩存。
不得不說,Isilon通過軟件把CPU集群所采用的緩存一致性協議搬移到了集群節點間,這種正宗的分布式緩存實現,在市面上的分布式集群系統中是不多見的。所謂品質決定市場表現,Isilon之所以能成為全球存儲市場上的橫向擴展架構典范,與其獨特的開創性特色是分不開的。