雲計算是一種按使用量付費的模式,這種模式提供可用的、便捷的、按需的網絡訪問, 進入可配置的計算資源共享池(資源包括網絡,服務器,存儲,應用軟件,服務),這些資源可以被快速提供,只需投入不多的管理工做,或與服務供應商進行不多的交互。具體而言,其服務內容包括了基礎架構即服務( IaaS) 、平臺即服務( PaaS) 和軟件即服務( SaaS) 3 個部分。其中IaaS經過虛擬化和智能化技術,爲用戶提供基本的計算與存儲能力。PaaS與SaaS則是將經過虛擬化技術,將開發平臺與軟件以服務的方式提供給使用者[1]。雲計算便是由從硬件到軟件的3 層服務體系組成的。算法
任何一個技術都不是憑空產生的,其背後一定有實際需求的拉動,雲計算技術天然也不例外。雲計算的出現是爲了解決資源利用率、運算能力不足以及成本問題。舉例來講,傳統模式下,企業創建一套IT系統不只僅須要購買硬件等基礎設施,還要買軟件的許可證,須要專門的人員維護。當企業的規模擴大時還要繼續升級各類軟硬件設施以知足需求。然而,對於企業來講,計算機等硬件和軟件自己並不是他們真正須要的,它們僅僅是完成工做、提供效率的工具而已,然而企業卻要在這方面花費大量的搭建、維護費用。另外一方面,這些硬件設備,因爲缺少有效的資源調度,每每會產生必定程度的浪費。而云計算則能夠將計算、存儲資源以服務的方式提供,從而將主要的計算過程都放在雲端。於是企業不須要本身搭建IT系統(對於公有云來講),只須要使用雲計算企業提供的服務便可,成本問題就此解決。同時,因爲使用了計算資源虛擬化技術,雲計算企業能夠爲企業按需調度計算資源,從而在很大程度上避免了資源浪費。編程
那麼雲計算下的軟件工程主要有何特色呢?首先,最直觀的一點,因爲PaaS層的存在,人們編程的對象由傳統軟件工程的對象(Object)變爲了服務(Service)。面向服務也就是將業務流總體分紅子業務流,對子業務流級別的模塊進行組織設計,並最終造成軟件系統總體。面向服務使軟件在IT 系統結構層次結構系統中更加接近應用。面向服務的開發模式延伸出了雲計算下的軟件工程。除此以外,因爲IaaS層的存在,雲計算將計算環境與IT物理設備分離開來。這在必定程度上提升了軟件開發的解耦程度。於是,其對於傳統軟件工程的影響主要有如下幾點:api
軟件構件的成熟度提升,同時也能獲得更高程度的軟件複用。因爲在雲計算下,編程時直接使用雲計算提供商提供的服務,而非傳統軟件工程一般的經過對象自底向上搭建各個組件,其組件成熟度天然大大提升,同時其所使用的這部分組件也獲得了複用。成熟組件的複用是解決傳統軟件工程危機的關鍵。一方面,成熟組件的複用減小了軟件開發的錯誤,提升了軟件的可信度;另外一方面,軟件複用大大減小了工做量,提升了開發績效。根據國內著名PaaS 提供商800APP 提供的信息,雲計算模式下開發時間能夠縮減1 /3 ~ 1 /10。而軟件質量與開發效率之間的矛盾一直都是傳統軟件工程危機的根源所在,雲計算在這兩方面同時具備的優點天然使得其成爲解決軟件危機的但願。瀏覽器
因爲軟件實現時直接使用PasS提供的服務,開發者可能只須要少許甚至不須要編碼。其更主要的工做是根據客戶需求,對於雲計算平臺提供的服務進行組織與安排。而在傳統軟件工程的瀑布模型中,開發者須要首先通過分析客戶需求,對軟件架構進行設計分析等等流程以後才能進入最終的編碼工做。而在每一層流程中,每每又要對上一層的結果進行必定的建模模擬,這就使得最終編碼時,開發人員並不會直接考慮客戶需求,而是面對通過層層建模後的結果。這也致使了軟件工程中的又一矛盾:最終代碼與客戶需求之間的矛盾。由上述分析咱們能夠看出,該矛盾的根源在於開發人員面臨的問題空間(客戶需求)與解空間(實現代碼)相距太遠。而在雲計算下,開發人員直接基於平臺提供的服務考慮問題,提升了抽象層次,於是不須要傳統的一層層的向下建模,可以直接面向客戶需求,使得需求與開發具備的同等的語境,最終實現的應用天然也能夠更加貼近客戶需求。服務器
因爲雲計算平臺直接爲開發人員提供服務,提升了抽象層次,開發者實際上不須要作太多的編碼工做,這也大大下降了軟件開發的門檻,使得更多人可以參與進來。而這一特色在以物聯網爲表明的超量信息系統中尤其關鍵。超量信息系統是指在運行過程當中涉及存儲或使用大量數據的系統。一個典型的物聯網系統,涉及大量感知受控的設備,這些感知設備要十的七次方,千萬級。同時在網上進行海量信息和通信進程大約要10的12次方,兆級每秒,這麼多的進程在進行。第三個是超量的非結構化動態數據,約爲10的18次方[2]。那麼咱們不難想象,開發這樣一個大致量的信息系統,須要相對應量的人力,也就是須要所謂的羣體軟件工程。然而,傳統軟件工程須要開發人員具備必定的專業技能與開發經驗,門檻較高,所以羣體開發的想法每每很難實現。然而在雲計算下,軟件開發的難度大大下降,開發者只須要少許的訓練就能夠具有開發能力。這使得在短期內召集起一批開發人員參與超量信息項目成爲可能。於是雲計算爲物聯網系統的發展提供了便利。網絡
雲計算平臺將計算環境與IT物理設備分離開來,提升瞭解耦程度。而衆所周知,軟件技術的發展過程就是不斷解耦的過程。最開始全部軟件都是在一個程序裏,軟件技術的發展就是不斷的把它的組成不部分分拆出來。好比說70年代、80年代的子程序就是把業務邏輯分離出來,八十年代出現的遠程過程調用就是把用戶交互解耦出來。 九十年代出現的消息隊列,就是把同步鏈接的變成異步鏈接的,進一步解耦。21世紀出的消息代理,就是將數據轉換解耦出來。今天,SOA架構就是將用戶交互、數據轉換、業務邏輯、業務實現等等都解耦出來,而且以開放和標準的接口進行服務封裝。而云計算平臺經過計算環境虛擬化,在此基礎上進一步解耦。那麼解耦爲何對於軟件工程如此重要呢?這是由於軟件工程所想要解決的一個核心問題就是變化的問題。在軟件開發維護過程當中,需求的變化、架構的變化、部署的變化、用戶負荷的變化,從設計到最終使用到產品生命週期,它一直在變化。而爲了可以在變化時不至於「牽一髮而動全身」,咱們就須要使得各部件之間不相互依賴,所以在更改某一部件時,其餘部分就不會收到影響,這也正是解耦所作的工做——增長部件間獨立性。架構
傳統軟件工程採起用戶提出需求,開發商設計實現,用戶審覈驗收的二元合做方式。然而在雲計算下,第三方雲計算中心的做用亦十分重要。雲計算模式下的軟件開發和運行環境基本上都是由雲計算中心來架構的,這些資源按照開發者的要求進行配置。在開發者一端省去了硬件設施架構、運行環境調試等工做,只需一個瀏覽器和一些簡單的工具就能夠實施開發。而一些專用雲計算平臺甚至承擔更多工做,使得開發完成以後的測試以及運行維護也所有由雲計算中心負責。app
能夠看出,在新型的「三足鼎立」的關係下,開發商省去了不少重複性的工做,從而可以集中精力處理客戶的需求,大大提升了工做效率。然而云計算中心在簡化開發商工做,改變工程業務鏈的同時,也下降了開發商的商業價值。於是,雲計算平臺,隨着在軟件工程中不斷提高的地位,衝擊了傳統軟件工程中的合做方式。而這種狀況,是當下衆多的中小企業所面臨的問題。機器學習
下面結合當前國內雲服務巨頭——「阿里雲」的例子,來進一步瞭解雲服務發展的現狀。下圖爲阿里雲當前提供的解決方案:異步
阿里雲當前主打的解決方案
能夠看出,其服務涉及建站、建立app、音頻、遊戲、大數據處理、商業等各個方面。這一方面體現阿里對該項目的重視,另外一方面,這也是雲計算在軟件工程應用普遍,對於軟件開發影響深遠的一大致現。
咱們同時能夠注意到,阿里雲緊跟當前熱點,將雲計算與當前的大數據分析、機器學習、人工智能等前沿領域相結合,提供了機器翻譯,個性化推薦,人臉識別、語音識別等雲服務,以下圖:
阿里雲提供的與前沿領域緊密結合的服務
再進一步,用戶如何使用這些服務呢?這裏就體現出來了以前咱們所說的雲服務下降編程門檻的特色。原本實現起來十分複雜的功能,在雲計算下,可能只須要幾行調用API的代碼,甚至無需代碼而僅僅操做幾下鼠標,就能夠輕易實現。
就以機器翻譯爲例。要使用這一功能,用戶首先須要申請相應的服務,以後平臺會向用戶發送其專有的AccessKey。以後用戶要作的就只是按照相應規範調用api便可。在這一例子中,提供的api有兩個:detect與translate,分別用於檢測語言與翻譯。用戶可使用分配給本身的Key,發起HTTPS請求來調用API,便可對於目標文本進行檢測與翻譯。整個過程用戶所要編寫的代碼大概只須要幾十行。這也是其提供的服務主要採用的流程。
而機器學習服務的使用則更爲簡單。阿里雲機器學習平臺經過拖拉轉的方式來操做實驗。將複雜的機器學習算法集成爲算法組件共拖拉,實驗人員經過搭積木的方式實現實驗流程。
大大下降了數據挖掘的操做門檻。這也使得實驗人員能夠從複雜繁重的代碼編寫工做中解放出來,從而專心於模型的設計中去。
以搭積木的方式實現模型
那麼對於傳統軟件開發領域,阿里雲又有着怎樣的優點呢?咱們以其提供的視頻解決方案爲例。當下直播行業十分火爆,吸引了大筆資金。然而獨立開發一個直播平臺倒是一件讓人十分頭疼的事。開發者須要考慮Web、Android、IOS等多種平臺的兼容性衝突、主播端視頻傳輸的穩定性及傳輸速度、客戶端的卡頓等等問題,須要耗費很大精力。在這種狀況下,若是選擇傳統自主開發方案,可能主要工做量都會花在實現上,那麼就很難作出亮點。然而阿里雲直接提供了視頻直播加速、快速視頻解碼、直播監控等等方案,直接爲開發人員解決了技術痛點,使其能夠將工做量花在設計自身特點上,提升了產品的質量。而該服務使用起來也十分簡單。以視頻直播加速爲例,用戶只要在開通服務後,將直播域名提交給雲平臺,再通過幾步解碼格式、推流地址、播放地址的相關設置,便可使用直播服務。整個過程當中無需任何代碼。正像咱們以前說的,雲平臺簡化了開發者的工做,使其可以更好地處理用戶需求,而非被技術難點困住。
衆所周知,軟件工程沒有「銀彈」,雲計算也難以成爲那顆「銀彈」。然而不能否認的是,雲計算的出現提升了軟件複用,簡化了設計過程,下降了開發門檻,加強了解耦程度,大大推進了軟件工程的發展。同時,其對於傳統工程二元格局的衝擊,也促使軟件工程開發模型與相關技術開始產生變革,使得更加多元化的開發模式與商業模式成爲可能。
[1] 史傑,謝麗君,史少華.論雲計算對軟件工程的影響[J].昆明學院學報,2011,33(6):67-68.
[2] 李未.雲計算與軟件開發變革[R].北京:第四屆中國雲計算大會,2012.