我覺得,要想正確理解一門技術(shù),一定要理解它產(chǎn)生的背景,解決的問題。
背景一:世界需要更多的計算能力
信息技術(shù)時代的基石是建立在“計算”之上的。以搜索引擎為例,早期的搜索引擎是人工分類索引的,類似黃頁,但是隨著網(wǎng)站數(shù)量的增多,人工索引的工作量變得巨大,而且更新時效低得難以忍受了。后來的一波搜索引擎都采用了由計算機算法自動索引,查找相關(guān)文檔,并排序展示的方式。這種方式就導(dǎo)致了對計算能力的巨大需求,類似的趨勢出現(xiàn)在多種技術(shù)領(lǐng)域,即世界需要更多的計算能力。
背景二:單挑不如群毆,好漢敵不過人多
Intel其實已經(jīng)很努力了,從19xx年人家就按摩爾定律狂奔,CPU的計算能力每一年半翻一倍,但是相比于業(yè)界的計算需求,不夠快!但沒關(guān)系,一個CPU不夠快,那我搞10000個,甚至100萬個,反正CPU是錢能買到的東西,錢能解決的問題,就不是問題。大概從90年代之后,超級計算機就是拿CPU搭積木玩兒了。
背景三:錢不是問題,問題是沒錢
但互聯(lián)網(wǎng)公司并不太用超算的體系結(jié)構(gòu)(基于MPI的傳統(tǒng)HPC架構(gòu)),主要原因有三:一是系統(tǒng)投入大,超算架構(gòu)面向的應(yīng)用多是計算密集,文件IO少的情況,但互聯(lián)網(wǎng)公司文件IO多,這樣會導(dǎo)致在存儲系統(tǒng)和網(wǎng)絡(luò)上要投入高成本才能有好性能;二是超算一般都是灰常牛逼的服務(wù)器加盤陣,硬件穩(wěn)定性本來就好,所以容錯機制上不太重視,基本上是用checkpoint技術(shù)來搞錯誤恢復(fù)。牛逼服務(wù)器和盤陣,都是白花花的銀子呀。三是編程模型難用。我寫過MPI的程序,基本上腦子里要設(shè)想成千上萬個進程的運行狀態(tài)以及它們之間的通信過程,還經(jīng)常有全局的同步,想寫好也不容易。所以這個坑Google是不會跳,too smart to jump in.
正題一:一個好漢三個幫,一個Hadoop三個樁
Hadoop就是poor man's 天河二號。不要把Hadoop看成一個整體,拆開里邊看看就清楚地知道它干了什么了。Hadoop包括以下三個核心組件:
HDFS,這東西替換了盤陣,使得你有地方存數(shù)據(jù)了。相當(dāng)于你的電腦有了C盤,D盤等。
YARN,這東西是一個集群管理和調(diào)度軟件。相當(dāng)于你的電腦裝上了Windows,現(xiàn)在可以跑各種應(yīng)用程序了。YARN負責(zé)讓你的程序跑起來,萬一掛了還能自動幫你重啟進程。
MapReduce,定義了集群上數(shù)據(jù)處理的基本操作。相當(dāng)于你的電腦上裝了Visual Studio,現(xiàn)在可以開發(fā)自己的軟件了。
明白了么,你自己買一坨爛電腦,把Hadoop往上一裝,相當(dāng)于去電腦城給你的新電腦裝了個正版Windows + Visual Studio,回來就可以開心地擼代碼了,代碼自動就能安全高效地跑在那一坨爛電腦之上,跑得還挺快,是不是很棒?
正題二:光能用是不夠的,好用才是我所需
客戶是不會滿足的,Hadoop很牛逼了,但是程序員的惡夢是不會離開的:“什么?需求又改了?!!” 如果說MPI是分布式計算的匯編語言,那么Hadoop的MapReduce相當(dāng)于C,把所有計算都拆成Map和Reduce兩個過程真是:too young, too simple, sometimes naive。Spark相當(dāng)于分布式計算里的Java,萬物都是RDD,在RDD之上你可以方便地進行更高層的操作。所以Spark和Hadoop不是一個層次的東西,大家一看去年的新聞?wù)fSpark排序速度是Hadoop的100倍,所以Hadoop要死,Spark要火,我只能說“呵呵”。但我個人覺得Spark還是蠻有前途的,易用性是大家所愛呀……Spark和Hadoop雖有重合,但Spark是不可能也沒打算替換整個Hadoop的。
偏題一:XaaS是什么東西?是生意
aaS = "as a Service",翻譯過來就是:你出錢,我服務(wù)你。
SaaS 賣軟件的。你什么也不用干,只要出錢,我直接給你能用的軟件。比如Gmail:給你郵件軟件直接用, http:// github.com :給你版本控制軟件直接用,Office 365:給你辦公軟件用,Photoshop Express:給你修圖軟件用。《黑客與畫家》講了互聯(lián)網(wǎng)軟件的優(yōu)點,有興趣可以自己瞅。
PaaS 賣平臺的。你自己寫你的軟件,但是運行你軟件的平臺由我來提供,保證你的軟件運行。流行過的SAE什么之類的,你拿(世界上最好的編程語言)PHP來寫個網(wǎng)站,上傳給我,我來給你把網(wǎng)站跑起來。你專心寫(抄)你的軟件,其它的事兒交給我。
IaaS 賣虛擬機的。我給你一坨虛擬機用,保證它們正常跑,能連網(wǎng)。虛擬機你怎么用隨便你。代表作AWS, Azure,OpenStack等。這東西優(yōu)勢明顯:比PaaS安全,因為虛擬機操作系統(tǒng)完全由你控制,別人很難改你的代碼或數(shù)據(jù),PaaS就難說了;比自己搞機器省心,不用擔(dān)心虛擬機掉盤壞主板(關(guān)鍵數(shù)據(jù)和服務(wù)也一樣要備份!小心我大藍翔的挖掘機!)很有前途!
偏題二:什么是云計算?
我知道你這個土壕會渴,我想給你挖水井,通水管,安水表,收水費來掙錢糊口。怕你不給我開門,所以我穿上制服,說我是自來水公司(哦,不,我是搞云計算的)。十年后,可能每個公司甚至個人都會擁有相當(dāng)于十年前google的計算能力,但是這幫新人對計算的理解可能連30年前的google都比不上(對,30年前google不存在,正如這幫新人腦中的分布式計算知識……),但是這幫新人都是壕呀!所以我們這些懂分布式計算的diao絲們,想辦法搞得利用這些牛逼的計算能力就像請客吃飯一樣簡單,來騙點兒錢,是為云計算。
總結(jié):其實云計算很牛逼
如果無法操控,汽油不過是一把火。只有包上汽車這個外殼,它才能把你送到你想去的地方。計算資源就是未來的汽油,我們搞云計算不是忽悠你們,搞云計算是為了讓你們指哪去哪,解決你們手頭上需要算一算的問題。上面說的一切東西,都是為了使計算觸手可得,而且管夠。要想汽車跑得快,并不是說多加燃料就行,云計算就是要解決如何充分利用原始計算資源,減少自身無謂損耗的問題。現(xiàn)在并不是一個已經(jīng)被完全解決的問題。
知乎原文鏈接:http://www.zhihu.com/question/32326748/answer/57393279?utm_source=tuicool&utm_medium=referral