雲計算、大數據和人工智能(一)雲計算

序言

近些年, 雲計算、大數據和人工智能,這幾個關鍵字在IT領域非常火.作為軟件行業的從業者(技術人員)其實大家,在日常工作和生活中也多少接觸得到,也能大概的有個瞭解.因為個人學習興趣,想稍微系統的瞭解下相關的知識,所以,在網上看了一些文章,其中有一篇以面向非技術者的視角,把這三者,以及互相間的關係講的很明白.所以想分享給大家.全文因為是面向非技術者,所以有些地方講的有些太通俗,看起來很有些冗長,所以個人稍微結合技術者的視角,再結合自己的理解,分享出來。


雲計算、大數據和人工智能(一)雲計算

1 雲計算的目標

雲計算最初的目標是對資源的管理.

管理的主要是:計算資源、網絡資源、存儲資源

※這裡大家日常工作中。服務器相關應該用到過虛擬機。其實可以理解為資源管理的雛形。

1. 管數據中心就像配電腦

計算資源:CPU,內存

網絡資源:工作電腦網口或者無線網卡,通過路由器,鏈接到公司網絡。

存儲資源:硬盤

對於一臺電腦是這個樣子的,對於一個數據中心也是同樣的。公司服務器的機房,有很多的服務器,這些服務器也是有CPU、內存、硬盤的,也是通過類似路由器的設備鏈接公司上網絡的。這時的問題就是:運營數據中心的人是怎麼把這些設備統一的管理起來的呢?

2. 靈活就是想啥時要都有,想要多少都行

管理的目標就是要達到兩個方面的靈活性。

時間靈活性:想什麼時候要就什麼時候要,需要的時候一點就出來了。

虛擬機服務器管理員,隨時可以從服務器上劃分出新的虛擬機。

如果去一個雲計算的平臺上,他要想要這個資源時,只要一點就有了。

空間靈活性:想要多少就有多少。

虛擬機硬盤大小分配。

雲盤空間大小分配。

空間靈活性和時間靈活性,即我們常說的雲計算的彈性。而解決這個彈性的問題,經歷了漫長時間的發展。

3. 物理設備不靈活

第一個階段是物理設備時期。這個時期客戶需要一臺電腦,我們就買一臺放在數據中心裡。

物理設備更新換代飛速發展,例如服務器,內存動不動就是百G內存;例如網絡設備,一個端口的帶寬就能有幾十G甚至上百G;例如存儲,在數據中心至少是PB級別的(一個P是1000個T,一個T是1000個G)。

然而物理設備不能做到很好的靈活性:

首先是它缺乏時間靈活性。不能夠達到想什麼時候要就什麼時候要。從採購設備,到安裝部署花費大量時間。時間靈活性非常差。

其次是它的空間靈活性也不行。例如用戶需要一個很小很小的電腦,但現在哪還有這麼小型號的電腦?不能為了滿足用戶只要一個G的內存是80G硬盤的,就去買一個這麼小的機器。但是如果買一個大的,又會因為電腦大,需要向用戶多收錢,可用戶需要用的只有那麼小一點,所以多付錢就很冤。

4. 虛擬化靈活多了

虛擬化。用戶不是隻要一個很小的電腦麼?數據中心的物理設備都很強大,我可以從物理的CPU、內存、硬盤中虛擬出一小塊來給客戶,同時也可以虛擬出一小塊來給其他客戶。每個客戶只能看到自己的那一小塊,但其實每個客戶用的是整個大的設備上的一小塊。

這樣空間靈活性和時間靈活性就基本解決了。

上文提到過公司內服務器虛擬機的運用,同理。

5. 虛擬世界的賺錢與情懷

在虛擬化階段,最牛的公司是VMware。它是實現虛擬化技術比較早的一家公司,可以實現計算、網絡、存儲的虛擬化。這家公司很牛,性能做得非常好,虛擬化軟件賣得也非常好,賺了好多的錢,後來讓EMC(世界五百強,存儲廠商第一品牌)給收購了。

但這個世界上還是有很多有情懷的人的,尤其是程序員裡面。有情懷的人喜歡做什麼事情?開源。

世界上總有一些大牛看不慣錢都讓一家賺了去的情況。大牛們覺得,這個技術你會我也會;你能開發出來,我也能。我開發出來就是不收錢,把代碼拿出來分享給大家,全世界誰用都可以,所有的人都可以享受到好處,這個叫做開源。

比如最近的蒂姆·伯納斯·李就是個非常有情懷的人。2017年,他因“發明萬維網、第一個瀏覽器和使萬維網得以擴展的基本協議和算法”而獲得2016年度的圖靈獎。圖靈獎就是計算機界的諾貝爾獎。然而他最令人敬佩的是,他將萬維網,也就是我們常見的WWW技術無償貢獻給全世界免費使用。我們現在在網上的所有行為都應該感謝他的功勞,如果他將這個技術拿來收錢,應該和比爾蓋茨差不多有錢。

在虛擬化軟件也一樣,有了VMware,這個軟件非常貴。那就有大牛寫了兩個開源的虛擬化軟件,一個叫做Xen,一個叫做KVM。

6. 虛擬化的半自動和雲計算的全自動

要說虛擬化軟件解決了靈活性問題,其實並不全對。因為虛擬化軟件一般創建一臺虛擬的電腦,是需要人工指定這臺虛擬電腦放在哪臺物理機上的。這一過程可能還需要比較複雜的人工配置。所以使用VMware的虛擬化軟件,需要考一個很牛的證書,而能拿到這個證書的人,薪資是相當高,也可見覆雜程度。

所以僅僅憑虛擬化軟件所能管理的物理機的集群規模都不是特別大,一般在十幾臺、幾十臺、最多百臺這麼一個規模。

這一方面會影響時間靈活性:雖然虛擬出一臺電腦的時間很短,但是隨著集群規模的擴大,人工配置的過程越來越複雜,越來越耗時。另一方面也影響空間靈活性:當用戶數量多時,這點集群規模,還遠達不到想要多少要多少的程度,很可能這點資源很快就用完了,還得去採購。

※上面的問題,目前公司一些部門使用虛擬機服務器,同樣面臨這樣的問題。

所以隨著集群的規模越來越大,基本都是千臺起步,動輒上萬臺、甚至幾十上百萬臺。如果去查一下BAT,包括網易、谷歌、亞馬遜,服務器數目都大的嚇人。這麼多機器要靠人去選一個位置放這臺虛擬化的電腦並做相應的配置,幾乎是不可能的事情,還是需要機器去做這個事情。

人們發明了各種各樣的算法來做這個事情,算法的名字叫做調度(Scheduler)。通俗一點說,就是有一個調度中心,幾千臺機器都在一個池子裡面,無論用戶需要多少CPU、內存、硬盤的虛擬電腦,調度中心會自動在大池子裡面找一個能夠滿足用戶需求的地方,把虛擬電腦啟動起來做好配置,用戶就直接能用了。這個階段我們稱為池化或者雲化。到了這個階段,才可以稱為雲計算,在這之前都只能叫虛擬化。

7. 雲計算的私有與公有

雲計算大致分兩種:一個是私有云,一個是公有云,還有人把私有云和公有云連接起來稱為混合雲,這裡暫且不說這個。

私有云:把虛擬化和雲化的這套軟件部署在別人的數據中心裡面。使用私有云的用戶往往很有錢,自己買地建機房、自己買服務器,然後讓雲廠商部署在自己這裡。VMware後來除了虛擬化,也推出了雲計算的產品,並且在私有云市場賺的盆滿缽滿。

公有云:把虛擬化和雲化軟件部署在雲廠商自己數據中心裡面的,用戶不需要很大的投入,只要註冊一個賬號,就能在一個網頁上點一下創建一臺虛擬電腦。例如AWS即亞馬遜的公有云;例如國內的阿里雲、騰訊雲、網易雲等。

8. 雲計算的賺錢與情懷

公有云的第一名亞馬遜過得很爽,第二名Rackspace過得就一般了。沒辦法,這就是互聯網行業的殘酷性,多是贏者通吃的模式。所以第二名如果不是雲計算行業的,很多人可能都沒聽過了。

第二名就想,我幹不過老大怎麼辦呢?開源吧。如上所述,亞馬遜雖然使用了開源的虛擬化技術,但云化的代碼是閉源的。很多想做又做不了雲化平臺的公司,只能眼巴巴的看著亞馬遜掙大錢。Rackspace把源代碼一公開,整個行業就可以一起把這個平臺越做越好,兄弟們大家一起上,和老大拼了。

於是Rackspace和美國航空航天局合作創辦了開源軟件OpenStack,如上圖所示OpenStack的架構圖,能夠看到三個關鍵字:Compute計算、Networking網絡、Storage存儲。還是一個計算、網絡、存儲的雲化管理平臺。

當然第二名的技術也是非常棒的,有了OpenStack之後,果真像Rackspace想的一樣,所有想做雲的大企業都瘋了,你能想象到的所有如雷貫耳的大型IT企業:IBM、惠普、戴爾、華為、聯想等都瘋了。

原來雲平臺大家都想做,看著亞馬遜和VMware賺了這麼多錢,眼巴巴看著沒辦法,想自己做一個好像難度還挺大。現在好了,有了這樣一個開源的雲平臺OpenStack,所有的IT廠商都加入到這個社區中來,對這個雲平臺進行貢獻,包裝成自己的產品,連同自己的硬件設備一起賣。有的做了私有云,有的做了公有云,OpenStack已經成為開源雲平臺的事實標準。

9. IaaS, 資源層面的靈活性

隨著OpenStack的技術越來越成熟,可以管理的規模也越來越大,並且可以有多個OpenStack集群部署多套。然後進行統一的管理。這樣整個規模就更大了。

在這個規模下,對於普通用戶的感知來講,基本能夠做到想什麼時候要就什麼什麼要,想要多少就要多少。還是拿雲盤舉例子,每個用戶雲盤都分配了5T甚至更大的空間,如果有1億人,那加起來空間多大啊。

其實背後的機制是這樣的:分配你的空間,你可能只用了其中很少一點,比如說它分配給你了5個T,這麼大的空間僅僅是你看到的,而不是真的就給你了,你其實只用了50個G,則真實給你的就是50個G,隨著你文件的不斷上傳,分給你的空間會越來越多。

當大家都上傳,雲平臺發現快滿了的時候(例如用了70%),會採購更多的服務器,擴充背後的資源,這個對用戶是透明的、看不到的。從感覺上來講,就實現了雲計算的彈性。其實有點像銀行,給儲戶的感覺是什麼時候取錢都有,只要不同時擠兌,銀行就不會垮。

10. 總結

到了這個階段,雲計算基本上實現了時間靈活性和空間靈活性;實現了計算、網絡、存儲資源的彈性。計算、網絡、存儲我們常稱為基礎設施Infranstracture, 因而這個階段的彈性稱為資源層面的彈性。管理資源的雲平臺,我們稱為基礎設施服務,也就是我們常聽到的IaaS(Infranstracture As A Service)。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

※容器的概念在web開發中,時下也是非常重要的一個概念。新的一些web技術,很多都用到了webcomponent的概念。這個在實際項目中是切實用得到的。有興趣的網友


雲計算、大數據和人工智能(一)雲計算

可以瞭解下。


分享到:


相關文章: