對雲計算的定義有多種說法。對於到底什麼是雲計算,至少能夠找到100種解釋。現階段廣爲接受的是美國國家標準與技術研究院(NIST)定義:雲計算是一種按使用量付費的模式,這種模式提供可用的、便捷的、按需的網絡訪問, 進入可配置的計算資源共享池(資源包括互聯網,服務器,存儲,應用軟件,服務),這些資源可以被快速提供,只需投入不多的管理工做,或與服務供應商進行不多的交互。本文將着重討論雲計算與傳統軟件開發的聯繫與相互關係。程序員
雲計算(cloud computing)是一種基於Internet的計算。在雲計算中,存儲和運算將再也不運行在本地計算機或服務器中,而是運行在分佈於Internet上的大量計算機上,也就是說,雲計算經過把原來由我的計算機和私有數據中心執行的任務轉移給分佈在Internet上由全體用戶共享的大型計算中心來完成,實現了計算機硬件、軟件等計算資源及對這些計算資源進行安裝、配置與維護等服務資源的充分共享。算法
所謂的」雲」實際上是指分佈在Interact中的形形色色的計算中心,包含成千上萬甚至幾十萬、幾百萬臺計算機或服務器。用戶再也不購買高性能的硬件,也再也不購買或開發各類功能的軟件,而是使用任何可上網的設備,鏈接」雲」,利用」雲」提供的的軟件或服務,直接在」雲」上處理並存儲數據。雲計算的應用模式如圖l-l所示。chrome
所以,雲計算能夠看做是並行計算(Parallel Computing)、分佈式計算(Distributed Computing)和網格計算(Grid Computing)的發展。雲計算與網格計算的主要區別在於:網格計算側重於解決計算和存儲資源的分配,即將你們提供的計算和存儲資源根據各自應用的須要從新分配給你們;而云計算則傾向於計算、存儲和應用資源的共享,在雲計算中,用戶不只不須要象網格計算那樣,提供計算和存儲資源,也不須要本身購買或開發應用,全部的一切全都由雲服務商提供。編程
因爲雲計算 (cloud computing)是基於互聯網的相關服務的增長、使用和交付模式,一般涉及經過互聯網來提供動態易擴展且常常是虛擬化的資源。雲是網絡、萬維網的一種比喻說法。過去在圖中每每用雲來表示電信網,後來也用來表示網絡和底層基礎設施的抽象。所以,雲計算甚至可讓你體驗每秒10萬億次的運算能力,擁有這麼強大的計算能力能夠模擬核爆炸、預知氣候變化和市場發展趨勢。用戶經過我的PC、臺式電腦、手機等方式接入數據中心,按本身的需求進行運算。小程序
要了解雲計算環境下的軟件開發(包括WEB開發),咱們就必需要先明白雲計算的諸多特色:swift
(1) 高擴展性。與傳統的單一服務器不一樣,雲計算充分調動着位於雲端的諸多計算資源,意味着全部的用戶、需求都是潛在的,軟件的業務規模是能夠任意發展的。若是將傳統的軟件工程比做開發一個固定功能的軟件,那基於雲計算的軟件開發則更像一個Chrome瀏覽器平臺,用戶能夠本身定製插件和功能。這就給軟件開發的過程提出了更高的要求。不管是在撰寫文檔的過程,仍是代碼開發的過程,都須要考慮更多的潛在需求。windows
(2) 虛擬化的超大規模。雲計算對應着用戶的雲需求,這些需求按傳統的觀念須要傳送到主機服務器進行處理,並即時返回到client端。然而,在雲計算環境下,一切需求與其使用的具體物理計算資源無關。咱們開發人員無需擔憂需求所須要的具體物理計算資源,而只須要在開發時制定好規則,剩下的計算過程交給雲計算來處理。固然地,這就對應着軟件開發過程當中測試過程的改變。以往的軟件工程須要先大體計算潛在客戶需求和,設計和測試服務器。其中,服務器壓力測試是很是重要的一個環節。若是服務器常常崩潰,那對用戶體驗來講是致命的破壞。然而,基於雲計算的軟件開發即可沒必要擔憂此類問題。微信小程序
(3) 接口的變化。軟件工程向雲計算遷移可能須要開發人員學習新的應用編程接口(API)(好比須要開發面向GOOGLE應用引擎、SalesForce.com或者應用程序未來依賴的任何軟件的API)。雖然對於大部分開發人員,API的學習是很是日常的,但在雲計算開發中尤其突出。另外,雖然一些開發工具擁有容許部署在雲計算的插件,可是編程人員必須學習那些新的功能特性。以微軟SQL Azure爲例,存在「普通的」Web開發環境沒有的技術障礙。可是仍是要儘快熟悉稀疏列(sparse column)、擴展存儲過程(extended stored procedure)、服務代理(Service Broker)或通用語言運行時環境(CLR)和CLR用戶定義類型。這些工具或升級版有許多比較新穎,尤爲是目前軟件工程開發的概念突飛猛進,開發人員可能要注意它們存在的侷限性和版本的不斷革新。瀏覽器
(4) 更高強度的安全性挑戰。雲計算在給用戶帶來成本下降、管理信息便利的同時,雲計算的安全問題也日益凸顯,雲計算意味着用戶數據轉移到用戶掌控範圍以外,其安全風險涉及到諸多方面:數據泄露、數據傳輸過程、用戶難以監管等。逐個來講,雲平臺的環境使得數據集中存儲,一旦雲平臺遭到攻擊被破壞,那麼就會形成數據丟失和隱私泄露的嚴重後果,雲服務提供商擁有超級用戶角色,若是沒有嚴格的監管或者這種超級用戶角色的權限被濫用,就會增長用戶數據泄露風險。數據泄露每每發生在數據傳輸過程,這對軟件開發過程當中的加密算法、動態密碼等方面提出了更高的要求。然而道高一尺魔高一丈,須要防範用戶信息的泄露,編程人員須要不斷地提升本身防護性編程意識,並還要具有必定的密碼學知識。固然,在用戶使用過程當中,用戶對雲計算軟件的監控也是另外一個尖銳的安全問題。用戶在使用雲服務時用戶數據的控制權會轉移到雲服務提供商手中,用戶可能沒法知道本身的數據存放在哪裏,也不知道雲服務提供商是否對數據進行了正確的保護:好比雲平臺是否隔離了多個用戶的數據、雲服務提供商是否按照用戶要求刪除了數據、是否對存儲位置進行了清洗、雲服務提供商是否週期性地對存儲的數據進行完整性檢查等。這又是一個亟待解決和規範化的問題。做爲軟件開發工程領域,須要制定嚴格的規則和標準(例如在用戶使用手冊、開發文檔中加入相關說明或解決方案)。安全
對於傳統的軟件行業,最令開發組織頭疼的問題莫過於盜版問題。這一問題在中國等發展中國家很是嚴重。事實上,各個行業的「盜版、假貨、山寨」層出不窮,然而因爲軟件行業的複製低成本和高利潤,使得這一問題尤其突出。如何能解決這一問題?一方面須要法律的嚴懲,另外一方面,咱們能夠轉換思惟,爲何客戶會選擇盜版?一次成本太高!那麼,雲計算即可解決這一問題。對於傳統軟件開說,其項目的最大初始化成本主要包含三部分:受權成本、培訓成本和服務器的部署。然而,雲計算的開發更爲敏捷,也不須要一開始就購置龐大的服務器設備。這就能夠將「首付」轉化爲軟件後期維護、升級的「貸款」。對於企業和我的來講,分期支付小額的維護費用也是更容易接受的,這樣就不會去鋌而走險購買盜版軟件。反而,盜版軟件缺少後期的維護,在軟件升級上也會出現很是大的問題。
除此之外,基於雲計算的軟件之間能夠很好的交互,這無疑大大提升部署各類軟件的各個部門之間的工做效率。好比,傳統環境下,某公司的財務、生產、人事管理軟件之間沒法友好的工做,造成了一個一個的信息孤島。隨着時間推移,也許公司會採起跨部門的軟件系統,但這意味着更龐大的軟件系統、更復雜的軟件管理和維護,無疑大大增長的人力物力成本。雲計算的強大交互性、互聯性即是解決這一問題的最好方案。
從短時間來看,雲計算所帶來的各項變化對我的影響仍是較小,雲計算技術首先會部署到各大企業用於提升生產力效率。對於軟件開發公司,普遍地聘用有大數據、數據挖掘、網絡安全背景的程序員則是大勢所趨,也是公司在將來軟件開發行業的核心競爭力所在。
固然,雲計算的將來發展也面臨着各類挑戰。在安全問題愈來愈重要的今天,如何能阻止圖謀不軌的人對網絡信息的截獲,是整個軟件開發行業亟待解決的問題。只有將此問題解決,雲計算才能真正完成從概念到服務性產業的躍進和轉變。
談了這麼多,一直在聊雲計算和傳統軟件開發的區別與聯繫。既然雲計算是時代發展的潮流,咱們不妨來單純地探討一下雲計算自己。
其實雲也是分層的。任何一個在互聯網上提供其服務的公司均可以叫作雲計算公司。其實雲計算分幾層的,分別是Infrastructure(基礎設施)-as-a-Service,Platform(平臺)-as-a-Service,Software(軟件)-as-a-Service。基礎設施在最下端,平臺在中間,軟件在頂端。別的一些「軟」的層能夠在這些層上面添加。若是用通俗易懂的例子來闡述這三種模式的區別,那麼用吃披薩的例子再好不過了。就像下面這張圖:
傳統的軟件開發本地部署就像在家本身作,從廚具(烤爐、鐵板、煤氣)到食材(奶酪、cheese、蔬菜、肉蛋)都得本身準備,還須要有專業的烹飪技巧。Iaas(基礎設施即服務)就像從披薩店裏買回承平,本身回家加熱就好。但畢竟仍是在本身的餐桌上享用。PaaS(平臺即服務)相似於外賣,只須要打個電話,就能夠享用,相比以前就更爲簡捷,但終究仍是在本身的餐桌上。而SaaS(軟件即服務)就是直接「下館子」了。什麼都不須要準備就行。
好了,那麼咱們換一種說法。對於一家技術公司,擁有着強大的開發人員和硬件資源,就像一個既會作pizza又有烤箱的cooker,即擁有着礎設施(infrastructure)、平臺(platform)和軟件(software)。
這其實就是雲計算的三個分層,基礎設施在最下端,平臺在中間而軟件在頂端。分別是IaaS、PaaS和SaaS。可是,不是全部公司都擁有這麼強大的開發能力。若是隻是爲了達成某些商業目的而不是技術成就(事實上這也是大部分商業軟件開發公司的目的),那徹底不須要去買服務器,或者別的高昂的硬件來控制本地應用,即本地部署。其實徹底能夠考慮雲服務供應商,也就是元計算的三個層次:IaaS、PaaS和SaaS,就像pizza店提供三種服務:買成品回家作、外賣和到披薩店吃。
基於IaaS: Infrastructure-as-a-Service(基礎設施即服務):
咱們即可以將硬件外包到別的地方,IaaS公司能夠提供場外服務器,存儲和網絡硬件供租用。這無疑大大節省了維護成本和辦公場地,公司能夠在任什麼時候候運行這些租用的硬件來運行。好比,Amazon,Micorsoft等公司就會提供IaaS服務。這些公司提供的不只僅是IaaS,他們還會將其計算能力出租出來供租戶host網站。
基於PaaS: Platform-as-a-Service(平臺即服務):
某些時候,PaaS也叫做中間件。公司的許多開發都已在這一層進行從而節約時間和資源。PaaS公司在網上提供各類開發和分發應用的解決方案,好比虛擬服務器、操做系統等。這會節省軟件開發公司在硬件上的費用,也讓分散的工做小組之間合做變得更加容易(由於互相不用瞭解彼此底層的東西)。好比:Google App Engine、Microsoft Azure,還包括最近興起的公司好比AppFog、Mendix等。很明顯地感受到PaaS公司要麼是老牌公司分出的新部門,要麼是新成立的startup,是很是新穎的概念。
基於SaaS: Software-as-a-Service(軟件即服務)
Web、Web仍是Web!只能說,這是將來一個軟件工程發展的很好的方向。就像Google的chrome同樣,咱們在瀏覽器裏下載不少的插件。最近新興起的微信小程序,就是SaaS很好的例子。軟件能夠直接基於微信運行,好像微信就像傳統的操做系統同樣。使用簡單的Javascript語言,瞭解SaaS的接口文檔,即可以輕鬆地進行編程。
虛擬化技術又是另外一個很是大的話題了,看到有評論裏要博主討論一下,仍是簡要地說幾句我所瞭解的內容:我所瞭解的有spark、hadoop、openstack、cloudstack等。固然,這些虛擬化技術也不是同一個層級的,好比若是把openstack比做windows操做系統,那hadoop像office套件。提及hadoop,雖然它歷史很是悠久我認爲它短時間內應該不會被淘汰。Spark如今雖然比較火,可是in memory的model侷限性很大。若是data size超過內存的size,速度就是大幅度降低。總之Spark在某些特定領域表現很好,可是數據量一大,尤爲是在作reduce like的job時候,對內存要求極高,且不穩定。對於大量的data,spark須要調整參數才能適應。而Hadoop MapReduce的intermediate data on disk較穩定,也較爲通用。
說到openstack和cloudstack,我想用兩張圖標來對比一下:
基本狀況的對比:
架構的對比:
但openstack目前在國內發展的不錯,支持廠家也多。OpenStack是Rackspace和NASA共同研發的,Rackspace自己在IaaS領域就頗有知名度,並且由於有衆多領軍企業都加入到OpenStack當中來。好比sina就有團隊對openstack中的swift作的比較多。
[1] 宋小榮.淺析雲計算與傳統軟件行業的相互影響.鄭州:鄭州大學教育技術中心,2011.
[2]王金金.雲計算服務模式下的知識產權保護研究.合肥:中國科學技術大學.2014.
[3]郭晶晶.雲計算及其安全性分析.信息安全,2012.
[4] Kevin McDonald. 認清雲計算:管理雲計算領域的風險(譯).