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