五分鐘學後端技術:一篇文章告訴你什麼是雲計算!

作者:劉超
轉自公衆號【劉超的通俗雲計算】

什麼是雲計算

早在十年前,市場上就出現了很多和雲計算相關的崗位,當時正是雲計算技術最火熱的時代,不管是BAT還是華爲等企業都開始佈局雲計算,於是OpenStack研發、容器研發、底層開發等相關崗位相應地也越來越多,雖然這幾年大數據和AI的風頭已經完全壓過了雲計算,但是這一門技術仍然在現如今的技術體系中佔有很重要的位置。那麼,到底什麼是雲計算,就是我們每一個要學習雲計算技術的朋友要了解的事情了,根據百度百科的介紹

大數據(big data),IT行業術語,是指無法在一定時間範圍內用常規軟件工具進行捕捉、管理和處理的數據集合,是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的信息資產。
在維克托·邁爾-舍恩伯格及肯尼斯·庫克耶編寫的《大數據時代》 [1] 中大數據指不用隨機分析法(抽樣調查)這樣捷徑,而採用所有數據進行分析處理。大數據的5V特點(IBM提出):Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價值密度)、Veracity(真實性)。 [2]

思維導圖

雲計算

雲計算的發展史

物理機時代

雲計算的整個過程,用一個詞來講就是“分久必合,合久必分”。

雲計算其實主要解決了四個方面的內容:計算,網絡,存儲,應用。前三者是資源層面的,最後是應用層面的。

計算是CPU和內存,爲啥?1+1這個最簡單的算法是把1放在內存裏面,運行加法是CPU做的,做完了結果2又保存在內存裏面。
網絡就是你插根網線能上網。
存儲就是你下個電影有地方放。本次討論就是圍繞這四個部分來講的。
 在原始社會,大家最愛用的是物理設備:

服務器用的是物理機,例如戴爾,惠普,IBM,聯想等物理服務器,隨着硬件設備的進步,物理服務器越來越強大了,64核128G內存都算是普通配置。
網絡用的是硬件交換機和路由器,例如思科的,華爲的,從1GE到10GE,現在有40GE和100GE,帶寬越來越牛。
存儲方面有的用普通的磁盤,也有了更快的SSD盤。容量從M,到G,連筆記本電腦都能配置到T,更何況磁盤陣列。
 如果部署應用直接使用物理機,看起來很爽,總有種土豪的感覺,卻又大大的缺點:

人工運維:如果你在一臺服務器上安裝軟件,把系統安裝壞了,怎麼辦?只有重裝。當你想配置一下交換機的參數,需要串口連上去進行配置。當你想增加一塊磁盤,總要買一塊插進服務器。這些都需要人工來,而且很大可能要求機房。你們公司在北五環,機房在南六環,這酸爽。
浪費資源:其實你只想部署一個小小的網站,卻要用128G的內存。混着部署吧,就有隔離性的問題。
 隔離性差:你把好多的應用部署在同一臺物理機上,他們之間搶內存,搶cpu,一個寫滿了硬盤,另一個就沒法用了,一個弄掛了內核,另一個也同時掛了,如果部署兩個相同的應用,端口還會衝突,動不動就會出錯。
 於是有了第一次合久必分的過程,叫做虛擬化。所謂虛擬化,就是把實的變成虛的。
 

虛擬機的誕生

物理機變爲虛擬機:cpu是虛擬的,內存是虛擬的,內核是虛擬的,硬盤是虛擬的。
物理交換機變爲虛擬交換機:網卡是虛擬的,交換機是虛擬的,帶寬也是虛擬的。
物理存儲變成虛擬存儲:多塊硬盤虛擬成一大塊。
 虛擬化很好的解決了上面的三個問題:

人工運維:虛擬機的創建和刪除都可以遠程操作,虛擬機被玩壞了,刪了再建一個分鐘級別的。虛擬網絡的配置也可以遠程操作,創建網卡,分配帶寬都是調用接口就能搞定的。
浪費資源:虛擬化了以後,資源可以分配的很小很小,比如1個cpu,1G內存,1M帶寬,1G硬盤,都可以被虛擬出來。
隔離性差:每個虛擬機有獨立的cpu, 內存,硬盤,網卡,不同虛擬機的應用互不干擾。
但是虛擬化還有以下的缺點,通過虛擬化軟件創建虛擬機,需要人工指定放在哪臺機器上,硬盤放在哪個存儲設備上,網絡的VLAN ID,帶寬具體的配置,都需要人工指定。所以單單使用虛擬化的運維工程師往往有一個Excel表格,有多少臺機器,每臺機器部署了哪些虛擬機。所以,一般虛擬化的集羣數目都不是特別的大。

在虛擬化階段,領跑者是Vmware,可以實現基本的計算,網絡,存儲的虛擬化。

當然這個世界有閉源,就有開源,有windows就有linux,有apple就有andord,有Vmware,就有Xen和KVM。在開源虛擬化方面,Xen方面Citrix做的不錯,後來Redhat在KVM發力不少。

對於網絡虛擬化,有Openvswitch,可以通過命令創建網橋,網卡,設置VLAN,設置帶寬。

對於存儲虛擬化,對於本地盤,有LVM,可以將多個硬盤變成一大塊盤,然後在裏面切出一小塊給用戶。

爲了解決虛擬化階段剩餘的問題,於是有了分久必合的過程。這個過程我們可以形象的稱爲池化,也就是說虛擬化已經將資源分的很細了,但是對於如此細粒度的資源靠Excel去管理,成本太高,能不能打成一個大的池,當需要資源的時候,幫助用戶自動的選擇,而非用戶指定。所以這個階段的關鍵點:調度器Scheduler。

公有云和私有云

於是vmware有了自己的vcloud。

於是基於Xen和KVM的私有云平臺CloudStack,後來Citrix將其收購後開源。

當這些私有云平臺在用戶的數據中心裏面賣的其貴無比,賺的盆滿鉢滿的時候。有其他的公司開始了另外的選擇,這就是AWS和Google,開始了公有云領域的探索。

AWS最初就是基於Xen技術進行虛擬化的,並且最終形成了公有云平臺。也許AWS最初只是不想讓自己的電商領域的利潤全部交給私有云廠商吧,於是自己的雲平臺首先支撐起了自己的業務,在這個過程中,AWS自己嚴肅的使用了自己的雲計算平臺,使得公有云平臺不是對於資源的配置更加友好,而是對於應用的部署更加友好,最終大放異彩。

如果我們仔細觀察就會發現,私有云和公有云使用的是類似的技術,卻在產品設計上是完全不同的兩種生物。私有云廠商和公有云廠商也擁有類似的技術,卻在產品運營上呈現出完全不同的基因。

私有云廠商都是賣資源的,所以往往在賣私有云平臺的時候往往伴隨着賣計算,網絡,存儲設備。在產品設計上,私有云廠商往往強調又長又詳盡,但是客戶幾乎不會使用的計算,網絡,存儲的技術參數,因爲這些參數可以用來和友商對標的過程中佔盡優勢。私有云的廠商幾乎沒有自己的大規模應用,所以私有云廠商的平臺做出來是給別人用的,自己不會大規模使用,於是產品往往圍繞資源展開,而不會對應用的部署友好。

公有云的廠商往往都是有自己的大規模應用需要部署的,所以其產品的設計,可以將常見的應用部署所需要的模塊作爲組件提供出來,用戶可以像拼積木一樣,拼接一個適用於自己應用的架構。公有云廠商不必要關心各種技術參數的PK,不必關心是否開源,是否兼容各種虛擬化平臺,兼容各種服務器設備,網絡設備,存儲設備。你管我用什麼,客戶部署應用方便就好。

OpenStack的誕生

當然公有云的第一名AWS活的很爽,第二名Rackspace就不太爽了,沒錯,互聯網行業嘛,基本上就是一家獨大。第二名如何逆襲呢?開源是很好的辦法,讓整個行業大家一起爲這個雲平臺出力,兄弟們,大家一起上。於是Rackspace與美國航空航天局(NASA)合作創始了開源雲平臺OpenStack。OpenStack現在發展的和AWS有點像了,所以從OpenStack的模塊組成,可以看到雲計算池化的方法。

OpenStack包含哪些組件呢?

計算池化模塊Nova:OpenStack的計算虛擬化主要使用KVM,然而到底在那個物理機上開虛擬機呢,這要靠nova-scheduler。

網絡池化模塊Neutron:OpenStack的網絡虛擬化主要使用Openvswitch,然而對於每一個Openvswitch的虛擬網絡,虛擬網卡,VLAN,帶寬的配置,不需要登錄到集羣上配置,Neutron可以通過SDN的方式進行配置。

存儲池化模塊Cinder:OpenStack的存儲虛擬化,如果使用本地盤,則基於LVM,使用哪個LVM上分配的盤,也是用過scheduler來的。後來就有了將多臺機器的硬盤打成一個池的方式Ceph,則調度的過程,則在Ceph層完成。

有了OpenStack,所有的私有云廠商都瘋了,原來VMware在私有云市場實在賺的太多了,眼巴巴的看着,沒有對應的平臺可以和他抗衡。現在有了現成的框架,再加上自己的硬件設備,你可以想象到的所有的IT廠商的巨頭,全部加入到社區裏面來,將OpenStack開發爲自己的產品,連同硬件設備一起,殺入私有云市場。

網易當然也沒有錯過這次風口,上線了自己的OpenStack集羣,網易蜂巢基於OpenStack自主研發了IaaS服務,在計算虛擬化方面,通過裁剪KVM鏡像,優化虛擬機啓動流程等改進,實現了虛擬機的秒級別啓動。在網絡虛擬化方面,通過SDN和Openvswitch技術,實現了虛擬機之間的高性能互訪。在存儲虛擬化方面,通過優化Ceph存儲,實現高性能雲盤。

但是網易並沒有殺進私有云市場,而是使用OpenStack支撐起了自己的應用,這是互聯網的思維,沒錯。僅僅是資源層面彈性是不夠的,還需要開發出對應用部署友好的組件。例如數據庫,負載均衡,緩存等,這些都是應用部署必不可少的,也是網易在大規模應用實踐中,千錘百煉過的。這些組件稱爲PaaS。

從IAAS到PAAS

前面一直在講IaaS層的故事,也即基礎設施即服務,基本上在談計算,網絡,存儲的事情。現在應該說說應用層的事情了。

IaaS的定義比較清楚,PaaS的定義就沒那麼清楚了,有的把數據庫,負載均衡,緩存作爲PaaS服務,有的把大數據Hadoop, Spark平臺作爲PaaS服務,有的講應用的安裝與管理,例如Puppet, Chef, Ansible作爲PaaS服務。

其實PaaS主要用於管理應用層的,我總結兩部分:一部分是你自己的應用應當自動部署,比如Puppet, Chef, Ansible, Cloud Foundry等,可以通過腳本幫你部署,一部分是你覺得複雜的通用應用不用部署,比如數據庫,緩存,大數據平臺,可以在雲平臺上一點即得。

要麼就是自動部署,要麼不用部署,總的來說就是應用層您也少操心,就是PaaS的作用。當然最好是都不用部署,一鍵可得,所以公有云平臺將通用的服務都做成了PaaS平臺。另一些應用,是您自己開發的,除了你自己,其他人都不知道,所以您可以用工具變成自動部署。

有了PaaS最大的優點,就是可以實現應用層的彈性伸縮。比如雙十一來了,10個節點要變成100個節點,如果使用物理設備,再買90臺機器固然來不及,僅僅只有IaaS實現資源的彈性是不夠的,再創建90臺虛擬機,也是空的啊,還是需要運維人員一臺一臺的部署。所以有了PaaS就好了,一臺虛擬機啓動後,馬上運行自動部署腳本,進行應用的安裝,90臺機器自動安裝好了應用,纔是真正的彈性伸縮。

當然這種部署方式也有一個問題,就是無論Puppet, Chef, Ansible把安裝腳本抽象的再好,說到底也是基於腳本的,然而應用所在的環境千差萬別,文件路徑的差別,文件權限的差別,依賴包的差別,應用環境的差別,Tomcat, PHP, Apache等軟件版本的差別,JDK,Python等版本的差別,是否安裝了一些系統軟件,是否佔用了哪些端口,都可能造成腳本執行的不成功。所以看起來是一旦腳本寫好,就能夠快速複製了,但是一旦環境稍有改變,就需要把腳本進行新一輪的修改,測試,聯調。例如在數據中心寫好的腳本,移到AWS上就不一定直接能用,在AWS上聯調好了,遷移到Google Cloud上去也可能再會出問題。

容器的誕生

於是容器應運而生。容器是Container,Container另一個意思是集裝箱,其實容器的思想就是要變成軟件交付的集裝箱。集裝箱的特點,一是打包,二是標準。設想沒有集裝箱的時代,如果從A將貨物運到B,中間要經過三個碼頭,換三次船的話,每次貨物都要卸下船來,擺的七零八落,然後再換船的時候,需要重新整齊擺好,所以沒有集裝箱的時候,船員們都能夠在岸上待幾天再走。然而有了集裝箱,所有的貨物都打包在一起了,並且集裝箱的尺寸全部一致,所以每次換船的時候,整體一個箱子搬過去就可以了,小時級別就能完成,船員再也不能上岸長時間休息了。所以設想A就是程序員,B就是用戶,貨物就是代碼及運行環境,中間的三個碼頭分別是開發,測試,上線。

 

假設代碼的運行環境如下:

1.        Ubuntu操作系統

2.        創建用戶hadoop

3.        下載解壓縮JDK 1.7在某個目錄下

4.        將這個目錄加入JAVA_HOME和PATH的環境變量裏面

5.        將環境變量的export放在hadoop用戶的home目錄下的.bashrc文件中

6.        下載並解壓縮tomcat 7

7.        將war放到tomcat的webapp路徑下面

8.        修改tomcat的啓動參數,將Java的Heap Size設爲1024M

 

看,一個簡單的Java網站,就需要考慮這麼多零零散散的東西,如果不打包,就需要在開發,測試,生產的每個環境上查看保證環境的一致,甚至要將這些環境重新搭建一遍,就像每次將貨物打散了重裝一樣麻煩,中間稍有差池,比如開發環境用了JDK 1.8,而線上是JDK 1.7,比如開發環境用了root用戶,線上需要使用hadoop用戶,都可能導致程序的運行失敗。

容器如何對應用打包呢?還是要學習集裝箱,首先要有個封閉的環境,將貨物封裝起來,讓貨物之間互不干擾,互相隔離,這樣裝貨卸貨才方便。好在ubuntu中的lxc技術早就能做到這一點,這裏主要使用了兩種技術,一種是看起來是隔離的技術,稱爲namespace,也即每個namespace中的應用看到的是不同的IP地址,用戶空間,進程號等。另一種是用起來是隔離的,稱爲cgroup,也即明明整臺機器有很多的CPU,內存,而一個應用只能用其中的一部分。

有了這兩項技術,集裝箱的鐵盒子我們是焊好了,接下來是決定往裏面放什麼的時候了。最簡單粗暴的方法,就是將上面列表中所有的都放到集裝箱裏面。但是這樣太大了,因爲虛擬機的鏡像就是這樣的,動輒幾十G,如果你安裝一個乾乾靜靜的ubuntu操作系統,什麼都不裝,就很大了。這其實相當於把船也放到了集裝箱裏面,答案當然是NO.

所以撇下第一項操作系統,剩下的所有的加起來,也就幾百M,就輕便多了。所以一臺服務器上的容器是共享操作系統內核的,容器在不同機器之間的遷移不帶內核,這也是很多人聲稱容器是輕量級的虛擬機的原因。輕不白輕,自然隔離性就差了,一個集裝箱把船壓漏水了,所有的集裝箱一起沉。

另一個需要撇下的就是隨着應用的運行而產生並保存在本地的數據,多以文件的形式存在,例如數據庫文件,文本文件。這些文件會隨着應用的運行,越來越大,如果這些數據也放在容器裏面,會讓容器變得很大,影響容器在不同環境的遷移。而且這些數據在開發,測試,線上環境之間的遷移是沒有意義的,生產環境不可能用測試環境的文件,所以往往這些數據也是保存在容器外面的存儲設備上。也是爲什麼人們稱容器是無狀態的。

至此集裝箱焊好了,貨物也裝進去了,接下來就是如何將這個集裝箱標準化,從而在哪艘船上都能運輸。這裏的標準一個是鏡像,一個是容器的運行環境。所謂的鏡像,就是將你焊好集裝箱的那個時刻,將集裝箱的狀態保存下來,就像孫悟空說定,集裝箱裏面就定在了那一刻,然後將這一刻的狀態保存成一系列文件。這些文件的格式是標準的,誰看到這些文件,都能還原當時定住的那個時刻。將鏡像還原成運行時的過程,就是讀取鏡像文件,還原那個時刻的過程,也就是容器的運行的過程。除了大名鼎鼎的Docker,還有其他的容器,例如AppC,Mesos Container,都能運行容器鏡像。所以說容器不等於Docker。

總而言之,容器是輕量級的,隔離差的,適用於無狀態的,基於鏡像標準實現跨主機,跨環境的隨意遷移。

有了容器,使得PaaS層對於用戶自身應用的自動部署變得快速而優雅。容器快,快在了兩方面,第一是虛擬機啓動的時候要先啓動操作系統,容器不用啓動操作系統,因爲是共享內核的。第二是虛擬機啓動後使用腳本安裝應用,容器不用安裝應用,因爲已經打包在鏡像裏面了。所以最終虛擬機的啓動是分鐘級別,而容器的啓動是秒級。容器咋這麼神奇。其實一點都不神奇,第一是偷懶少幹活了,第二是提前把活幹好了。

因爲容器的啓動快,人們往往不會創建一個個小的虛擬機來剛剛部署應用,因爲這樣太費時間了,而是創建一個大的虛擬機,然後在大的虛擬機裏面再劃分容器,而不同的用戶不共享大的虛擬機,可以實現操作系統內核的隔離。

 這又是一次合久必分的過程。由IaaS層的虛擬機池,劃分爲更細粒度的容器池。

 容器的粒度更加細,管理起來更難管,甚至是手動操作難以應對的。假設你有100臺物理機,其實規模不是太大,用Excel人工管理是沒問題的,但是一臺上面開10臺虛擬機,虛擬機的個數就是1000臺,人工管理已經很困難了,但是一臺虛擬機裏面開10個容器,就是10000個容器,你是不是已經徹底放棄人工運維的想法了。

所以容器層面的管理平臺是一個新的挑戰,關鍵字就是自動化:

自發現:容器與容器之間的相互配置還能像虛擬機一樣,記住IP地址,然後互相配置嗎?這麼多容器,你怎麼記得住一旦一臺虛擬機掛了重啓,IP改變,應該改哪些配置,列表長度至少萬行級別的啊。所以容器之間的配置通過名稱來的,無論容器跑到哪臺機器上,名稱不變,就能訪問到。
自修復:容器掛了,或是進程宕機了,能像虛擬機那樣,登陸上去查看一下進程狀態,如果不正常重啓一下麼?你要登陸萬臺docker了。所以容器的進程掛了,容器就自動掛掉了,然後自動重啓。
彈性自伸縮 Auto Scaling:當容器的性能不足的時候,需要手動伸縮,手動部署麼?當然也要自動來。
如果有了容器的管理平臺,又是一次分久必合。

容器管理平臺

當前火熱的容器管理平臺有三大流派:

一個是Kubernetes,我們稱爲段譽型。段譽(Kubernetes)的父親(Borg)武功高強,出身皇族(Google),管理過偌大的一個大理國(Borg是Google數據中心的容器管理平臺)。作爲大理段式後裔,段譽的武功基因良好(Kubernetes的理念設計比較完善),周圍的高手雲集,習武環境也好(Kubernetes生態活躍,熱度高),雖然剛剛出道的段譽武功不及其父親,但是隻要跟着周圍的高手不斷切磋,武功既可以飛速提升。

一個是Mesos,我們稱爲喬峯型。喬峯(Mesos)的主要功夫降龍十八掌(Mesos的調度功能)獨步武林,爲其他幫派所無。而且喬峯也管理過人數衆多的丐幫(Mesos管理過Tweeter的容器集羣)。後來喬峯從丐幫出來,在江湖中特例獨行(Mesos的創始人成立了公司Mesosphere)。喬峯的優勢在於,喬峯的降龍十八掌(Mesos)就是在丐幫中使用的降龍十八掌,相比與段譽初學其父的武功來說,要成熟很多。但是缺點是,降龍十八掌只掌握在少數的幾個丐幫幫主手中(Mesos社區還是以Mesosphere爲主導),其他丐幫兄弟只能遠遠崇拜喬峯,而無法相互切磋(社區熱度不足)。

一個是Swarm,我們稱爲慕容型。慕容家族(Swarm是Docker家族的集羣管理軟件)的個人功夫是非常棒的(Docker可以說稱爲容器的事實標準),但是看到段譽和喬峯能夠管理的組織規模越來越大,有一統江湖的趨勢,着實眼紅了,於是開始想創建自己的慕容鮮卑帝國(推出Swarm容器集羣管理軟件)。但是個人功夫好,並不代表着組織能力強(Swarm的集羣管理能力),好在慕容家族可以借鑑段譽和喬峯的組織管理經驗,學習各家公司,以彼之道,還施彼身,使得慕容公子的組織能力(Swarm借鑑了很多前面的集羣管理思想)也在逐漸的成熟中。

雲計算方面核心技術有哪些?

作者:冰島社區-陳昊
鏈接:https://www.zhihu.com/question/353443905/answer/877956605
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

雲計算是一種以數據和處理能力爲中心的密集型計算模式,它融合了多項ICT技術,是傳統技術“平滑演進”的產物。其中以虛擬化技術、分佈式數據存儲技術、編程模型、大規模數據管理技術、分佈式資源管理、信息安全、雲計算平臺管理技術、綠色節能技術最爲關鍵。

1、虛擬化技術

 虛擬化是雲計算最重要的核心技術之一,它爲雲計算服務提供基礎架構層面的支撐,是ICT服務快速走向雲計算的最主要驅動力。可以說,沒有虛擬化技術也就沒有云計算服務的落地與成功。隨着雲計算應用的持續升溫,業內對虛擬化技術的重視也提到了一個新的高度。與此同時,我們的調查發現,很多人對雲計算和虛擬化的認識都存在誤區,認爲雲計算就是虛擬化。事實上並非如此,虛擬化是雲計算的重要組成部分但不是全部。

  從技術上講,虛擬化是一種在軟件中仿真計算機硬件,以虛擬資源爲用戶提供服務的計算形式。旨在合理調配計算機資源,使其更高效地提供服務。它把應用系統各硬件間的物理劃分打破,從而實現架構的動態化,實現物理資源的集中管理和使用。虛擬化的最大好處是增強系統的彈性和靈活性,降低成本、改進服務、提高資源利用效率。

  從表現形式上看,虛擬化又分兩種應用模式。一是將一臺性能強大的服務器虛擬成多個獨立的小服務器,服務不同的用戶。二是將多個服務器虛擬成一個強大的服務器,完成特定的功能。這兩種模式的核心都是統一管理,動態分配資源,提高資源利用率。在雲計算中,這兩種模式都有比較多的應用。

2、分佈式數據存儲技術

  雲計算的另一大優勢就是能夠快速、高效地處理海量數據。在數據爆炸的今天,這一點至關重要。爲了保證數據的高可靠性,雲計算通常會採用分佈式存儲技術,將數據存儲在不同的物理設備中。這種模式不僅擺脫了硬件設備的限制,同時擴展性更好,能夠快速響應用戶需求的變化。

  分佈式存儲與傳統的網絡存儲並不完全一樣,傳統的網絡存儲系統採用集中的存儲服務器存放所有數據,存儲服務器成爲系統性能的瓶頸,不能滿足大規模存儲應用的需要。分佈式網絡存儲系統採用可擴展的系統結構,利用多臺存儲服務器分擔存儲負荷,利用位置服務器定位存儲信息,它不但提高了系統的可靠性、可用性和存取效率,還易於擴展。

  在當前的雲計算領域,Google的GFS和Hadoop開發的開源系統HDFS是比較流行的兩種雲計算分佈式存儲系統。

  GFS(Google File System)技術:谷歌的非開源的GFS(GoogleFile System)雲計算平臺滿足大量用戶的需求,並行地爲大量用戶提供服務。使得雲計算的數據存儲技術具有了高吞吐率和高傳輸率的特點。

  HDFS(Hadoop Distributed File System)技術:大部分ICT廠商,包括Yahoo、Intel的“雲”計劃採用的都是HDFS的數據存儲技術。未來的發展將集中在超大規模的數據存儲、數據加密和安全性保證、以及繼續提高I/O速率等方面。

3、編程模式

  從本質上講,雲計算是一個多用戶、多任務、支持併發處理的系統。高效、簡捷、快速是其核心理念,它旨在通過網絡把強大的服務器計算資源方便地分發到終端用戶手中,同時保證低成本和良好的用戶體驗。在這個過程中,編程模式的選擇至關重要。雲計算項目中分佈式並行編程模式將被廣泛採用。

  分佈式並行編程模式創立的初衷是更高效地利用軟、硬件資源,讓用戶更快速、更簡單地使用應用或服務。在分佈式並行編程模式中,後臺複雜的任務處理和資源調度對於用戶來說是透明的,這樣用戶體驗能夠大大提升。MapReduce是當前雲計算主流並行編程模式之一。MapReduce模式將任務自動分成多個子任務,通過Map和Reduce兩步實現任務在大規模計算節點中的高度與分配。

  MapReduce是Google開發的java、Python、C++編程模型,主要用於大規模數據集(大於1TB)的並行運算。MapReduce模式的思想是將要執行的問題分解成Map(映射)和Reduce(化簡)的方式,先通過Map程序將數據切割成不相關的區塊,分配(調度)給大量計算機處理,達到分佈式運算的效果,再通過Reduce程序將結果彙整輸出。

4、大規模數據管理

  處理海量數據是雲計算的一大優勢。那麼如何處理則涉及到很多層面的東西,因此高效的數據處理技術也是雲計算不可或缺的核心技術之一。對於雲計算來說,數據管理面臨巨大的挑戰。雲計算不僅要保證數據的存儲和訪問,還要能夠對海量數據進行特定的檢索和分析。由於雲計算需要對海量的分佈式數據進行處理、分析,因此,數據管理技術必需能夠高效的管理大量的數據。

  Google的BT(BigTable)數據管理技術和Hadoop團隊開發的開源數據管理模塊HBase是業界比較典型的大規模數據管理技術。

  BT(BigTable)數據管理技術:BigTable是非關係的數據庫,是一個分佈式的、持久化存儲的多維度排序Map.BigTable建立在 GFS,Scheduler, Lock Service和MapReduce之上,與傳統的關係數據庫不同,它把所有數據都作爲對象來處理,形成一個巨大的表格,用來分佈存儲大規模結構化數據。 Bigtable的設計目的是可靠的處理PB級別的數據,並且能夠部署到上千臺機器上。

  開源數據管理模塊HBase:HBase是Apache的Hadoop項目的子項目,定位於分佈式、面向列的開源數據庫。HBase不同於一般的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。另一個不同的是HBase基於列的而不是基於行的模式。作爲高可靠性分佈式存儲系統,HBase在性能和可伸縮方面都有比較好的表現。利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集羣。

5、分佈式資源管理

  雲計算採用了分佈式存儲技術存儲數據,那麼自然要引入分佈式資源管理技術。在多節點的併發執行環境中,各個節點的狀態需要同步,並且在單個節點出現故障時,系統需要有效的機制保證其它節點不受影響。而分佈式資源管理系統恰是這樣的技術,它是保證系統狀態的關鍵。

  另外,雲計算系統所處理的資源往往非常龐大,少則幾百臺服務器,多則上萬臺,同時可能跨躍多個地域。且雲平臺中運行的應用也是數以千計,如何有效地管理這批資源,保證它們正常提供服務,需要強大的技術支撐。因此,分佈式資源管理技術的重要性可想而知。

  全球各大雲計算方案/服務提供商們都在積極開展相關技術的研發工作。其中Google內部使用的Borg技術很受業內稱道。另外,微軟、IBM、Oracle/Sun等雲計算巨頭都有相應解決方案提出。

6、信息安全

  調查數據表明,安全已經成爲阻礙雲計算髮展的最主要原因之一。數據顯示,32%已經使用雲計算的組織和45%尚未使用雲計算的組織的ICT管理將雲安全作爲進一步部署雲的最大障礙。因此,要想保證雲計算能夠長期穩定、快速發展,安全是首要需要解決的問題。

  事實上,雲計算安全也不是新問題,傳統互聯網存在同樣的問題。只是雲計算出現以後,安全問題變得更加突出。在雲計算體系中,安全涉及到很多層面,包括網絡安全、服務器安全、軟件安全、系統安全等等。因此,有分析師認爲,雲安全產業的發展,將把傳統安全技術提到一個新的階段。

  現在,不管是軟件安全廠商還是硬件安全廠商都在積極研發雲計算安全產品和方案。包括傳統殺毒軟件廠商、軟硬防火牆廠商、IDS/IPS廠商在內的各個層面的安全供應商都已加入到雲安全領域。相信在不久的將來,雲安全問題將得到很好的解決.

7、雲計算平臺管理

  雲計算資源規模龐大,服務器數量衆多並分佈在不同的地點,同時運行着數百種應用,如何有效地管理這些服務器,保證整個系統提供不間斷的服務是巨大的挑戰。雲計算系統的平臺管理技術,需要具有高效調配大量服務器資源,使其更好協同工作的能力。其中,方便地部署和開通新業務、快速發現並且恢復系統故障、通過自動化、智能化手段實現大規模系統可靠的運營是雲計算平臺管理技術的關鍵。

  對於提供者而言,雲計算可以有三種部署模式,即公共雲、私有云和混合雲。三種模式對平臺管理的要求大不相同。對於用戶而言,由於企業對於ICT資源共享的控制、對系統效率的要求以及ICT成本投入預算不盡相同,企業所需要的雲計算系統規模及可管理性能也大不相同。因此,雲計算平臺管理方案要更多地考慮到定製化需求,能夠滿足不同場景的應用需求。

  包括Google、IBM、微軟、Oracle/Sun等在內的許多廠商都有云計算平臺管理方案推出。這些方案能夠幫助企業實現基礎架構整合、實現企業硬件資源和軟件資源的統一管理、統一分配、統一部署、統一監控和統一備份,打破應用對資源的獨佔,讓企業雲計算平臺價值得以充分發揮。

博客

Java技術倉庫《Java程序員複習指南》

https://github.com/h2pl/Java-Tutorial

整合全網優質Java學習內容,幫助你從基礎到進階系統化複習Java

面試指南

全網最熱的Java面試指南,共200多頁,非常實用,不管是用於複習還是準備面試都是不錯的。
在公衆號【Java技術江湖】回覆“PDF”即可免費領取。

寫在最後

如果覺得本文對你有幫助的話,請你也不要吝嗇你的“好看”哈,轉發朋友圈就是對我最大的支持啦,你們的支持是對我最大的鼓勵。

對本系列文章有什麼建議和意見,也歡迎留言告訴我,期待你的回饋。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章