科普文:雲計算、大數據和人工智慧(三)

二、雲計算不光管資源,也要管應用

科普文:雲計算、大數據和人工智能(三)

有了IaaS,實現了資源層面的彈性就夠了嗎?顯然不是,還有應用層面的彈性。

這裡舉個例子:比如說實現一個電商的應用,平時十臺機器就夠了,雙十一需要一百臺。你可能覺得很好辦啊,有了IaaS,新創建九十臺機器就可以了啊。但90臺機器創建出來是空的,電商應用並沒有放上去,只能讓公司的運維人員一臺一臺的弄,需要很長時間才能安裝好的。

雖然資源層面實現了彈性,但沒有應用層的彈性,依然靈活性是不夠的。有沒有方法解決這個問題呢?

人們在IaaS平臺之上又加了一層,用於管理資源以上的應用彈性的問題,這一層通常稱為PaaS(Platform As A Service)。這一層往往比較難理解,大致分兩部分:一部分筆者稱為“你自己的應用自動安裝”,一部分筆者稱為“通用的應用不用安裝”。

自己的應用自動安裝:比如電商應用是你自己開發的,除了你自己,其他人是不知道怎麼安裝的。像電商應用,安裝時需要配置支付寶或者微信的賬號,才能使別人在你的電商上買東西時,付的錢是打到你的賬戶裡面的,除了你,誰也不知道。所以安裝的過程平臺幫不了忙,但能夠幫你做得自動化,你需要做一些工作,將自己的配置信息融入到自動化的安裝過程中方可。比如上面的例子,雙十一新創建出來的90臺機器是空的,如果能夠提供一個工具,能夠自動在這新的90臺機器上將電商應用安裝好,就能夠實現應用層面的真正彈性。例如Puppet、Chef、Ansible、Cloud Foundary都可以幹這件事情,最新的容器技術Docker能更好的幹這件事情。

通用的應用不用安裝:所謂通用的應用,一般指一些複雜性比較高,但大家都在用的,例如數據庫。幾乎所有的應用都會用數據庫,但數據庫軟件是標準的,雖然安裝和維護比較複雜,但無論誰安裝都是一樣。這樣的應用可以變成標準的PaaS層的應用放在雲平臺的界面上。當用戶需要一個數據庫時,一點就出來了,用戶就可以直接用了。有人問,既然誰安裝都一個樣,那我自己來好了,不需要花錢在雲平臺上買。當然不是,數據庫是一個非常難的東西,光Oracle這家公司,靠數據庫就能賺這麼多錢。買Oracle也是要花很多錢的。

然而大多數雲平臺會提供MySQL這樣的開源數據庫,又是開源,錢不需要花這麼多了。但維護這個數據庫,卻需要專門招一個很大的團隊,如果這個數據庫能夠優化到能夠支撐雙十一,也不是一年兩年能夠搞定的。

比如您是一個做單車的,當然沒必要招一個非常大的數據庫團隊來幹這件事情,成本太高了,應該交給雲平臺來做這件事情,專業的事情專業的人來做,雲平臺專門養了幾百人維護這套系統,您只要專注於您的單車應用就可以了。

要麼是自動部署,要麼是不用部署,總的來說就是應用層你也要少操心,這就是PaaS層的重要作用。

科普文:雲計算、大數據和人工智能(三)

雖說腳本的方式能夠解決自己的應用的部署問題,然而不同的環境千差萬別,一個腳本往往在一個環境上運行正確,到另一個環境就不正確了。

而容器是能更好地解決這個問題。

科普文:雲計算、大數據和人工智能(三)

容器是 Container,Container另一個意思是集裝箱,其實容器的思想就是要變成軟件交付的集裝箱。集裝箱的特點:一是封裝,二是標準。

科普文:雲計算、大數據和人工智能(三)

在沒有集裝箱的時代,假設將貨物從 A運到 B,中間要經過三個碼頭、換三次船。每次都要將貨物卸下船來,擺得七零八落,然後搬上船重新整齊擺好。因此在沒有集裝箱時,每次換船,船員們都要在岸上待幾天才能走。

科普文:雲計算、大數據和人工智能(三)

有了集裝箱以後,所有的貨物都打包在一起了,並且集裝箱的尺寸全部一致,所以每次換船時,一個箱子整體搬過去就行了,小時級別就能完成,船員再也不用上岸長時間耽擱了。

這是集裝箱“封裝”、“標準”兩大特點在生活中的應用。

科普文:雲計算、大數據和人工智能(三)

那麼容器如何對應用打包呢?還是要學習集裝箱。首先要有個封閉的環境,將貨物封裝起來,讓貨物之間互不干擾、互相隔離,這樣裝貨卸貨才方便。好在 Ubuntu中的LXC技術早就能做到這一點。

封閉的環境主要使用了兩種技術,一種是看起來是隔離的技術,稱為 Namespace,也即每個 Namespace中的應用看到的是不同的 IP地址、用戶空間、程號等。另一種是用起來是隔離的技術,稱為 Cgroups,也即明明整臺機器有很多的 CPU、內存,而一個應用只能用其中的一部分。

所謂的鏡像,就是將你焊好集裝箱的那一刻,將集裝箱的狀態保存下來,就像孫悟空說:“定”,集裝箱裡面就定在了那一刻,然後將這一刻的狀態保存成一系列文件。這些文件的格式是標準的,誰看到這些文件都能還原當時定住的那個時刻。將鏡像還原成運行時的過程(就是讀取鏡像文件,還原那個時刻的過程)就是容器運行的過程。

有了容器,使得 PaaS層對於用戶自身應用的自動部署變得快速而優雅。


分享到:


相關文章: