做者:劉超
轉自【劉超的通俗雲計算】java
早在十年前,市場上就出現了不少和雲計算相關的崗位,當時正是雲計算技術最火熱的時代,無論是BAT仍是華爲等企業都開始佈局雲計算,因而OpenStack研發、容器研發、底層開發等相關崗位相應地也愈來愈多,雖然這幾年大數據和AI的風頭已經徹底壓過了雲計算,可是這一門技術仍然在現現在的技術體系中佔有很重要的位置。那麼,到底什麼是雲計算,就是咱們每個要學習雲計算技術的朋友要了解的事情了,根據百度百科的介紹linux
大數據(big data),IT行業術語,是指沒法在必定時間範圍內用常規軟件工具進行捕捉、管理和處理的數據集合,是須要新處理模式才能具備更強的決策力、洞察發現力和流程優化能力的海量、高增加率和多樣化的信息資產。
在維克托·邁爾-舍恩伯格及肯尼斯·庫克耶編寫的《大數據時代》 [1] 中大數據指不用隨機分析法(抽樣調查)這樣捷徑,而採用全部數據進行分析處理。大數據的5V特色(IBM提出):Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價值密度)、Veracity(真實性)。 [2]git
雲計算的整個過程,用一個詞來說就是「分久必合,合久必分」。程序員
雲計算其實主要解決了四個方面的內容:計算,網絡,存儲,應用。前三者是資源層面的,最後是應用層面的。github
計算是CPU和內存,爲啥?1+1這個最簡單的算法是把1放在內存裏面,運行加法是CPU作的,作完告終果2又保存在內存裏面。
網絡就是你插根網線能上網。
存儲就是你下個電影有地方放。本次討論就是圍繞這四個部分來說的。
在原始社會,你們最愛用的是物理設備:web
服務器用的是物理機,例如戴爾,惠普,IBM,聯想等物理服務器,隨着硬件設備的進步,物理服務器愈來愈強大了,64核128G內存都算是普通配置。
網絡用的是硬件交換機和路由器,例如思科的,華爲的,從1GE到10GE,如今有40GE和100GE,帶寬愈來愈牛。
存儲方面有的用普通的磁盤,也有了更快的SSD盤。容量從M,到G,連筆記本電腦都能配置到T,更況且磁盤陣列。
若是部署應用直接使用物理機,看起來很爽,總有種土豪的感受,卻又大大的缺點:面試
人工運維:若是你在一臺服務器上安裝軟件,把系統安裝壞了,怎麼辦?只有重裝。當你想配置一下交換機的參數,須要串口連上去進行配置。當你想增長一塊磁盤,總要買一塊插進服務器。這些都須要人工來,並且很大可能要求機房。大家公司在北五環,機房在南六環,這酸爽。
浪費資源:其實你只想部署一個小小的網站,卻要用128G的內存。混着部署吧,就有隔離性的問題。
隔離性差:你把好多的應用部署在同一臺物理機上,他們之間搶內存,搶cpu,一個寫滿了硬盤,另外一個就無法用了,一個弄掛了內核,另外一個也同時掛了,若是部署兩個相同的應用,端口還會衝突,動不動就會出錯。
因而有了第一次合久必分的過程,叫作虛擬化。所謂虛擬化,就是把實的變成虛的。算法
物理機變爲虛擬機:cpu是虛擬的,內存是虛擬的,內核是虛擬的,硬盤是虛擬的。
物理交換機變爲虛擬交換機:網卡是虛擬的,交換機是虛擬的,帶寬也是虛擬的。
物理存儲變成虛擬存儲:多塊硬盤虛擬成一大塊。
虛擬化很好的解決了上面的三個問題:docker
人工運維:虛擬機的建立和刪除均可以遠程操做,虛擬機被玩壞了,刪了再建一個分鐘級別的。虛擬網絡的配置也能夠遠程操做,建立網卡,分配帶寬都是調用接口就能搞定的。
浪費資源:虛擬化了之後,資源能夠分配的很小很小,好比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,沒必要關心是否開源,是否兼容各類虛擬化平臺,兼容各類服務器設備,網絡設備,存儲設備。你管我用什麼,客戶部署應用方便就好。
固然公有云的第一名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層的故事,也即基礎設施即服務,基本上在談計算,網絡,存儲的事情。如今應該說說應用層的事情了。
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技術,是傳統技術「平滑演進」的產物。其中以虛擬化技術、分佈式數據存儲技術、編程模型、大規模數據管理技術、分佈式資源管理、信息安全、雲計算平臺管理技術、綠色節能技術最爲關鍵。
虛擬化是雲計算最重要的核心技術之一,它爲雲計算服務提供基礎架構層面的支撐,是ICT服務快速走向雲計算的最主要驅動力。能夠說,沒有虛擬化技術也就沒有云計算服務的落地與成功。隨着雲計算應用的持續升溫,業內對虛擬化技術的重視也提到了一個新的高度。與此同時,咱們的調查發現,不少人對雲計算和虛擬化的認識都存在誤區,認爲雲計算就是虛擬化。事實上並不是如此,虛擬化是雲計算的重要組成部分但不是所有。
從技術上講,虛擬化是一種在軟件中仿真計算機硬件,以虛擬資源爲用戶提供服務的計算形式。旨在合理調配計算機資源,使其更高效地提供服務。它把應用系統各硬件間的物理劃分打破,從而實現架構的動態化,實現物理資源的集中管理和使用。虛擬化的最大好處是加強系統的彈性和靈活性,下降成本、改進服務、提升資源利用效率。
從表現形式上看,虛擬化又分兩種應用模式。一是將一臺性能強大的服務器虛擬成多個獨立的小服務器,服務不一樣的用戶。二是將多個服務器虛擬成一個強大的服務器,完成特定的功能。這兩種模式的核心都是統一管理,動態分配資源,提升資源利用率。在雲計算中,這兩種模式都有比較多的應用。
雲計算的另外一大優點就是可以快速、高效地處理海量數據。在數據爆炸的今天,這一點相當重要。爲了保證數據的高可靠性,雲計算一般會採用分佈式存儲技術,將數據存儲在不一樣的物理設備中。這種模式不只擺脫了硬件設備的限制,同時擴展性更好,可以快速響應用戶需求的變化。
分佈式存儲與傳統的網絡存儲並不徹底同樣,傳統的網絡存儲系統採用集中的存儲服務器存放全部數據,存儲服務器成爲系統性能的瓶頸,不能知足大規模存儲應用的須要。分佈式網絡存儲系統採用可擴展的系統結構,利用多臺存儲服務器分擔存儲負荷,利用位置服務器定位存儲信息,它不但提升了系統的可靠性、可用性和存取效率,還易於擴展。
在當前的雲計算領域,Google的GFS和Hadoop開發的開源系統HDFS是比較流行的兩種雲計算分佈式存儲系統。
GFS(Google File System)技術:谷歌的非開源的GFS(GoogleFile System)雲計算平臺知足大量用戶的需求,並行地爲大量用戶提供服務。使得雲計算的數據存儲技術具備了高吞吐率和高傳輸率的特色。
HDFS(Hadoop Distributed File System)技術:大部分ICT廠商,包括Yahoo、Intel的「雲」計劃採用的都是HDFS的數據存儲技術。將來的發展將集中在超大規模的數據存儲、數據加密和安全性保證、以及繼續提升I/O速率等方面。
從本質上講,雲計算是一個多用戶、多任務、支持併發處理的系統。高效、簡捷、快速是其核心理念,它旨在經過網絡把強大的服務器計算資源方便地分發到終端用戶手中,同時保證低成本和良好的用戶體驗。在這個過程當中,編程模式的選擇相當重要。雲計算項目中分佈式並行編程模式將被普遍採用。
分佈式並行編程模式創立的初衷是更高效地利用軟、硬件資源,讓用戶更快速、更簡單地使用應用或服務。在分佈式並行編程模式中,後臺複雜的任務處理和資源調度對於用戶來講是透明的,這樣用戶體驗可以大大提高。MapReduce是當前雲計算主流並行編程模式之一。MapReduce模式將任務自動分紅多個子任務,經過Map和Reduce兩步實現任務在大規模計算節點中的高度與分配。
MapReduce是Google開發的java、Python、C++編程模型,主要用於大規模數據集(大於1TB)的並行運算。MapReduce模式的思想是將要執行的問題分解成Map(映射)和Reduce(化簡)的方式,先經過Map程序將數據切割成不相關的區塊,分配(調度)給大量計算機處理,達到分佈式運算的效果,再經過Reduce程序將結果彙整輸出。
處理海量數據是雲計算的一大優點。那麼如何處理則涉及到不少層面的東西,所以高效的數據處理技術也是雲計算不可或缺的核心技術之一。對於雲計算來講,數據管理面臨巨大的挑戰。雲計算不只要保證數據的存儲和訪問,還要可以對海量數據進行特定的檢索和分析。因爲雲計算須要對海量的分佈式數據進行處理、分析,所以,數據管理技術必需可以高效的管理大量的數據。
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上搭建起大規模結構化存儲集羣。
雲計算採用了分佈式存儲技術存儲數據,那麼天然要引入分佈式資源管理技術。在多節點的併發執行環境中,各個節點的狀態須要同步,而且在單個節點出現故障時,系統須要有效的機制保證其它節點不受影響。而分佈式資源管理系統恰是這樣的技術,它是保證系統狀態的關鍵。
另外,雲計算系統所處理的資源每每很是龐大,少則幾百臺服務器,多則上萬臺,同時可能跨躍多個地域。且雲平臺中運行的應用也是數以千計,如何有效地管理這批資源,保證它們正常提供服務,須要強大的技術支撐。所以,分佈式資源管理技術的重要性可想而知。
全球各大雲計算方案/服務提供商們都在積極開展相關技術的研發工做。其中Google內部使用的Borg技術很受業內稱道。另外,微軟、IBM、Oracle/Sun等雲計算巨頭都有相應解決方案提出。
調查數據代表,安全已經成爲阻礙雲計算髮展的最主要緣由之一。數據顯示,32%已經使用雲計算的組織和45%還沒有使用雲計算的組織的ICT管理將雲安全做爲進一步部署雲的最大障礙。所以,要想保證雲計算可以長期穩定、快速發展,安全是首要須要解決的問題。
事實上,雲計算安全也不是新問題,傳統互聯網存在一樣的問題。只是雲計算出現之後,安全問題變得更加突出。在雲計算體系中,安全涉及到不少層面,包括網絡安全、服務器安全、軟件安全、系統安全等等。所以,有分析師認爲,雲安全產業的發展,將把傳統安全技術提到一個新的階段。
如今,無論是軟件安全廠商仍是硬件安全廠商都在積極研發雲計算安全產品和方案。包括傳統殺毒軟件廠商、軟硬防火牆廠商、IDS/IPS廠商在內的各個層面的安全供應商都已加入到雲安全領域。相信在不久的未來,雲安全問題將獲得很好的解決.
雲計算資源規模龐大,服務器數量衆多並分佈在不一樣的地點,同時運行着數百種應用,如何有效地管理這些服務器,保證整個系統提供不間斷的服務是巨大的挑戰。雲計算系統的平臺管理技術,須要具備高效調配大量服務器資源,使其更好協同工做的能力。其中,方便地部署和開通新業務、快速發現而且恢復系統故障、經過自動化、智能化手段實現大規模系統可靠的運營是雲計算平臺管理技術的關鍵。
對於提供者而言,雲計算能夠有三種部署模式,即公共雲、私有云和混合雲。三種模式對平臺管理的要求大不相同。對於用戶而言,因爲企業對於ICT資源共享的控制、對系統效率的要求以及ICT成本投入預算不盡相同,企業所須要的雲計算系統規模及可管理性能也大不相同。所以,雲計算平臺管理方案要更多地考慮到定製化需求,可以知足不一樣場景的應用需求。
包括Google、IBM、微軟、Oracle/Sun等在內的許多廠商都有云計算平臺管理方案推出。這些方案可以幫助企業實現基礎架構整合、實現企業硬件資源和軟件資源的統一管理、統一分配、統一部署、統一監控和統一備份,打破應用對資源的獨佔,讓企業雲計算平臺價值得以充分發揮。
Java技術倉庫《Java程序員複習指南》
https://github.com/h2pl/Java-Tutorial
整合全網優質Java學習內容,幫助你從基礎到進階系統化複習Java
全網最熱的Java面試指南,共200多頁,很是實用,無論是用於複習仍是準備面試都是不錯的。
在公衆號【Java技術江湖】回覆「PDF」便可免費領取。
若是以爲本文對你有幫助的話,請你也不要吝嗇你的「好看」哈,轉發朋友圈就是對我最大的支持啦,大家的支持是對我最大的鼓勵。
對本系列文章有什麼建議和意見,也歡迎留言告訴我,期待你的回饋。