你是否已經(jīng)弄清楚所有關(guān)于管理和運(yùn)營(yíng)容器環(huán)境的東西了呢?你知道如何大規(guī)模地在你的數(shù)據(jù)中心內(nèi)部署它們嗎?你知道如何將你所有現(xiàn)有的應(yīng)用程序遷移到容器化的版本嗎?你知道如何讓你的程序員使用敏捷DevOps,以及讓你的IT管理員成為云計(jì)算的管理者嗎?什么,都還沒(méi)有?
我不太愿意告訴你的事實(shí)是,現(xiàn)在IT的世界已經(jīng)跳過(guò)了容器這個(gè)話題。現(xiàn)在你需要關(guān)注的是下一個(gè)大趨勢(shì):無(wú)服務(wù)計(jì)算。
我不知道大家是否會(huì)覺(jué)得將最新的這種應(yīng)用程序架構(gòu)趨勢(shì)稱之為無(wú)服務(wù)計(jì)算是一個(gè)好的說(shuō)法。畢竟如果代碼不運(yùn)行在計(jì)算機(jī)上,那么它還是不會(huì)起任何作用的。在所謂的無(wú)服務(wù)架構(gòu)中,還是以某種形式存在著服務(wù)器的。我猜測(cè)這種稱呼是在暗示,當(dāng)你提交了你的應(yīng)用程序代碼并需要執(zhí)行的時(shí)候,你并不需要關(guān)心任何服務(wù)器相關(guān)的事情,它會(huì)讓你感覺(jué)不到服務(wù)器的根本。
在云計(jì)算基礎(chǔ)架構(gòu)即服務(wù)(IaaS)中,你不需要管理你的物理基礎(chǔ)架構(gòu);而在云計(jì)算的無(wú)服務(wù)計(jì)算中,你甚至不需要管理任何虛擬機(jī)、操作系統(tǒng)或者容器。
無(wú)服務(wù)可以提供更多服務(wù)?那么到底什么是無(wú)服務(wù)計(jì)算呢?它是一種服務(wù),程序員只需要編寫(xiě)相應(yīng)的代碼并且直接將代碼當(dāng)作一個(gè)獨(dú)立的,功能化的微服務(wù)來(lái)部署即可。你可以很容易地搭建這些微服務(wù)來(lái)實(shí)施那些無(wú)服務(wù)的框架,并且通過(guò)策略來(lái)使其對(duì)支持的事件或者API調(diào)用進(jìn)行響應(yīng)。
無(wú)服務(wù)架構(gòu)被設(shè)計(jì)來(lái)擴(kuò)展固有的無(wú)狀態(tài)微服務(wù)——不像現(xiàn)在的容器技術(shù)一樣,可以同時(shí)支持狀態(tài)化計(jì)算和無(wú)狀態(tài)化計(jì)算。你可能需要使用無(wú)服務(wù)功能來(lái)處理需要高度彈性、事件驅(qū)動(dòng)型操作的應(yīng)用程序,或者來(lái)創(chuàng)建能將裸數(shù)據(jù)處理成成品數(shù)據(jù)的隨機(jī)函數(shù)流。這種事件數(shù)據(jù)流很好地和物理網(wǎng)需要的處理過(guò)程契合在一起。同時(shí)它還對(duì)在實(shí)時(shí)的數(shù)據(jù)流之上運(yùn)行的應(yīng)用程序很有幫助。
一個(gè)很知名的無(wú)服務(wù)云計(jì)算例子是Amazon Web Service的Lambda服務(wù)。這個(gè)名字取自于函數(shù)程序設(shè)計(jì)使用的匿名函數(shù)lambda。在某些程序語(yǔ)言例如JavaScript或者Ruby中,一個(gè)函數(shù)可以在預(yù)先定義的變量范圍內(nèi)以及代碼函數(shù)結(jié)束的時(shí)候執(zhí)行。還有一些程序語(yǔ)言有實(shí)際的lambda operator或者編譯器在運(yùn)行時(shí)來(lái)動(dòng)態(tài)創(chuàng)建函數(shù)對(duì)象(比如在其他代碼執(zhí)行的時(shí)候)。
那么有了無(wú)服務(wù)計(jì)算之后,真實(shí)的基礎(chǔ)架構(gòu)是如何存在其中的呢?基礎(chǔ)架構(gòu)還是存在的,只不過(guò)是在很多層的虛擬化之下。現(xiàn)在來(lái)說(shuō)說(shuō)軟件定義計(jì)算吧,隨著無(wú)服務(wù)計(jì)算的演變和進(jìn)化,在應(yīng)用程序代碼和硬件之間可能會(huì)存在數(shù)百萬(wàn)行針對(duì)系統(tǒng)和平臺(tái)定義的代碼。這是一件好事情,證明摩爾定律還沒(méi)有失效。
讓我們來(lái)看一下建立自己的私有云,無(wú)服務(wù)環(huán)境我們需要哪些復(fù)雜的虛擬化組件吧:
1. 在最底層,當(dāng)然我們是需要物理服務(wù)器的。但是在這里我們可能要改變一下對(duì)傳統(tǒng)物理服務(wù)器的概念,而是想象成一個(gè)動(dòng)態(tài)供給不同組件(處理核、硬盤(pán)、內(nèi)存、接口)的資源池。
2. 然后我們會(huì)需要在這些物理服務(wù)器之上做一層虛擬化。一個(gè)hypervisor集群可以控制這些物理服務(wù)器并且從而提供一些永久的虛擬機(jī)。我們可能還會(huì)添加一些云提供服務(wù)和自動(dòng)化的工具,就像OpenStack中的一些服務(wù)一樣。
3. 在虛擬化,云的環(huán)境中我們要部署容器集群來(lái)提供容器平臺(tái)服務(wù),類似的軟件有Docker,Kubernetes或者OpenShift。
4. 然后我們需要安裝容器化無(wú)服務(wù)的計(jì)算平臺(tái)來(lái)提供應(yīng)用程序的lambda服務(wù),類似于Platform9的Fission.io。
5. 最后,我們要?jiǎng)?chuàng)建和部署微服務(wù)應(yīng)用程序,以讓一些功能性的代碼能運(yùn)行在所有這些抽象層上。舉個(gè)例子,一個(gè)微服務(wù)的功能可以用JavaScript編寫(xiě)并且定義為一個(gè)lambda服務(wù)。然后將它匹配到某些觸發(fā)器或者API節(jié)點(diǎn)上。這樣子當(dāng)某些事件觸發(fā)了這個(gè)lambda服務(wù)的時(shí)候,它就會(huì)在自己的容器內(nèi)執(zhí)行相應(yīng)的代碼。這個(gè)容器會(huì)運(yùn)行在容器集群中,容器集群又會(huì)分布在多個(gè)運(yùn)行在hypervisor集群的虛擬機(jī)中,而這些hypervisor又運(yùn)行在不同的物理服務(wù)器上。
應(yīng)用程序開(kāi)發(fā)者可能只會(huì)看到并且只會(huì)和lambda服務(wù)接口打交道,因此他們可能會(huì)覺(jué)得那些看不見(jiàn)的資源都是無(wú)服務(wù)的。這種架構(gòu)的確讓基礎(chǔ)架構(gòu)在各個(gè)方面變得更像“云”。現(xiàn)在它可以動(dòng)態(tài)地提供高度可伸縮的,有效的,按需供給的,彈性的,魯棒的資源,并且很好地利用了密集型的商業(yè)資源。
IT現(xiàn)在都用它來(lái)干什么?無(wú)服務(wù)對(duì)于IT來(lái)說(shuō)又意味著什么呢?我們剛剛殘忍地知道了,無(wú)服務(wù)計(jì)算會(huì)增加多一個(gè)需要管理的架構(gòu)層。我們都還沒(méi)有對(duì)生產(chǎn)環(huán)境中容器的出現(xiàn)和管理完全消化呢。你能想象將來(lái)你要管理成千上萬(wàn)虛擬機(jī)的情形嗎?那么現(xiàn)在你想一下明天你需要管理10萬(wàn)個(gè)短暫的容器,以及可能是每天數(shù)百萬(wàn)的微服務(wù)操作吧。看到這么繁重的任務(wù),IT可能會(huì)放棄并且讓用戶去使用公有云。不過(guò)對(duì)我來(lái)說(shuō),這雖然是一個(gè)很大的轉(zhuǎn)變,但是同時(shí)也是一個(gè)很大的機(jī)會(huì)。IT部門(mén)會(huì)變成內(nèi)部的服務(wù)提供商,而且無(wú)服務(wù)也是值得為之努力的新技術(shù)。IT可以利用這一項(xiàng)新的服務(wù),將平時(shí)日常的基礎(chǔ)架構(gòu)運(yùn)營(yíng)的重心放到了為商業(yè)運(yùn)作開(kāi)發(fā)能幫助他們的新功能。
IT可能變得更像ITDevs,引領(lǐng)人們接納事件驅(qū)動(dòng)型的功能函數(shù)(現(xiàn)在IT運(yùn)營(yíng)的基礎(chǔ)),云管理(IT財(cái)務(wù)管理),挖掘機(jī)器數(shù)據(jù)(作為IT數(shù)據(jù)管理的延伸)以及更多其他方面。
換句話說(shuō),朝著阻力最大的路勁學(xué)習(xí)可以在未來(lái)提升我們真實(shí)的商業(yè)運(yùn)作——同時(shí)加上使用大數(shù)據(jù)、物聯(lián)網(wǎng)、全球化、移動(dòng)等其他大趨勢(shì),會(huì)讓商業(yè)運(yùn)作越來(lái)越像IT的運(yùn)作。