(一)
NAS是傳統(tǒng)存儲行業(yè)重要的組成部分,基于SMB、CIFS提供支持POSIX協(xié)議的文件共享服務,是所有傳統(tǒng)存儲廠商都提供的產(chǎn)品,甚至是必須提供的產(chǎn)品。但似乎所有的云服務似乎都對這種共享存儲的形式置若罔聞,AWS推出滯后,Azure沒有,GAE沒有,阿里云當然也沒有。OpenStack有一個Manila,但是半死不活。是不是NAS在云時代,已經(jīng)死了?
NAS on Cloud究竟何去何從,我們分析分析看。
如果想知道一個事情為什么是現(xiàn)在這個樣子,最好的辦法就是看看他的歷史。
云計算毫無疑問是來自于互聯(lián)網(wǎng)領域,或者限制的更窄一點:電商領域。全球的云計算做的最大最好的AWS,其實就是個電商。當年Amazon電子商業(yè)越做越大,對于IT系統(tǒng)的要求也越來越高,最終IT部門不負眾望,搞出了一套足夠靠譜的IT基礎設施,這就是現(xiàn)在AWS的前身了。
而后,Amazon做了一個英明神武的決定,將這套系統(tǒng)開放出去,商業(yè)化,收錢,所以就有了AWS。當時AWS主要還是供Amazon自家使用,最多是Amazon周邊的廠商使用。然后,各個行業(yè)的IT系統(tǒng)越來越大,要求越來越高,越做越復雜,大家發(fā)現(xiàn)原有的IT方式已經(jīng)扛不住了,急切的需要一種新的IT運作方式。放眼望去,似乎AWS這種方式相當靠譜,于是先是眼前一亮,然后一擁而上,紛紛效仿,各種類AWS的系統(tǒng)如雨后春筍,粉墨登場。
玩家多了,就形成了一個領域,一個行業(yè),這個領域,這個行業(yè),就叫云計算。
反觀國內,阿里也想走這條路,但是看似相同,實則大相徑庭。阿里云最開始并不是從阿里的電商系統(tǒng)(也就是淘寶和天貓)演化或者開放而來的,而是完全按照云計算的想法從頭開發(fā)的。阿里內部淘寶系和阿里云系是什么關系,誰也說不清楚,而淘寶、天貓用不用阿里云,都值得研究一番。所以阿里云和AWS的路看似相同,實際差別卻很大。當然,未來整個大阿里是不是能夠完全由阿里云提供基礎設施服務,現(xiàn)在還不好說,不過從當前的趨勢看,大阿里確實是這么設想的,這樣也未尚不是一條曲線救國的好路,至少不需要背負電商業(yè)務的包袱。
扯了這么多,似乎扯遠了,但是搞明白了歷史之后,在看現(xiàn)今就已經(jīng)很清楚了。回到我們的問題上,為什么云上沒有NAS?很簡單,因為電商不需要啊。
我們看看電商都需要什么:
運行Web服務:虛擬機(計算+塊存儲)
保存用戶數(shù)據(jù):數(shù)據(jù)庫
保存靜態(tài)內容:對象存儲
分發(fā)靜態(tài)內容:CDN
用戶行為分析:數(shù)據(jù)分析
這些也就是云計算目前提供的功能。
再看看電商或者大的互聯(lián)網(wǎng)公司對這些特性有什么要求:
橫向擴展:支持業(yè)務平滑增長
快速高效:提高響應速度,避免錯過商機
穩(wěn)定運行:業(yè)務中斷意味著經(jīng)濟損失
異地容災:數(shù)據(jù)是最重要的資源,不容有失
以上這些也恰恰是云計算所關注的特性。
所以說,云計算蘊含著互聯(lián)網(wǎng)甚至是電子商務的基因。
而現(xiàn)在,看一下我們的主角:NAS。不好意思,電子商務用不到,互聯(lián)網(wǎng)也不關心,所以,云計算中沒有NAS。
(二)
我們回顧了云計算誕生的歷史,也就搞明白了為什么目前所有的云計算提供商都沒有提供NAS服務,但是這個問題實際上還可以繼續(xù)的追問下去:為什么互聯(lián)網(wǎng)或者電商都都不使用文件系統(tǒng)?如果當初互聯(lián)網(wǎng)的玩家們使用的都是文件系統(tǒng)構建他們的IT服務,那么毫無疑問,今天的云計算將是圍繞NAS構建的。可是事實卻是文件系統(tǒng)這個歷史悠久的存儲形式成為了互聯(lián)網(wǎng)時代的棄兒,這是為什么?回答這個問題還要從文件系統(tǒng)本身找原因,最關鍵的因素是:文件系統(tǒng)本身就不具有互聯(lián)網(wǎng)、或者說互聯(lián)的基因。今天我們從技術的角度分析分析,文件系統(tǒng)為什么沒有互聯(lián)的基因。
文件系統(tǒng)的組織形式
文件系統(tǒng)的信息組織方式是大家最熟悉不過的了:樹形結構。這種結構實際上非常符合人類的思維方式(僅次于圖狀結構),生活和生產(chǎn)中太多太多的東西可以用樹形的方式恰當?shù)拿枋龊徒M織,這大概也是最初文件系統(tǒng)這么設計的原因了。
文件系統(tǒng)的結構雖然非常符合使用習慣,為數(shù)據(jù)的整理提供了很多的方便,但是卻給系統(tǒng)實現(xiàn)上帶來了很多的挑戰(zhàn)。比如POSIX規(guī)定文件系統(tǒng)要實現(xiàn)文件的移動(move/mv)操作,由于源地址和目標地址可能是樹上的任意兩個節(jié)點,而這兩個節(jié)點之間可能是父子關系、兄弟關系、同父關系等各種關系,因此在設計和實現(xiàn)上就引入了很多復雜性。而且POSIX還定義了軟連接和硬鏈接這兩種有用但是進一步增加了設計復雜程度的語義,導致現(xiàn)有的文件系統(tǒng)元數(shù)據(jù)的管理大多涉及到引用計數(shù)機制和同步鎖機制。
到了云時代,文件系統(tǒng)這種方式對于一個云系統(tǒng)來說,似乎又過于復雜了。想象一下,如果成千上萬人向一個文件系統(tǒng)中塞東西,是一件多么混亂而可怕地事情,信息幾乎不可能以有效、統(tǒng)一的方式組織起來,更不用說快速檢索了。在網(wǎng)絡還不是很普及、帶寬有限、費用高昂的十幾年前,如果是那時候上大學的人,一定用過校園的FTP服務來共享文件,相信對這種場景多少有些感觸。實際上,現(xiàn)在很多個人的電腦硬盤的文件夾已經(jīng)和亂麻一樣了,更不用說成成千上萬人共用一個文件系統(tǒng)。
問題的根源在于樹形結構這種組織形式在提供了足夠的靈活性和復雜的功能的同時,對使用者限制太少,在超大規(guī)模的數(shù)據(jù)的組織過程中,弊大于利。
文件系統(tǒng)的共享方式
在計算機可以聯(lián)網(wǎng)之后,共享信息就成了剛需,除了專門設計用來共享信息的HTTP等各類協(xié)議外,直接將整個文件系統(tǒng)共享出去的協(xié)議也不少見,比如我們常用的FTP、SMB、CIFS等。這些協(xié)議的用法大同小異,基本上都是為了將一個本地的文件系統(tǒng)通過網(wǎng)絡共享給很多人同時使用。
人多了,麻煩就來了。首當其沖的就是權限問題。如何合理的為多用戶系統(tǒng)設計權限一直是沒有徹底解決的大問題,原因也很簡單:需求太復雜,而且例外也太多。
雖然問題很困難,但是解決方案還是要有的,于是ACL應運而生,嘗試在文件系統(tǒng)共享服務中實現(xiàn)基于用戶的權限管理系統(tǒng)。不得不說,ACL還是解決了大部分問題的,但僅限于系統(tǒng)規(guī)模較小、用戶不多的情況。對于云計算這種超大規(guī)模的系統(tǒng),ACL似乎就無能為力了。
文件系統(tǒng)的可擴展性
我們都知道,在云計算時代,任何不能Sacle-Out的方案無疑都是行不通的。因此,針對大規(guī)模文件系統(tǒng)應用,出現(xiàn)了分布式文件系統(tǒng)。 這種分布式架構的文件系統(tǒng)確實可以解決現(xiàn)在的很多問題, 例如通過三方分離架構,實現(xiàn)了數(shù)據(jù)流和元數(shù)據(jù)流的分離,能夠做到吞吐量的Scale-Out。 但是,文件系統(tǒng)的組織形式最終限制了它的可擴展性,本質上很難實現(xiàn)徹底的Scale-Out。
在前面“組織形式”一節(jié)中,我們已經(jīng)分析過:由于文件系統(tǒng)是樹形結構,所以工程實現(xiàn)中基本無可避免的使用了引用計數(shù)和鎖機制或這類的機制,而且鎖的顆粒度在很多時候可能是從根節(jié)點到當前操作路勁的所有節(jié)點,這對于可擴展性的來說,幾乎是致命的。 最初的文件系統(tǒng)都是基于本地磁盤構建的,所有文件系統(tǒng)的操作都是在一臺機器上進行,實現(xiàn)引用計數(shù)和同步鎖還是可以接受的。因為所有的計算和IO都發(fā)生在一臺機器上,由內存完成數(shù)據(jù)的交換,性能是可以保證的。但是在分布式系統(tǒng)中,要想實現(xiàn)引用計數(shù)和同步鎖的話,就讓人頭皮發(fā)麻。因為這通常意味著分布式鎖和分布式事務,這兩種東西對于性能來說,簡直就是殺手般的存在,更別說還需要考慮容災和故障恢復的問題……我相信任何分布式系統(tǒng)的設計人員遇到這樣棘手的東西,都難免要嘆一口氣。
文件系統(tǒng)的共享方式也通常成為擴展的擴展的瓶頸,因為SMB、CIFS、FTP這樣的協(xié)議通常需要Proxy或者GateWay的存在,而該模塊也可能成為瓶頸,必須再引入LVS等負載集群技術解決這一問題,進一步加劇了系統(tǒng)的復雜性。
歸根結底,由于文件系統(tǒng)采用了樹形的數(shù)據(jù)組織形式,而這種形式難以很好實現(xiàn)橫向拆分,導致文件系統(tǒng)無法具備良好的橫向擴展性。在數(shù)據(jù)洶涌而來的互聯(lián)網(wǎng)、云計算、大數(shù)據(jù)時代,沒有什么是比這更加致命的問題了。
難道文件系統(tǒng)真的大勢已去?
(三)
我們從技術的角度分析了NAS或者說文件系統(tǒng)這種存儲形式為什么不適合云計算。但是進入了云計算時代,是不是就不會再有NAS生存的空間了?未必。實際上我們上面已經(jīng)分析過了,決定一個系統(tǒng)有什么或者沒有什么,主要取決于需求。那么,云計算時代有沒有NAS的需求,答案是肯定的。
云計算需要NAS
云計算最終的目的或者出發(fā)點,是將計算、存儲、網(wǎng)絡都變成服務,變成類似水、電一樣的基礎設施,而不僅僅是為互聯(lián)網(wǎng)和電商提供服務。實際上,現(xiàn)在大部分企業(yè)在規(guī)劃其IT設施時,已經(jīng)將云計算的方式作為重要的選型之一。
傳統(tǒng)企業(yè)對于云計算的需求和互聯(lián)網(wǎng)企業(yè)有很大不同的,除了云計算目前已經(jīng)具備的各類優(yōu)勢,例如可擴展,低成本,易維護等,還有一項最核心最基本、甚至大家都不會特意提到的需求:能夠滿足他們的業(yè)務。
傳統(tǒng)企業(yè)存在大量系統(tǒng)支持他們的業(yè)務,在遷移到云計算的過程中,重建所有的業(yè)務系統(tǒng)顯然是不現(xiàn)實的。所以傳統(tǒng)企業(yè)愿意遷移到云計算環(huán)境的一個前提是云計算的環(huán)境 必須能夠滿足他們對業(yè)務的支持,也就是能夠良好的運行現(xiàn)有的業(yè)務支持系統(tǒng)。
不幸的是,這些支持系統(tǒng),很大一部采用NAS構建,對于文件系統(tǒng)有很強的依賴性,而這些系統(tǒng)已經(jīng)足夠老舊,老舊到只有人用,沒有人維護。要運行這些系統(tǒng),就必須提供NAS。
云計算中的NAS
實際上,云計算已經(jīng)在考慮NAS了,就像前面提到的,作為開源云計算龍頭老大OpenStack,已經(jīng)包含了用于提供文件系統(tǒng)共享存儲的Manlia了,只是這個項目目前還不夠成熟,也沒有見到應用案例。
Manlia實際是一個PaaS服務,它組合使用了OpenStack的Nova、Cinder、Neutron等多項服務,通過虛擬機+掛載卷+NFS/CIFS共享的方式為租戶提供文件系統(tǒng)的共享掛載點。同一個網(wǎng)絡下的其它虛擬機可以通過該掛載點共享同一個文件系統(tǒng)。
Manlia的這種實現(xiàn)方式,實際上是一種半Sacle-Out的方案,即對于單個命名空間,其容量受限于Cinder提供單個共享卷的容量,而性能則受限于單個共享卷的性能、掛載該共享卷的虛擬的性能以及該虛機所在網(wǎng)絡的性能。一言以蔽之,即單個命名空間是無法Sacle-Out,只能 Scale-Up的。但是Manlia提供了一種方便的途徑可以快速的創(chuàng)建一個全新的文件系統(tǒng)共享,也就是說,用戶可以在單個文件系統(tǒng)不足以支撐其應用的時候,快速的創(chuàng)建新的文件系統(tǒng)。這在一定程度上解決了用戶的問題。
但是要想徹底解決云計算中使用NAS的問題,大概還要從文件系統(tǒng)本身做起。云計算中的NAS要符合云計算的定義和特征,要可擴展、高性能、高可靠,要支持超大規(guī)模的應用,要滿足多租戶、數(shù)據(jù)隔離、跨地域訪問等各種要求,還要做到安全、好用、容易運維,委實是一項不容易的事情。目前似乎還沒有一個文件系統(tǒng)是真正為云計算量身打造,滿足以上這些所有的要求。
Ceph,或許有機會呢。