一、云計(jì)算最初是實(shí)現(xiàn)資源管理的靈活性
我們首先來(lái)說(shuō)云計(jì)算,云計(jì)算最初的目標(biāo)是對(duì)資源的管理,管理的主要是計(jì)算資源,網(wǎng)絡(luò)資源,存儲(chǔ)資源三個(gè)方面。
1.1 管數(shù)據(jù)中心就像配電腦
什么叫計(jì)算,網(wǎng)絡(luò),存儲(chǔ)資源呢?就說(shuō)你要買(mǎi)臺(tái)筆記本電腦吧,你是不是要關(guān)心這臺(tái)電腦什么樣的CPU啊?多大的內(nèi)存啊?這兩個(gè)我們稱為計(jì)算資源。
這臺(tái)電腦要能上網(wǎng)吧,需要有個(gè)網(wǎng)口可以插網(wǎng)線,或者有無(wú)線網(wǎng)卡可以連接我們家的路由器,您家也需要到運(yùn)營(yíng)商比如聯(lián)通,移動(dòng),電信開(kāi)通一個(gè)網(wǎng)絡(luò),比如100M的帶寬,然后會(huì)有師傅弄一根網(wǎng)線到您家來(lái),師傅可能會(huì)幫您將您的路由器和他們公司的網(wǎng)絡(luò)連接配置好,這樣您家的所有的電腦,手機(jī),平板就都可以通過(guò)您的路由器上網(wǎng)了。這就是網(wǎng)絡(luò)。
您可能還會(huì)問(wèn)硬盤(pán)多大啊?原來(lái)硬盤(pán)都很小,10G之類(lèi)的,后來(lái)500G,1T,2T的硬盤(pán)也不新鮮了。(1T是1024G),這就是存儲(chǔ)。
對(duì)于一臺(tái)電腦是這個(gè)樣子的,對(duì)于一個(gè)數(shù)據(jù)中心也是同樣的。想象你有一個(gè)非常非常大的機(jī)房,里面堆了很多的服務(wù)器,這些服務(wù)器也是有CPU,內(nèi)存,硬盤(pán)的,也是通過(guò)類(lèi)似路由器的設(shè)備上網(wǎng)的。這個(gè)時(shí)候的一個(gè)問(wèn)題就是,運(yùn)營(yíng)數(shù)據(jù)中心的人是怎么把這些設(shè)備統(tǒng)一的管理起來(lái)的呢?
1.2 靈活就是想啥時(shí)要都有,想要多少都行
管理的目標(biāo)就是要達(dá)到兩個(gè)方面的靈活性。哪兩個(gè)方面呢?比如有個(gè)人需要一臺(tái)很小很小的電腦,只有一個(gè)CPU,1G內(nèi)存,10G的硬盤(pán),一兆的帶寬,你能給他嗎?像這種這么小規(guī)格的電腦,現(xiàn)在隨便一個(gè)筆記本電腦都比這個(gè)配置強(qiáng)了,家里隨便拉一個(gè)寬帶都要100M。然而如果去一個(gè)云計(jì)算的平臺(tái)上,他要想要這個(gè)資源的時(shí)候,只要一點(diǎn)就有了。
所以說(shuō)它就能達(dá)到兩個(gè)方面靈活性。
第一個(gè)方面就是想什么時(shí)候要就什么時(shí)候要,比如需要的時(shí)候一點(diǎn)就出來(lái)了,這個(gè)叫做時(shí)間靈活性。
第二個(gè)方面就是想要多少呢就有多少,比如需要一個(gè)很小很小的電腦,可以滿足,比如需要一個(gè)特別大的空間,以云盤(pán)為例,似乎云盤(pán)給每個(gè)人分配的空間動(dòng)不動(dòng)就就很大很大,隨時(shí)上傳隨時(shí)有空間,永遠(yuǎn)用不完,這個(gè)叫做空間靈活性。
空間靈活性和時(shí)間靈活性,也即我們常說(shuō)的云計(jì)算的彈性。
為了解決這個(gè)彈性的問(wèn)題,經(jīng)歷了漫長(zhǎng)時(shí)間的發(fā)展。
1.3 物理設(shè)備不靈活
首先第一個(gè)階段就是物理機(jī),或者說(shuō)物理設(shè)備時(shí)期。這個(gè)時(shí)期相當(dāng)于客戶需要一臺(tái)電腦,我們就買(mǎi)一臺(tái)放在數(shù)據(jù)中心里。物理設(shè)備當(dāng)然是越來(lái)越牛,例如服務(wù)器,內(nèi)存動(dòng)不動(dòng)就是百G內(nèi)存,例如網(wǎng)絡(luò)設(shè)備,一個(gè)端口的帶寬就能有幾十G甚至上百G,例如存儲(chǔ),在數(shù)據(jù)中心至少是PB級(jí)別的(一個(gè)P是1024個(gè)T,一個(gè)T是1024個(gè)G)。
然而物理設(shè)備不能做到很好的靈活性。首先它不能夠達(dá)到想什么時(shí)候要就什么時(shí)候要、比如買(mǎi)臺(tái)服務(wù)器,哪怕買(mǎi)個(gè)電腦,都有采購(gòu)的時(shí)間。突然用戶告訴某個(gè)云廠商,說(shuō)想要開(kāi)臺(tái)電腦,如果使用物理服務(wù)器,當(dāng)時(shí)去采購(gòu)啊就很難,如果說(shuō)供應(yīng)商啊關(guān)系一般,可能采購(gòu)一個(gè)月,供應(yīng)商關(guān)系好的話也需要一個(gè)星期。用戶等了一個(gè)星期后,這時(shí)候電腦才到位,用戶還要登錄上去開(kāi)始慢慢部署自己的應(yīng)用,時(shí)間靈活性非常差。第二是空間靈活性也不行,例如上述的用戶,要一個(gè)很小很小的電腦,現(xiàn)在哪還有這么小型號(hào)的電腦啊。不能為了滿足用戶只要一個(gè)G的內(nèi)存是80G硬盤(pán)的,就去買(mǎi)一個(gè)這么小的機(jī)器。但是如果買(mǎi)一個(gè)大的呢,因?yàn)殡娔X大,就向用戶多收錢(qián),用戶說(shuō)他只用這么小的一點(diǎn),如果讓用戶多付錢(qián)就很冤。
1.4 虛擬化靈活多了
有人就想辦法了。第一個(gè)辦法就是虛擬化。用戶不是只要一個(gè)很小的電腦么?數(shù)據(jù)中心的物理設(shè)備都很強(qiáng)大,我可以從物理的CPU,內(nèi)存,硬盤(pán)中虛擬出一小塊來(lái)給客戶,同時(shí)也可以虛擬出一小塊來(lái)給其他客戶,每個(gè)客戶都只能看到自己虛的那一小塊,其實(shí)每個(gè)客戶用的是整個(gè)大的設(shè)備上其中的一小塊。虛擬化的技術(shù)能使得不同的客戶的電腦看起來(lái)是隔離的,我看著好像這塊盤(pán)就是我的,你看這呢這塊盤(pán)就是你的,實(shí)際情況可能我這個(gè)10G和您這個(gè)10G是落在同樣一個(gè)很大很大的這個(gè)存儲(chǔ)上的。
而且如果事先物理設(shè)備都準(zhǔn)備好,虛擬化軟件虛擬出一個(gè)電腦是非常快的,基本上幾分鐘就能解決。所以在任何一個(gè)云上要?jiǎng)?chuàng)建一臺(tái)電腦,一點(diǎn)幾分鐘就出來(lái)了,就是這個(gè)道理。
這個(gè)空間靈活性和時(shí)間靈活性就基本解決了。
1.5 虛擬世界的賺錢(qián)與情懷
在虛擬化階段,最牛的公司是Vmware,是實(shí)現(xiàn)虛擬化技術(shù)比較早的一家公司,可以實(shí)現(xiàn)計(jì)算,網(wǎng)絡(luò),存儲(chǔ)的虛擬化,這家公司很牛,性能也做得非常好,然后虛擬化軟件賣(mài)的也非常好,賺了好多的錢(qián),后來(lái)讓EMC(世界五百?gòu)?qiáng),存儲(chǔ)廠商第一品牌)給收購(gòu)了。
但是這個(gè)世界上還是有很多有情懷的人的,尤其是程序員里面,有情懷的人喜歡做一件什么事情呢?開(kāi)源。這個(gè)世界上很多軟件都是有閉源就有開(kāi)源,源就是源代碼。就是說(shuō)某個(gè)軟件做的好,所有人都愛(ài)用,這個(gè)軟件的代碼呢,我封閉起來(lái)只有我公司知道,其他人不知道,如果其他人想用這個(gè)軟件,就要付我錢(qián),這就叫閉源。但是世界上總有一些大牛看不慣錢(qián)都讓一家賺了去。大牛們覺(jué)得,這個(gè)技術(shù)你會(huì)我也會(huì),你能開(kāi)發(fā)出來(lái),我也能,我開(kāi)發(fā)出來(lái)就是不收錢(qián),把代碼拿出來(lái)分享給大家,全世界誰(shuí)用都可以,所有的人都可以享受到好處,這個(gè)叫做開(kāi)源。
比如最近蒂姆·伯納斯·李就是個(gè)非常有情懷的人,2017年,他因“發(fā)明萬(wàn)維網(wǎng)、第一個(gè)瀏覽器和使萬(wàn)維網(wǎng)得以擴(kuò)展的基本協(xié)議和算法”而獲得2016年度的圖靈獎(jiǎng)。圖靈獎(jiǎng)就是計(jì)算機(jī)界的諾貝爾獎(jiǎng)。然而他最令人敬佩的是,他將萬(wàn)維網(wǎng),也就是我們常見(jiàn)的www的技術(shù)無(wú)償貢獻(xiàn)給全世界免費(fèi)使用。我們現(xiàn)在在網(wǎng)上的所有行為都應(yīng)該感謝他的功勞,如果他將這個(gè)技術(shù)拿來(lái)收錢(qián),應(yīng)該和比爾蓋茨差不多有錢(qián)。
例如在閉源的世界里有windows,大家用windows都得給微軟付錢(qián),開(kāi)源的世界里面就出現(xiàn)了Linux。比爾蓋茨靠windows,Office這些閉源的軟件賺了很多錢(qián),稱為世界首富,就有大牛開(kāi)發(fā)了另外一種操作系統(tǒng)Linux。很多人可能沒(méi)有聽(tīng)說(shuō)過(guò)Linux,很多后臺(tái)的服務(wù)器上跑的程序都是Linux上的,比如大家享受雙十一,支撐雙十一搶購(gòu)的系統(tǒng),無(wú)論是淘寶,京東,考拉,都是跑在Linux上的。
再如有apple就有安卓。apple市值很高,但是蘋(píng)果系統(tǒng)的代碼我們是看不到的。于是就有大牛寫(xiě)了安卓手機(jī)操作系統(tǒng)。所以大家可以看到幾乎所有的其他手機(jī)廠商,里面都裝安卓系統(tǒng),因?yàn)樘O(píng)果系統(tǒng)不開(kāi)源,而安卓系統(tǒng)大家都可以用。
在虛擬化軟件也一樣,有了Vmware,這個(gè)軟件非常非常的貴。那就有大牛寫(xiě)了兩個(gè)開(kāi)源的虛擬化軟件,一個(gè)叫做Xen,一個(gè)叫做KVM,如果不做技術(shù)的,可以不用管這兩個(gè)名字,但是后面還是會(huì)提到。
1.6 虛擬化的半自動(dòng)和云計(jì)算的全自動(dòng)
虛擬化軟件似乎解決了靈活性問(wèn)題,其實(shí)不全對(duì)。因?yàn)樘摂M化軟件一般創(chuàng)建一臺(tái)虛擬的電腦,是需要人工指定這臺(tái)虛擬電腦放在哪臺(tái)物理機(jī)上的,可能還需要比較復(fù)雜的人工配置,所以使用Vmware的虛擬化軟件,需要考一個(gè)很牛的證書(shū),能拿到這個(gè)證書(shū)的人,薪資是相當(dāng)?shù)母撸部梢?jiàn)復(fù)雜程度。所以僅僅憑虛擬化軟件所能管理的物理機(jī)的集群規(guī)模都不是特別的大,一般在十幾臺(tái),幾十臺(tái),最多百臺(tái)這么一個(gè)規(guī)模。這一方面會(huì)影響時(shí)間靈活性,雖然虛擬出一臺(tái)電腦的時(shí)間很短,但是隨著集群規(guī)模的擴(kuò)大,人工配置的過(guò)程越來(lái)越復(fù)雜,越來(lái)越耗時(shí)。另一方面也影響空間靈活性,當(dāng)用戶數(shù)量多的時(shí)候,這點(diǎn)集群規(guī)模,還遠(yuǎn)達(dá)不到想要多少要多少的程度,很可能這點(diǎn)資源很快就用完了,還得去采購(gòu)。所以隨著集群的規(guī)模越來(lái)越大,基本都是千臺(tái)起步,動(dòng)輒上萬(wàn)臺(tái),甚至幾十上百萬(wàn)臺(tái),如果去查一下BAT,包括網(wǎng)易,包括谷歌,亞馬遜,服務(wù)器數(shù)目都大的嚇人。這么多機(jī)器要靠人去選一個(gè)位置放這臺(tái)虛擬化的電腦并做相應(yīng)的配置,幾乎是不可能的事情,還是需要機(jī)器去做這個(gè)事情。
人們發(fā)明了各種各樣的算法來(lái)做這個(gè)事情,算法的名字叫做調(diào)度(Scheduler)。通俗一點(diǎn)的說(shuō),就是有一個(gè)調(diào)度中心,幾千臺(tái)機(jī)器都在一個(gè)池子里面,無(wú)論用戶需要多少CPU,內(nèi)存,硬盤(pán)的虛擬電腦,調(diào)度中心會(huì)自動(dòng)在大池子里面找一個(gè)能夠滿足用戶需求的地方,把虛擬電腦啟動(dòng)起來(lái)做好配置,用戶就直接能用了。這個(gè)階段,我們稱為池化,或者云化,到了這個(gè)階段,才可以稱為云計(jì)算,在這之前都只能叫虛擬化。
1.7 云計(jì)算的私有與公有
云計(jì)算大致分兩種,一個(gè)是私有云,一個(gè)是公有云,還有人把私有云和公有云連接起來(lái)稱為混合云,我們暫且不說(shuō)這個(gè)。私有云就是把虛擬化和云化的這套軟件部署在別人的數(shù)據(jù)中心里面,使用私有云的用戶往往很有錢(qián),自己買(mǎi)地建機(jī)房,自己買(mǎi)服務(wù)器,然后讓云廠商部署在自己這里,Vmware后來(lái)除了虛擬化,也推出了云計(jì)算的產(chǎn)品,并且在私有云市場(chǎng)賺的盆滿缽滿。所謂公有云就是虛擬化和云化軟件部署在云廠商自己數(shù)據(jù)中心里面的,用戶不需要很大的投入,只要注冊(cè)一個(gè)賬號(hào),就能在一個(gè)網(wǎng)頁(yè)上點(diǎn)一下創(chuàng)建一臺(tái)虛擬電腦,例如AWS也即亞馬遜的公有云,例如國(guó)內(nèi)的阿里云,騰訊云,網(wǎng)易云等。
亞馬遜呢為什么要做公有云呢?我們知道亞馬遜原來(lái)是國(guó)外比較大的一個(gè)電商,它做電商的時(shí)候也肯定會(huì)遇到類(lèi)似雙11的場(chǎng)景,在某一個(gè)時(shí)刻大家都沖上來(lái)買(mǎi)東西。當(dāng)大家都沖上買(mǎi)東西的時(shí)候,就特別需要云的時(shí)間靈活性和空間靈活性。因?yàn)樗荒軙r(shí)刻準(zhǔn)備好所有的資源,那樣太浪費(fèi)了。但也不能什么都不準(zhǔn)備,看著雙十一這么多用戶想買(mǎi)東西登不上去。所以需要雙十一的時(shí)候,創(chuàng)建一大批虛擬電腦來(lái)支撐電商應(yīng)用,過(guò)了雙十一再把這些資源都釋放掉去干別的。所以亞馬遜是需要一個(gè)云平臺(tái)的。
然而商用的虛擬化軟件實(shí)在是太貴了,亞馬遜總不能把自己在電商賺的錢(qián)全部給了虛擬化廠商吧。于是亞馬遜基于開(kāi)源的虛擬化技術(shù),如上所述的Xen或者KVM,開(kāi)發(fā)了一套自己的云化軟件。沒(méi)想到亞馬遜后來(lái)電商越做越牛,云平臺(tái)也越做越牛。而且由于他的云平臺(tái)需要支撐自己的電商應(yīng)用,而傳統(tǒng)的云計(jì)算廠商多為IT廠商出身,幾乎沒(méi)有自己的應(yīng)用,因而亞馬遜的云平臺(tái)對(duì)應(yīng)用更加的友好,迅速發(fā)展成為云計(jì)算的第一品牌,賺了很多錢(qián)。在亞馬遜公布其云計(jì)算平臺(tái)財(cái)報(bào)之前,人們都猜測(cè),亞馬遜電商賺錢(qián),云也賺錢(qián)嗎?后來(lái)一公布財(cái)報(bào),發(fā)現(xiàn)不是一般的賺錢(qián),僅僅去年,亞馬遜AWS年?duì)I收達(dá)122億美元,運(yùn)營(yíng)利潤(rùn)31億美元。
1.8 云計(jì)算的賺錢(qián)與情懷
公有云的第一名亞馬遜過(guò)得很爽,第二名Rackspace過(guò)的就一般了。沒(méi)辦法,這就是互聯(lián)網(wǎng)行業(yè)的殘酷性,多是贏者通吃的模式。所以第二名如果不是云計(jì)算行業(yè)的,很多人可能都沒(méi)聽(tīng)過(guò)了。第二名就想,我干不過(guò)老大怎么辦呢?開(kāi)源吧。如上所述,亞馬遜雖然使用了開(kāi)源的虛擬化技術(shù),但是云化的代碼是閉源的,很多想做又做不了云化平臺(tái)的公司,只能眼巴巴的看著亞馬遜掙大錢(qián)。Rackspace把源代碼一公開(kāi),整個(gè)行業(yè)就可以一起把這個(gè)平臺(tái)越做越好,兄弟們大家一起上,和老大拼了。
于是Rackspace和美國(guó)航空航天局合作創(chuàng)辦了開(kāi)源軟件OpenStack,如圖所示OpenStack的架構(gòu)圖,不是云計(jì)算行業(yè)的不用弄懂這個(gè)圖,但是能夠看到三個(gè)關(guān)鍵字,Compute計(jì)算,Networking網(wǎng)絡(luò),Storage存儲(chǔ)。還是一個(gè)計(jì)算,網(wǎng)絡(luò),存儲(chǔ)的云化管理平臺(tái)。
當(dāng)然第二名的技術(shù)也是非常棒的,有了OpenStack之后,果真像Rackspace想象的一樣,所有想做云的大企業(yè)都瘋了,你能想象到的所有如雷貫耳的大型IT企業(yè),IBM,惠普,戴爾,華為,聯(lián)想等等,都瘋了。原來(lái)云平臺(tái)大家都想做,看著亞馬遜和Vmware賺了這么多錢(qián),眼巴巴看著沒(méi)辦法,想自己做一個(gè)好像難度還挺大。現(xiàn)在好了,有了這樣一個(gè)開(kāi)源的云平臺(tái)OpenStack,所有的IT廠商都加入到這個(gè)社區(qū)中來(lái),對(duì)這個(gè)云平臺(tái)進(jìn)行貢獻(xiàn),包裝成自己的產(chǎn)品,連同自己的硬件設(shè)備一起賣(mài)。有的做了私有云,有的做了公有云,OpenStack已經(jīng)成為開(kāi)源云平臺(tái)的事實(shí)標(biāo)準(zhǔn)。
1.9 IaaS, 資源層面的靈活性
隨著OpenStack的技術(shù)越來(lái)越成熟,可以管理的規(guī)模也越來(lái)越大,并且可以有多個(gè)OpenStack集群部署多套,比如北京部署一套,杭州部署兩套,廣州部署一套,然后進(jìn)行統(tǒng)一的管理。這樣整個(gè)規(guī)模就更大了。在這個(gè)規(guī)模下,對(duì)于普通用戶的感知來(lái)講,基本能夠做到想什么時(shí)候要就什么什么藥,想要多少就要多少。還是拿云盤(pán)舉例子,每個(gè)用戶云盤(pán)都分配了5T甚至更大的空間,如果有1億人,那加起來(lái)空間多大啊。其實(shí)背后的機(jī)制是這樣的,分配你的空間,你可能只用了其中很少一點(diǎn),比如說(shuō)它分配給你了5個(gè)T,這么大的空間僅僅是你看到的,而不是真的就給你了,你其實(shí)只用了50個(gè)G,則真實(shí)給你的就是50個(gè)G,隨著你文件的不斷上傳,分給你的空間會(huì)越來(lái)越多。當(dāng)大家都上傳,云平臺(tái)發(fā)現(xiàn)快滿了的時(shí)候(例如用了70%),會(huì)采購(gòu)更多的服務(wù)器,擴(kuò)充背后的資源,這個(gè)對(duì)用戶是透明的,看不到的,從感覺(jué)上來(lái)講,就實(shí)現(xiàn)了云計(jì)算的彈性。其實(shí)有點(diǎn)像銀行,給儲(chǔ)戶的感覺(jué)是什么時(shí)候取錢(qián)都有,只要不同時(shí)擠兌,銀行就不會(huì)垮。
這里做一個(gè)簡(jiǎn)單的總結(jié),到了這個(gè)階段,云計(jì)算基本上實(shí)現(xiàn)了時(shí)間靈活性和空間靈活性,實(shí)現(xiàn)了計(jì)算,網(wǎng)絡(luò),存儲(chǔ)資源的彈性。計(jì)算,網(wǎng)絡(luò),存儲(chǔ)我們常稱為基礎(chǔ)設(shè)施Infranstracture, 因而這個(gè)階段的彈性稱為資源層面的彈性,管理資源的云平臺(tái),我們稱為基礎(chǔ)設(shè)施服務(wù),就是我們常聽(tīng)到的IaaS,Infranstracture As A Service。
二、云計(jì)算不光管資源,也要管應(yīng)用
有了IaaS,實(shí)現(xiàn)了資源層面的彈性就夠了嗎?顯然不是。還有應(yīng)用層面的彈性。這里舉個(gè)例子,比如說(shuō)實(shí)現(xiàn)一個(gè)電商的應(yīng)用,平時(shí)十臺(tái)機(jī)器就夠了,雙十一需要一百臺(tái)。你可能覺(jué)得很好辦啊,有了IaaS,新創(chuàng)建九十臺(tái)機(jī)器就可以了啊。但是90臺(tái)機(jī)器創(chuàng)建出來(lái)是空的啊,電商應(yīng)用并沒(méi)有放上去啊,只能你公司的運(yùn)維人員一臺(tái)一臺(tái)的弄,還是需要很長(zhǎng)時(shí)間才能安裝好的。雖然資源層面實(shí)現(xiàn)了彈性,但是沒(méi)有應(yīng)用層的彈性,依然靈活性是不夠的。
有沒(méi)有方法解決這個(gè)問(wèn)題呢?于是人們?cè)贗aaS平臺(tái)之上又加了一層,用于管理資源以上的應(yīng)用彈性的問(wèn)題,這一層通常稱為PaaS(Platform As A Service)。這一層往往比較難理解,其實(shí)大致分兩部分,一部分我稱為你自己的應(yīng)用自動(dòng)安裝,一部分我稱為通用的應(yīng)用不用安裝。
我們先來(lái)說(shuō)第一部分,自己的應(yīng)用自動(dòng)安裝。比如電商應(yīng)用是你自己開(kāi)發(fā)的,除了你自己,其他人是不知道怎么安裝的,比如電商應(yīng)用,安裝的時(shí)候需要配置支付寶或者微信的賬號(hào),才能別人在你的電商上買(mǎi)東西的時(shí)候,付的錢(qián)是打到你的賬戶里面的,除了你,誰(shuí)也不知道,所以安裝的過(guò)程平臺(tái)幫不了忙,但是能夠幫你做的自動(dòng)化,你需要做一些工作,將自己的配置信息融入到自動(dòng)化的安裝過(guò)程中方可。比如上面的例子,雙十一新創(chuàng)建出來(lái)的90臺(tái)機(jī)器是空的,如果能夠提供一個(gè)工具,能夠自動(dòng)在這新的90臺(tái)機(jī)器上將電商應(yīng)用安裝好,就能夠?qū)崿F(xiàn)應(yīng)用層面的真正彈性。例如Puppet, Chef, Ansible, Cloud Foundary都可以干這件事情,最新的容器技術(shù)Docker能更好的干這件事情,不做技術(shù)的可以不用管這些詞。
第二部分,通用的應(yīng)用不用安裝。所謂通用的應(yīng)用,一般指一些復(fù)雜性比較高,但是大家都在用的,例如數(shù)據(jù)庫(kù)。幾乎所有的應(yīng)用都會(huì)用數(shù)據(jù)庫(kù),但是數(shù)據(jù)庫(kù)軟件是標(biāo)準(zhǔn)的,雖然安裝和維護(hù)比較復(fù)雜,但是無(wú)論誰(shuí)安裝都是一樣。這樣的應(yīng)用可以變成標(biāo)準(zhǔn)的PaaS層的應(yīng)用放在云平臺(tái)的界面上。當(dāng)用戶需要一個(gè)數(shù)據(jù)庫(kù)的時(shí)候,一點(diǎn)就出來(lái)了,用戶就可以直接用了。有人問(wèn),既然誰(shuí)安裝都一個(gè)樣,那我自己來(lái)好了,不需要花錢(qián)在云平臺(tái)上買(mǎi)。當(dāng)然不是,數(shù)據(jù)庫(kù)是一個(gè)非常難的東西,光Oracle這家公司,靠數(shù)據(jù)庫(kù)就能賺這么多錢(qián)。買(mǎi)Oracle也是要花很多很多錢(qián)的。然而大多數(shù)云平臺(tái)會(huì)提供Mysql這樣的開(kāi)源數(shù)據(jù)庫(kù),又是開(kāi)源,錢(qián)不需要花這么多了,但是維護(hù)這個(gè)數(shù)據(jù)庫(kù),卻需要專(zhuān)門(mén)招一個(gè)很大的團(tuán)隊(duì),如果這個(gè)數(shù)據(jù)庫(kù)能夠優(yōu)化到能夠支撐雙十一,也不是一年兩年能夠搞定的。比如您是一個(gè)做單車(chē)的,當(dāng)然沒(méi)必要招一個(gè)非常大的數(shù)據(jù)庫(kù)團(tuán)隊(duì)來(lái)干這件事情,成本太高了,應(yīng)該交給云平臺(tái)來(lái)做這件事情,專(zhuān)業(yè)的事情專(zhuān)業(yè)的人來(lái)自,云平臺(tái)專(zhuān)門(mén)養(yǎng)了幾百人維護(hù)這套系統(tǒng),您只要專(zhuān)注于您的單車(chē)應(yīng)用就可以了。
要么是自動(dòng)部署,要么是不用部署,總的來(lái)說(shuō)就是應(yīng)用層你也要少操心,這就是PaaS層的重要作用。
雖說(shuō)腳本的方式能夠解決自己的應(yīng)用的部署問(wèn)題,然而不同的環(huán)境千差萬(wàn)別,一個(gè)腳本往往在一個(gè)環(huán)境上運(yùn)行正確,到另一個(gè)環(huán)境就不正確了。
而容器是能更好的解決這個(gè)問(wèn)題的。
容器是 Container,Container另一個(gè)意思是集裝箱,其實(shí)容器的思想就是要變成軟件交付的集裝箱。集裝箱的特點(diǎn),一是封裝,二是標(biāo)準(zhǔn)。
在沒(méi)有集裝箱的時(shí)代,假設(shè)將貨物從 A運(yùn)到 B,中間要經(jīng)過(guò)三個(gè)碼頭、換三次船。每次都要將貨物卸下船來(lái),擺的七零八落,然后搬上船重新整齊擺好。因此在沒(méi)有集裝箱的時(shí)候,每次換船,船員們都要在岸上待幾天才能走。
有了集裝箱以后,所有的貨物都打包在一起了,并且集裝箱的尺寸全部一致,所以每次換船的時(shí)候,一個(gè)箱子整體搬過(guò)去就行了,小時(shí)級(jí)別就能完成,船員再也不用上岸長(zhǎng)時(shí)間耽擱了。
這是集裝箱“封裝”、“標(biāo)準(zhǔn)”兩大特點(diǎn)在生活中的應(yīng)用。
那么容器如何對(duì)應(yīng)用打包呢?還是要學(xué)習(xí)集裝箱,首先要有個(gè)封閉的環(huán)境,將貨物封裝起來(lái),讓貨物之間互不干擾,互相隔離,這樣裝貨卸貨才方便。好在 Ubuntu中的LXC技術(shù)早就能做到這一點(diǎn)。
封閉的環(huán)境主要使用了兩種技術(shù),一種是看起來(lái)是隔離的技術(shù),稱為 Namespace,也即每個(gè) Namespace中的應(yīng)用看到的是不同的 IP地址、用戶空間、程號(hào)等。另一種是用起來(lái)是隔離的技術(shù),稱為 Cgroups,也即明明整臺(tái)機(jī)器有很多的 CPU、內(nèi)存,而一個(gè)應(yīng)用只能用其中的一部分。
所謂的鏡像,就是將你焊好集裝箱的那一刻,將集裝箱的狀態(tài)保存下來(lái),就像孫悟空說(shuō):“定”,集裝箱里面就定在了那一刻,然后將這一刻的狀態(tài)保存成一系列文件。這些文件的格式是標(biāo)準(zhǔn)的,誰(shuí)看到這些文件都能還原當(dāng)時(shí)定住的那個(gè)時(shí)刻。將鏡像還原成運(yùn)行時(shí)的過(guò)程(就是讀取鏡像文件,還原那個(gè)時(shí)刻的過(guò)程)就是容器運(yùn)行的過(guò)程。
有了容器,使得 PaaS層對(duì)于用戶自身應(yīng)用的自動(dòng)部署變得快速而優(yōu)雅。
三、大數(shù)據(jù)擁抱云計(jì)算
在PaaS層中一個(gè)復(fù)雜的通用應(yīng)用就是大數(shù)據(jù)平臺(tái)。大數(shù)據(jù)是如何一步一步融入云計(jì)算的呢?
3.1 數(shù)據(jù)不大也包含智慧
一開(kāi)始這個(gè)大數(shù)據(jù)并不大,你想象原來(lái)才有多少數(shù)據(jù)?現(xiàn)在大家都去看電子書(shū),上網(wǎng)看新聞了,在我們80后小時(shí)候,信息量沒(méi)有那么大,也就看看書(shū),看看報(bào),一個(gè)星期的報(bào)紙加起來(lái)才有多少字啊,如果你不在一個(gè)大城市,一個(gè)普通的學(xué)校的圖書(shū)館加起來(lái)也沒(méi)幾個(gè)書(shū)架,是后來(lái)隨著信息化的到來(lái),信息才會(huì)越來(lái)越多。
首先我們來(lái)看一下大數(shù)據(jù)里面的數(shù)據(jù),就分三種類(lèi)型,一種叫結(jié)構(gòu)化的數(shù)據(jù),一種叫非結(jié)構(gòu)化的數(shù)據(jù),還有一種叫半結(jié)構(gòu)化的數(shù)據(jù)。什么叫結(jié)構(gòu)化的數(shù)據(jù)呢?叫有固定格式和有限長(zhǎng)度的數(shù)據(jù)。例如填的表格就是結(jié)構(gòu)化的數(shù)據(jù),國(guó)籍:中華人民共和國(guó),民族:漢,性別:男,這都叫結(jié)構(gòu)化數(shù)據(jù)。現(xiàn)在越來(lái)越多的就是非結(jié)構(gòu)化的數(shù)據(jù),就是不定長(zhǎng),無(wú)固定格式的數(shù)據(jù),例如網(wǎng)頁(yè),有時(shí)候非常長(zhǎng),有時(shí)候幾句話就沒(méi)了,例如語(yǔ)音,視頻都是非結(jié)構(gòu)化的數(shù)據(jù)。半結(jié)構(gòu)化數(shù)據(jù)是一些xml或者h(yuǎn)tml的格式的,不從事技術(shù)的可能不了解,但也沒(méi)有關(guān)系。
數(shù)據(jù)怎么樣才能對(duì)人有用呢?其實(shí)數(shù)據(jù)本身不是有用的,必須要經(jīng)過(guò)一定的處理。例如你每天跑步帶個(gè)手環(huán)收集的也是數(shù)據(jù),網(wǎng)上這么多網(wǎng)頁(yè)也是數(shù)據(jù),我們稱為Data,數(shù)據(jù)本身沒(méi)有什么用處,但是數(shù)據(jù)里面包含一個(gè)很重要的東西,叫做信息Information,數(shù)據(jù)十分雜亂,經(jīng)過(guò)梳理和清洗,才能夠稱為信息。信息會(huì)包含很多規(guī)律,我們需要從信息中將規(guī)律總結(jié)出來(lái),稱為知識(shí)knowledge,知識(shí)改變命運(yùn)。信息是很多的,但是有人看到了信息相當(dāng)于白看,但是有人就從信息中看到了電商的未來(lái),有人看到了直播的未來(lái),所以人家就牛了,你如果沒(méi)有從信息中提取出知識(shí),天天看朋友圈,也只能在互聯(lián)網(wǎng)滾滾大潮中做個(gè)看客。有了知識(shí),然后利用這些知識(shí)去應(yīng)用于實(shí)戰(zhàn),有的人會(huì)做得非常好,這個(gè)東西叫做智慧intelligence。有知識(shí)并不一定有智慧,例如好多學(xué)者很有知識(shí),已經(jīng)發(fā)生的事情可以從各個(gè)角度分析的頭頭是道,但一到實(shí)干就歇菜,并不能轉(zhuǎn)化成為智慧。而很多的創(chuàng)業(yè)家之所以偉大,就是通過(guò)獲得的知識(shí)應(yīng)用于實(shí)踐,最后做了很大的生意。
所以數(shù)據(jù)的應(yīng)用分這四個(gè)步驟:數(shù)據(jù),信息,知識(shí),智慧。這是很多商家都想要的,你看我收集了這么多的數(shù)據(jù),能不能基于這些數(shù)據(jù)來(lái)幫我做下一步的決策,改善我的產(chǎn)品,例如讓用戶看視頻的時(shí)候旁邊彈出廣告,正好是他想買(mǎi)的東西,再如讓用戶聽(tīng)音樂(lè)的時(shí)候,另外推薦一些他非常想聽(tīng)的其他音樂(lè)。用戶在我的應(yīng)用或者網(wǎng)站上隨便點(diǎn)點(diǎn)鼠標(biāo),輸入文字對(duì)我來(lái)說(shuō)都是數(shù)據(jù),我就是要將其中某些東西提取出來(lái),指導(dǎo)實(shí)踐,形成智慧,讓用戶陷入到我的應(yīng)用里面不可自拔,上了我的網(wǎng)就不想離開(kāi),手不停的點(diǎn),不停的買(mǎi),很多人說(shuō)雙十一我都想斷網(wǎng)了,我老婆在上面不斷的買(mǎi)買(mǎi)買(mǎi),買(mǎi)了A又推薦B,老婆大人說(shuō),“哎呀,B也是我喜歡的啊,老公我要買(mǎi)”。你說(shuō)這個(gè)程序怎么這么牛,這么有智慧,比我還了解我老婆,這件事情是怎么做到的呢?
3.2 數(shù)據(jù)如何升華為智慧
數(shù)據(jù)的處理分幾個(gè)步驟,完成了才最后會(huì)有智慧。
第一個(gè)步驟叫數(shù)據(jù)的收集。首先得有數(shù)據(jù),數(shù)據(jù)的收集有兩個(gè)方式,第一個(gè)方式是拿,專(zhuān)業(yè)點(diǎn)的說(shuō)法叫抓取或者爬取,例如搜索引擎就是這么做的,它把網(wǎng)上的所有的信息都下載到它的數(shù)據(jù)中心,然后你一搜才能搜出來(lái)。比如你去搜索的時(shí)候,結(jié)果會(huì)是一個(gè)列表,這個(gè)列表為什么會(huì)在搜索引擎的公司里面呢,就是因?yàn)樗堰@個(gè)數(shù)據(jù)啊都拿下來(lái)了,但是你一點(diǎn)鏈接,點(diǎn)出來(lái)這個(gè)網(wǎng)站就不在搜索引擎它們公司了。比如說(shuō)新浪有個(gè)新聞,你拿百度搜出來(lái),你不點(diǎn)的時(shí)候,那一頁(yè)在百度數(shù)據(jù)中心,一點(diǎn)出來(lái)的網(wǎng)頁(yè)就是在新浪的數(shù)據(jù)中心了。另外一個(gè)方式就是推送,有很多終端可以幫我收集數(shù)據(jù),比如說(shuō)小米手環(huán),可以將你每天跑步的數(shù)據(jù),心跳的數(shù)據(jù),睡眠的數(shù)據(jù)都上傳到數(shù)據(jù)中心里面。
第二個(gè)步驟是數(shù)據(jù)的傳輸。一般會(huì)通過(guò)隊(duì)列方式進(jìn)行,因?yàn)閿?shù)據(jù)量實(shí)在是太大了,數(shù)據(jù)必須經(jīng)過(guò)處理才會(huì)有用,可是系統(tǒng)處理不過(guò)來(lái),只好排好隊(duì),慢慢的處理。
第三個(gè)步驟是數(shù)據(jù)的存儲(chǔ)。現(xiàn)在數(shù)據(jù)就是金錢(qián),掌握了數(shù)據(jù)就相當(dāng)于掌握了錢(qián)。要不然網(wǎng)站怎么知道你想買(mǎi)什么呢?就是因?yàn)樗心銡v史的交易的數(shù)據(jù),這個(gè)信息可不能給別人,十分寶貴,所以需要存儲(chǔ)下來(lái)。
第四個(gè)步驟是數(shù)據(jù)的處理和分析。上面存儲(chǔ)的數(shù)據(jù)是原始數(shù)據(jù),原始數(shù)據(jù)多是雜亂無(wú)章的,有很多垃圾數(shù)據(jù)在里面,因而需要清洗和過(guò)濾,得到一些高質(zhì)量的數(shù)據(jù)。對(duì)于高質(zhì)量的數(shù)據(jù),就可以進(jìn)行分析,從而對(duì)數(shù)據(jù)進(jìn)行分類(lèi),或者發(fā)現(xiàn)數(shù)據(jù)之間的相互關(guān)系,得到知識(shí)。比如盛傳的沃爾瑪超市的啤酒和尿布的故事,就是通過(guò)對(duì)人們的購(gòu)買(mǎi)數(shù)據(jù)進(jìn)行分析,發(fā)現(xiàn)了男人一般買(mǎi)尿布的時(shí)候,會(huì)同時(shí)購(gòu)買(mǎi)啤酒,這樣就發(fā)現(xiàn)了啤酒和尿布之間的相互關(guān)系,獲得知識(shí),然后應(yīng)用到實(shí)踐中,將啤酒和尿布的柜臺(tái)弄的很近,就獲得了智慧。
第五個(gè)步驟就是對(duì)于數(shù)據(jù)的檢索和挖掘。檢索就是搜索,所謂外事不決問(wèn)google,內(nèi)事不決問(wèn)百度。內(nèi)外兩大搜索引擎都是講分析后的數(shù)據(jù)放入搜索引擎,從而人們想尋找信息的時(shí)候,一搜就有了。另外就是挖掘,僅僅搜索出來(lái)已經(jīng)不能滿足人們的要求了,還需要從信息中挖掘出相互的關(guān)系。比如財(cái)經(jīng)搜索,當(dāng)搜索某個(gè)公司股票的時(shí)候,該公司的高管是不是也應(yīng)該被挖掘出來(lái)呢?如果僅僅搜索出這個(gè)公司的股票發(fā)現(xiàn)漲的特別好,于是你就去買(mǎi)了,其實(shí)其高管發(fā)了一個(gè)聲明,對(duì)股票十分不利,第二天就跌了,這不坑害廣大股民么?所以通過(guò)各種算法挖掘數(shù)據(jù)中的關(guān)系,形成知識(shí)庫(kù),十分重要。
3.3 大數(shù)據(jù)時(shí)代,眾人拾柴火焰高
當(dāng)數(shù)據(jù)量很小的時(shí)候,很少的幾臺(tái)機(jī)器就能解決。慢慢的當(dāng)數(shù)據(jù)量越來(lái)越大,最牛的服務(wù)器都解決不了問(wèn)題的時(shí)候,就想怎么辦呢?要聚合多臺(tái)機(jī)器的力量,大家齊心協(xié)力一起把這個(gè)事搞定,眾人拾柴火焰高。
對(duì)于數(shù)據(jù)的收集,對(duì)于IoT來(lái)講,外面部署這成千上萬(wàn)的檢測(cè)設(shè)備,將大量的溫度,適度,監(jiān)控,電力等等數(shù)據(jù)統(tǒng)統(tǒng)收集上來(lái),對(duì)于互聯(lián)網(wǎng)網(wǎng)頁(yè)的搜索引擎來(lái)講,需要將整個(gè)互聯(lián)網(wǎng)所有的網(wǎng)頁(yè)都下載下來(lái),這顯然一臺(tái)機(jī)器做不到,需要多臺(tái)機(jī)器組成網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng),每臺(tái)機(jī)器下載一部分,同時(shí)工作,才能在有限的時(shí)間內(nèi),將海量的網(wǎng)頁(yè)下載完畢。
對(duì)于數(shù)據(jù)的傳輸,一個(gè)內(nèi)存里面的隊(duì)列肯定會(huì)被大量的數(shù)據(jù)擠爆掉,于是就產(chǎn)生了基于硬盤(pán)的分布式隊(duì)列,這樣隊(duì)列可以多臺(tái)機(jī)器同時(shí)傳輸,隨你數(shù)據(jù)量多大,只要我的隊(duì)列足夠多,管道足夠粗,就能夠撐得住。
對(duì)于數(shù)據(jù)的存儲(chǔ),一臺(tái)機(jī)器的文件系統(tǒng)肯定是放不下了,所以需要一個(gè)很大的分布式文件系統(tǒng)來(lái)做這件事情,把多臺(tái)機(jī)器的硬盤(pán)打成一塊大的文件系統(tǒng)。
再如數(shù)據(jù)的分析,可能需要對(duì)大量的數(shù)據(jù)做分解,統(tǒng)計(jì),匯總,一臺(tái)機(jī)器肯定搞不定,處理到猴年馬月也分析不完,于是就有分布式計(jì)算的方法,將大量的數(shù)據(jù)分成小份,每臺(tái)機(jī)器處理一小份,多臺(tái)機(jī)器并行處理,很快就能算完。例如著名的Terasort對(duì)1個(gè)TB的數(shù)據(jù)排序,相當(dāng)于1024G,如果單機(jī)處理,怎么也要幾個(gè)小時(shí),但是并行處理209秒就完成了。
所以說(shuō)大數(shù)據(jù)平臺(tái),什么叫做大數(shù)據(jù),說(shuō)白了就是一臺(tái)機(jī)器干不完,大家一起干。隨著數(shù)據(jù)量越來(lái)越大,很多不大的公司都需要處理相當(dāng)多的數(shù)據(jù),這些小公司沒(méi)有這么多機(jī)器可怎么辦呢?
3.4 大數(shù)據(jù)需要云計(jì)算,云計(jì)算需要大數(shù)據(jù)
說(shuō)到這里,大家想起云計(jì)算了吧。當(dāng)想要干這些活的時(shí)候,需要好多好多的機(jī)器一塊做,真的是想什么時(shí)候要,想要多少就要多少。例如大數(shù)據(jù)分析公司的財(cái)務(wù)情況,可能一周分析一次,如果要把這一百臺(tái)機(jī)器或者一千臺(tái)機(jī)器都在那放著,一周用一次對(duì)吧,非常浪費(fèi)。那能不能需要計(jì)算的時(shí)候,把這一千臺(tái)機(jī)器拿出來(lái),然后不算的時(shí)候,這一千臺(tái)機(jī)器可以去干別的事情。誰(shuí)能做這個(gè)事兒呢?只有云計(jì)算,可以為大數(shù)據(jù)的運(yùn)算提供資源層的靈活性。而云計(jì)算也會(huì)部署大數(shù)據(jù)放到它的PaaS平臺(tái)上,作為一個(gè)非常非常重要的通用應(yīng)用。因?yàn)榇髷?shù)據(jù)平臺(tái)能夠使得多臺(tái)機(jī)器一起干一個(gè)事兒,這個(gè)東西不是一般人能開(kāi)發(fā)出來(lái)的,也不是一般人玩得轉(zhuǎn)的,怎么也得雇個(gè)幾十上百號(hào)人才能把這個(gè)玩起來(lái),所以說(shuō)就像數(shù)據(jù)庫(kù)一樣,其實(shí)還是需要有一幫專(zhuān)業(yè)的人來(lái)玩這個(gè)東西。現(xiàn)在公有云上基本上都會(huì)有大數(shù)據(jù)的解決方案了,一個(gè)小公司我需要大數(shù)據(jù)平臺(tái)的時(shí)候,不需要采購(gòu)一千臺(tái)機(jī)器,只要到公有云上一點(diǎn),這一千臺(tái)機(jī)器都出來(lái)了,并且上面已經(jīng)部署好了的大數(shù)據(jù)平臺(tái),只要把數(shù)據(jù)放進(jìn)去算就可以了。
云計(jì)算需要大數(shù)據(jù),大數(shù)據(jù)需要云計(jì)算,兩個(gè)人就這樣結(jié)合了。
四、人工智能擁抱大數(shù)據(jù)
4.1 機(jī)器什么時(shí)候才能懂人心
雖說(shuō)有了大數(shù)據(jù),人的欲望總是這個(gè)不能夠滿足。雖說(shuō)在大數(shù)據(jù)平臺(tái)里面有搜索引擎這個(gè)東西,想要什么東西我一搜就出來(lái)了。但是也存在這樣的情況,我想要的東西不會(huì)搜,表達(dá)不出來(lái),搜索出來(lái)的又不是我想要的。例如音樂(lè)軟件里面推薦一首歌,這首歌我沒(méi)聽(tīng)過(guò),當(dāng)然不知道名字,也沒(méi)法搜,但是軟件推薦給我,我的確喜歡,這就是搜索做不到的事情。當(dāng)人們使用這種應(yīng)用的時(shí)候,會(huì)發(fā)現(xiàn)機(jī)器知道我想要什么,而不是說(shuō)當(dāng)我想要的時(shí)候,去機(jī)器里面搜索。這個(gè)機(jī)器真像我的朋友一樣懂我,這就有點(diǎn)人工智能的意思了。
人們很早就在想這個(gè)事情了。最早的時(shí)候,人們想象,如果要是有一堵墻,墻后面是個(gè)機(jī)器,我給它說(shuō)話,它就給我回應(yīng),我如果感覺(jué)不出它那邊是人還是機(jī)器,那它就真的是一個(gè)人工智能的東西了。
4.2 讓機(jī)器學(xué)會(huì)推理
怎么才能做到這一點(diǎn)呢?人們就想:我首先要告訴計(jì)算機(jī)人類(lèi)的推理的能力。你看人重要的是什么呀,人和動(dòng)物的區(qū)別在什么呀,就是能推理。我要是把我這個(gè)推理的能力啊告訴機(jī)器,機(jī)器就能根據(jù)你的提問(wèn),推理出相應(yīng)的回答,真能這樣多好。推理其實(shí)人們慢慢的讓機(jī)器能夠做到一些了,例如證明數(shù)學(xué)公式。這是一個(gè)非常讓人驚喜的一個(gè)過(guò)程,機(jī)器竟然能夠證明數(shù)學(xué)公式。但是慢慢發(fā)現(xiàn)其實(shí)這個(gè)結(jié)果,也沒(méi)有那么令人驚喜,因?yàn)榇蠹野l(fā)現(xiàn)了一個(gè)問(wèn)題,數(shù)學(xué)公式非常嚴(yán)謹(jǐn),推理過(guò)程也非常嚴(yán)謹(jǐn),而且數(shù)學(xué)公式很容易拿機(jī)器來(lái)進(jìn)行表達(dá),程序也相對(duì)容易表達(dá)。然而人類(lèi)的語(yǔ)言就沒(méi)這么簡(jiǎn)單了,比如今天晚上,你和你女朋友約會(huì),你女朋友說(shuō):如果你早來(lái),我沒(méi)來(lái),你等著,如果我早來(lái),你沒(méi)來(lái),你等著。這個(gè)機(jī)器就比比較難理解了,但是人都懂,所以你和女朋友約會(huì),你是不敢遲到的。
4.3 教給機(jī)器知識(shí)
所以僅僅告訴機(jī)器嚴(yán)格的推理是不夠的,還要告訴機(jī)器一些知識(shí)。但是知識(shí)這個(gè)事兒,一般人可能就做不來(lái)了,可能專(zhuān)家可以,比如語(yǔ)言領(lǐng)域的專(zhuān)家,或者財(cái)經(jīng)領(lǐng)域的專(zhuān)家。語(yǔ)言領(lǐng)域和財(cái)經(jīng)領(lǐng)域知識(shí)能不能表示成像數(shù)學(xué)公式一樣稍微嚴(yán)格點(diǎn)呢?例如語(yǔ)言專(zhuān)家可能會(huì)總結(jié)出主謂賓定狀補(bǔ)這些語(yǔ)法規(guī)則,主語(yǔ)后面一定是謂語(yǔ),謂語(yǔ)后面一定是賓語(yǔ),將這些總結(jié)出來(lái),并嚴(yán)格表達(dá)出來(lái)不久行了嗎?后來(lái)發(fā)現(xiàn)這個(gè)不行,太難總結(jié)了,語(yǔ)言表達(dá)千變?nèi)f化。就拿主謂賓的例子,很多時(shí)候在口語(yǔ)里面就省略了謂語(yǔ),別人問(wèn):你誰(shuí)啊?我回答:我劉超。但是你不能規(guī)定在語(yǔ)音語(yǔ)義識(shí)別的時(shí)候,要求對(duì)著機(jī)器說(shuō)標(biāo)準(zhǔn)的書(shū)面語(yǔ),這樣還是不夠智能,就像羅永浩在一次演講中說(shuō)的那樣,每次對(duì)著手機(jī),用書(shū)面語(yǔ)說(shuō):請(qǐng)幫我呼叫某某某,這是一件很尷尬的事情。
人工智能這個(gè)階段叫做專(zhuān)家系統(tǒng)。專(zhuān)家系統(tǒng)不易成功,一方面是知識(shí)比較難總結(jié),另一方面總結(jié)出來(lái)的知識(shí)難以教給計(jì)算機(jī)。因?yàn)槟阕约哼€迷迷糊糊,似乎覺(jué)得有規(guī)律,就是說(shuō)不出來(lái),就怎么能夠通過(guò)編程教給計(jì)算機(jī)呢?
4.4 算了,教不會(huì)你自己學(xué)吧
于是人們想到,看來(lái)機(jī)器是和人完全不一樣的物種,干脆讓機(jī)器自己學(xué)習(xí)好了。機(jī)器怎么學(xué)習(xí)呢?既然機(jī)器的統(tǒng)計(jì)能力這么強(qiáng),基于統(tǒng)計(jì)學(xué)習(xí),一定能從大量的數(shù)字中發(fā)現(xiàn)一定的規(guī)律。
其實(shí)在娛樂(lè)圈有很好的一個(gè)例子,可見(jiàn)一斑
有一位網(wǎng)友統(tǒng)計(jì)了知名歌手在大陸發(fā)行的 9 張專(zhuān)輯中 117 首歌曲的歌詞,同一詞語(yǔ)在一首歌出現(xiàn)只算一次,形容詞、名詞和動(dòng)詞的前十名如下表所示(詞語(yǔ)后面的數(shù)字是出現(xiàn)的次數(shù)):
a形容詞b名詞c動(dòng)詞
0孤獨(dú):340生命:500愛(ài):54
1自由:171路:371碎:37
2迷惘:162夜:292哭:35
3堅(jiān)強(qiáng):133天空:243死:27
4絕望:84孩子:234飛:26
5青春:75雨:215夢(mèng)想:14
6迷茫:66石頭:96祈禱:10
7光明:67鳥(niǎo):97離去:10
如果我們隨便寫(xiě)一串?dāng)?shù)字,然后按照數(shù)位依次在形容詞、名詞和動(dòng)詞中取出一個(gè)詞,連在一起會(huì)怎么樣呢?
例如取圓周率 3.1415926,對(duì)應(yīng)的詞語(yǔ)是:堅(jiān)強(qiáng),路,飛,自由,雨,埋,迷惘。稍微連接和潤(rùn)色一下:
堅(jiān)強(qiáng)的孩子,
依然前行在路上,
張開(kāi)翅膀飛向自由,
讓雨水埋葬他的迷惘。
是不是有點(diǎn)感覺(jué)了?當(dāng)然真正基于統(tǒng)計(jì)的學(xué)習(xí)算法比這個(gè)簡(jiǎn)單的統(tǒng)計(jì)復(fù)雜的多。
然而統(tǒng)計(jì)學(xué)習(xí)比較容易理解簡(jiǎn)單的相關(guān)性,例如一個(gè)詞和另一個(gè)詞總是一起出現(xiàn),兩個(gè)詞應(yīng)該有關(guān)系,而無(wú)法表達(dá)復(fù)雜的相關(guān)性,并且統(tǒng)計(jì)方法的公式往往非常復(fù)雜,為了簡(jiǎn)化計(jì)算,常常做出各種獨(dú)立性的假設(shè),來(lái)降低公式的計(jì)算難度,然而現(xiàn)實(shí)生活中,具有獨(dú)立性的事件是相對(duì)較少的。
4.5 模擬大腦的工作方式
于是人類(lèi)開(kāi)始從機(jī)器的世界,反思人類(lèi)的世界是怎么工作的。
人類(lèi)的腦子里面不是存儲(chǔ)著大量的規(guī)則,也不是記錄著大量的統(tǒng)計(jì)數(shù)據(jù),而是通過(guò)神經(jīng)元的觸發(fā)實(shí)現(xiàn)的,每個(gè)神經(jīng)元有從其他神經(jīng)元的輸入,當(dāng)接收到輸入的時(shí)候,會(huì)產(chǎn)生一個(gè)輸出來(lái)刺激其他的神經(jīng)元,于是大量的神經(jīng)元相互反應(yīng),最終形成各種輸出的結(jié)果。例如當(dāng)人們看到美女瞳孔放大,絕不是大腦根據(jù)身材比例進(jìn)行規(guī)則判斷,也不是將人生中看過(guò)的所有的美女都統(tǒng)計(jì)一遍,而是神經(jīng)元從視網(wǎng)膜觸發(fā)到大腦再回到瞳孔。在這個(gè)過(guò)程中,其實(shí)很難總結(jié)出每個(gè)神經(jīng)元對(duì)最終的結(jié)果起到了哪些作用,反正就是起作用了。
于是人們開(kāi)始用一個(gè)數(shù)學(xué)單元模擬神經(jīng)元
這個(gè)神經(jīng)元有輸入,有輸出,輸入和輸出之間通過(guò)一個(gè)公式來(lái)表示,輸入根據(jù)重要程度不同(權(quán)重),影響著輸出。
于是將n個(gè)神經(jīng)元通過(guò)像一張神經(jīng)網(wǎng)絡(luò)一樣連接在一起,n這個(gè)數(shù)字可以很大很大,所有的神經(jīng)元可以分成很多列,每一列很多個(gè)排列起來(lái),每個(gè)神經(jīng)元的對(duì)于輸入的權(quán)重可以都不相同,從而每個(gè)神經(jīng)元的公式也不相同。當(dāng)人們從這張網(wǎng)絡(luò)中輸入一個(gè)東西的時(shí)候,希望輸出一個(gè)對(duì)人類(lèi)來(lái)講正確的結(jié)果。例如上面的例子,輸入一個(gè)寫(xiě)著2的圖片,輸出的列表里面第二個(gè)數(shù)字最大,其實(shí)從機(jī)器來(lái)講,它既不知道輸入的這個(gè)圖片寫(xiě)的是2,也不知道輸出的這一系列數(shù)字的意義,沒(méi)關(guān)系,人知道意義就可以了。正如對(duì)于神經(jīng)元來(lái)說(shuō),他們既不知道視網(wǎng)膜看到的是美女,也不知道瞳孔放大是為了看的清楚,反正看到美女,瞳孔放大了,就可以了。
對(duì)于任何一張神經(jīng)網(wǎng)絡(luò),誰(shuí)也不敢保證輸入是2,輸出一定是第二個(gè)數(shù)字最大,要保證這個(gè)結(jié)果,需要訓(xùn)練和學(xué)習(xí)。畢竟看到美女而瞳孔放大也是人類(lèi)很多年進(jìn)化的結(jié)果。學(xué)習(xí)的過(guò)程就是,輸入大量的圖片,如果結(jié)果不是想要的結(jié)果,則進(jìn)行調(diào)整。如何調(diào)整呢,就是每個(gè)神經(jīng)元的每個(gè)權(quán)重都向目標(biāo)進(jìn)行微調(diào),由于神經(jīng)元和權(quán)重實(shí)在是太多了,所以整張網(wǎng)絡(luò)產(chǎn)生的結(jié)果很難表現(xiàn)出非此即彼的結(jié)果,而是向著結(jié)果微微的進(jìn)步,最終能夠達(dá)到目標(biāo)結(jié)果。當(dāng)然這些調(diào)整的策略還是非常有技巧的,需要算法的高手來(lái)仔細(xì)的調(diào)整。正如人類(lèi)見(jiàn)到美女,瞳孔一開(kāi)始沒(méi)有放大到能看清楚,于是美女跟別人跑了,下次學(xué)習(xí)的結(jié)果是瞳孔放大一點(diǎn)點(diǎn),而不是放大鼻孔。
4.6 沒(méi)道理但做得到
聽(tīng)起來(lái)也沒(méi)有那么有道理,但是的確能做到,就是這么任性。
神經(jīng)網(wǎng)絡(luò)的普遍性定理是這樣說(shuō)的,假設(shè)某個(gè)人給你某種復(fù)雜奇特的函數(shù),f(x):
不管這個(gè)函數(shù)是什么樣的,總會(huì)確保有個(gè)神經(jīng)網(wǎng)絡(luò)能夠?qū)θ魏慰赡艿妮斎離,其值f(x)(或者某個(gè)能夠準(zhǔn)確的近似)是神經(jīng)網(wǎng)絡(luò)的輸出。
如果在函數(shù)代表著規(guī)律,也意味著這個(gè)規(guī)律無(wú)論多么奇妙,多么不能理解,都是能通過(guò)大量的神經(jīng)元,通過(guò)大量權(quán)重的調(diào)整,表示出來(lái)的。
4.7 人工智能的經(jīng)濟(jì)學(xué)解釋
這讓我想到了經(jīng)濟(jì)學(xué),于是比較容易理解了。
我們把每個(gè)神經(jīng)元當(dāng)成社會(huì)中從事經(jīng)濟(jì)活動(dòng)的個(gè)體。于是神經(jīng)網(wǎng)絡(luò)相當(dāng)于整個(gè)經(jīng)濟(jì)社會(huì),每個(gè)神經(jīng)元對(duì)于社會(huì)的輸入,都有權(quán)重的調(diào)整,做出相應(yīng)的輸出,比如工資漲了,菜價(jià)也漲了,股票跌了,我應(yīng)該怎么辦,怎么花自己的錢(qián)。這里面沒(méi)有規(guī)律么?肯定有,但是具體什么規(guī)律呢?卻很難說(shuō)清楚。
基于專(zhuān)家系統(tǒng)的經(jīng)濟(jì)屬于計(jì)劃經(jīng)濟(jì),整個(gè)經(jīng)濟(jì)規(guī)律的表示不希望通過(guò)每個(gè)經(jīng)濟(jì)個(gè)體的獨(dú)立決策表現(xiàn)出來(lái),而是希望通過(guò)專(zhuān)家的高屋建瓴和遠(yuǎn)見(jiàn)卓識(shí)總結(jié)出來(lái)。專(zhuān)家永遠(yuǎn)不可能知道哪個(gè)城市的哪個(gè)街道缺少一個(gè)賣(mài)甜豆腐腦的。于是專(zhuān)家說(shuō)應(yīng)該產(chǎn)多少鋼鐵,產(chǎn)多少饅頭,往往距離人民生活的真正需求有較大的差距,就算整個(gè)計(jì)劃書(shū)寫(xiě)個(gè)幾百頁(yè),也無(wú)法表達(dá)隱藏在人民生活中的小規(guī)律。
基于統(tǒng)計(jì)的宏觀調(diào)控就靠譜的多了,每年統(tǒng)計(jì)局都會(huì)統(tǒng)計(jì)整個(gè)社會(huì)的就業(yè)率,通脹率,GDP等等指標(biāo),這些指標(biāo)往往代表著很多的內(nèi)在規(guī)律,雖然不能夠精確表達(dá),但是相對(duì)靠譜。然而基于統(tǒng)計(jì)的規(guī)律總結(jié)表達(dá)相對(duì)比較粗糙,比如經(jīng)濟(jì)學(xué)家看到這些統(tǒng)計(jì)數(shù)據(jù)可以總結(jié)出長(zhǎng)期來(lái)看房?jī)r(jià)是漲還是跌,股票長(zhǎng)期來(lái)看是漲還是跌,如果經(jīng)濟(jì)總體上揚(yáng),房?jī)r(jià)和股票應(yīng)該都是漲的。但是基于統(tǒng)計(jì)數(shù)據(jù),無(wú)法總結(jié)出股票,物價(jià)的微小波動(dòng)規(guī)律。
基于神經(jīng)網(wǎng)絡(luò)的微觀經(jīng)濟(jì)學(xué)才是對(duì)整個(gè)經(jīng)濟(jì)規(guī)律最最準(zhǔn)確的表達(dá),每個(gè)人對(duì)于從社會(huì)中的輸入,進(jìn)行各自的調(diào)整,并且調(diào)整同樣會(huì)作為輸入反饋到社會(huì)中。想象一下股市行情細(xì)微的波動(dòng)曲線,正是每個(gè)獨(dú)立的個(gè)體各自不斷交易的結(jié)果,沒(méi)有統(tǒng)一的規(guī)律可循。而每個(gè)人根據(jù)整個(gè)社會(huì)的輸入進(jìn)行獨(dú)立決策,當(dāng)某些因素經(jīng)過(guò)多次訓(xùn)練,也會(huì)形成宏觀上的統(tǒng)計(jì)性的規(guī)律,這也就是宏觀經(jīng)濟(jì)學(xué)所能看到的。例如每次貨幣大量發(fā)行,最后房?jī)r(jià)都會(huì)上漲,多次訓(xùn)練后,人們也就都學(xué)會(huì)了。
4.8 人工智能需要大數(shù)據(jù)
然而神經(jīng)網(wǎng)絡(luò)包含這么多的節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)包含非常多的參數(shù),整個(gè)參數(shù)量實(shí)在是太大了,需要的計(jì)算量實(shí)在太大,但是沒(méi)有關(guān)系啊,我們有大數(shù)據(jù)平臺(tái),可以匯聚多臺(tái)機(jī)器的力量一起來(lái)計(jì)算,才能在有限的時(shí)間內(nèi)得到想要的結(jié)果。
人工智能可以做的事情非常多,例如可以鑒別垃圾郵件,鑒別黃色暴力文字和圖片等。這也是經(jīng)歷了三個(gè)階段的。第一個(gè)階段依賴于關(guān)鍵詞黑白名單和過(guò)濾技術(shù),包含哪些詞就是黃色或者暴力的文字。隨著這個(gè)網(wǎng)絡(luò)語(yǔ)言越來(lái)越多,詞也不斷的變化,不斷的更新這個(gè)詞庫(kù)就有點(diǎn)顧不過(guò)來(lái)。第二個(gè)階段時(shí),基于一些新的算法,比如說(shuō)貝葉斯過(guò)濾等,你不用管貝葉斯算法是什么,但是這個(gè)名字你應(yīng)該聽(tīng)過(guò),這個(gè)一個(gè)基于概率的算法。第三個(gè)階段就是基于大數(shù)據(jù)和人工智能,進(jìn)行更加精準(zhǔn)的用戶畫(huà)像和文本理解和圖像理解。
由于人工智能算法多是依賴于大量的數(shù)據(jù)的,這些數(shù)據(jù)往往需要面向某個(gè)特定的領(lǐng)域(例如電商,郵箱)進(jìn)行長(zhǎng)期的積累,如果沒(méi)有數(shù)據(jù),就算有人工智能算法也白搭,所以人工智能程序很少像前面的IaaS和PaaS一樣,將人工智能程序給某個(gè)客戶安裝一套讓客戶去用,因?yàn)榻o某個(gè)客戶單獨(dú)安裝一套,客戶沒(méi)有相關(guān)的數(shù)據(jù)做訓(xùn)練,結(jié)果往往是很差的。但是云計(jì)算廠商往往是積累了大量數(shù)據(jù)的,于是就在云計(jì)算廠商里面安裝一套,暴露一個(gè)服務(wù)接口,比如您想鑒別一個(gè)文本是不是涉及黃色和暴力,直接用這個(gè)在線服務(wù)就可以了。這種形勢(shì)的服務(wù),在云計(jì)算里面稱為軟件即服務(wù),SaaS (Software AS A Service)
于是工智能程序作為SaaS平臺(tái)進(jìn)入了云計(jì)算。
五、云計(jì)算,大數(shù)據(jù),人工智能過(guò)上了美好的生活
終于云計(jì)算的三兄弟湊齊了,分別是IaaS,PaaS和SaaS,所以一般在一個(gè)云計(jì)算平臺(tái)上,云,大數(shù)據(jù),人工智能都能找得到。對(duì)一個(gè)大數(shù)據(jù)公司,積累了大量的數(shù)據(jù),也會(huì)使用一些人工智能的算法提供一些服務(wù)。對(duì)于一個(gè)人工智能公司,也不可能沒(méi)有大數(shù)據(jù)平臺(tái)支撐。所以云計(jì)算,大數(shù)據(jù),人工智能就這樣整合起來(lái),完成了相遇,相識(shí),相知。