雲計算(cloud computing)對傳統軟件工程的影響git
目錄
<1> 雲計算的概念和理解github
<2> 雲計算對傳統軟件工程的影響編程
<3> 雲計算在傳統軟件工程中充當的角色api
<4> 軟件使用雲計算的實例。瀏覽器
<5> 結束語安全
<1>雲計算的概念和理解
雲計算是什麼? 雲計算是一種基於因特網,並提供給計算機和其餘須要資源的設備以共享的計算處理資源和數據。它的實現無處不在,根據需求可配置計算資源(如,計算機網絡,服務器,存儲,應用和服務)共享池,這些資源可以被快速提供,只需投入不多的管理工做,或與服務供應商進行不多的交互【1】。
先從一個例子,來說講雲計算。一家名爲Anmiator的小公司成立,由於是幾個大學生建立的,因此客流量也不大,幾臺服務器就能夠支撐5000人次的客流量。後來業務作大了,在高峯期有2萬5千人訪問服務,這麼大的流量給使幾臺服務器宕機,所以公司火燒眉毛的須要要購置大量服務器,但這樣是很不划算的,首先資金來源從哪裏來就是一個問題,其次並不老是有這麼多的人訪問資源,大多數時候服務器是閒置的。公司的負責人史蒂文,最終決定將業務移到亞馬遜彈性計算雲上,這樣一來服務器的費用省了,而且他們的服務器租用量並非不變的,而是隨着流量而變化,當流量大時服務器租用量增大,當流量小時服務器租用量減少,這樣既解決了高峯期流量突增的問題,也解決了服務器閒置的問題【2】。服務器
從這個例子中咱們能夠歸結出雲計算的幾個突出的特色:
(1)超大規模:大多數雲計算中心都具備至關的規模。從這方面來看,開始大力推進雲計算的基本都是大公司。 Google,Amazon 、IBM 、微軟、Yahoo等雲計算中心擁有幾百萬臺服務器,並且這些服務器不是獨立存在的,雲計算中心能經過整合和管理這些計算機集羣來提供給用戶超強的計算能力。
(2)無限終端:用戶在任意位置、使用各類終端獲取均可以經過雲來獲取服務,只需將指令發給雲,並由雲計算和處理,最終將結果反饋給用戶。在這個過程當中用戶不須要知道雲的工做原理或者雲是什麼,只需經過簡單的操做便可獲取服務。
(3)可靠性好:可靠性對雲計算來講相當重要,由於若是一旦雲計算中心的數據丟失,將會致使災難性的後果,用戶的歷史數據就會丟失而且用戶的數據安全也沒法保證。在這方面,雲計算採起了數據備份以及分佈式等衆多技術來保證可靠性。
(4)通用性:雲計算中心不多爲特定的應用存在,但其有效支持業界大多數的主流應用,而且一個「雲」能夠支撐多個不一樣類型應用的同時運行,並保證這些服務的運行質量。
(5)高可擴展性:用戶所使用「雲」的資源能夠根據其應用的須要進行調整和動態伸縮,而且再加上前面所提到的雲計算中心自己的超大規模,使得「雲」能有效地知足應用和用戶大規模增加的須要。
(6)按需服務:「雲」是一個龐大的資源池,用戶能夠按需購買,就象自來水、電和煤氣等公用事業那樣根據用戶的使用量計費,並沒有需任何軟硬件和設施等方面的前期投入。
(7)廉價:首先,因爲雲計算中心自己巨大規模所帶來的經濟性和資源利用率的提高,其次,「雲」大都採用廉價和通用的 X86 節點來構建,所以用戶能夠充分享受雲計算所帶來的低成本優點,常常只要花費幾百美圓就能完成之前須要數萬美圓才能完成的任務。
(8)完善的運行與維護機制:穩定纔是雲計算之因此打入市場的根本緣由之一,這很大一部分來源於企業可以完善的運行雲而且可以有效的維護。
(9) 雲計算是以用戶爲中心的。做爲一個使用者,一旦你鏈接到雲中,那麼那裏存放的資源都將變成你的。並且只要你要願意,不只數據能夠爲你所用,並且也可被他人所共享,這點在咱們使用百度雲下載各類pirate books已經體現的很突出了。
(10) 雲計算是以任務爲中心的。雲計算的智能型,已經不只僅侷限於有沒有指定功能了,而是詢問用戶應該怎樣執行該功能。
(11) 雲計算是可編程的。雲計算的本質是可以讓機器處理大規模的數據,因此必然要求雲計算具備可編程性質【3】。
(12)雲計算模式能夠看作是爲電廠集中供電模式。雲計算是將原本在我的電腦上的計算動做變爲到雲計算中心執行的動做。在雲計算模式下,用戶的計算機只須要必要的操做系統,以及恰好支持電腦運行的內存,不多的硬盤空間空間和軟件,就能夠知足咱們的需求。由於用戶的計算機除了經過瀏覽器給「雲」發送指令和接受數據外基本上什麼都不用作即可以使用雲服務提供商的計算資源、存儲空間和各類應用軟件。這就像是把顯示器放在使用者的面前,而把真正用於計算的主機放在了雲端。雲計算把鏈接「顯示器」和「主機」的電線變成了網絡,把「主機」變成雲服務提供商的服務器集羣。
【圖1】
好比咱們如今要在一臺電腦上寫Java程序,咱們須要作些準備工做呢?(1)下載jdk(2)配置環境變量(3)一款好用的編輯器(Eclipse或intellij idea)對於Java的初學者,作完這些準備工做是很麻煩的一件事。但有了雲計算,讓這一切都變的簡單了起來。Java在線編譯器能夠直接讓咱們開始編寫Java程序(打開瀏覽器便可),而不須要如今任何東西。例如ideone,codepad,compilr等在線編譯器均可以快捷的開始編寫程序。
【圖2】
Java 在線編譯器和傳統編譯環境最大的區別在於前者不須要複雜的客戶端及複雜的庫。Java在線編譯器徹底擺脫了傳統的束縛,將全部的庫和應用集成到雲端的Web Server上面,實現了雲計算。這樣在用戶的計算機上只須要一個瀏覽器就能夠編寫Java,用戶將代碼提交,經過雲計算中心編譯並運行而後將結果返回用戶。簡化流程圖以下:
【圖3】
那麼雲計算主要包含哪些服務形式呢?一般的分類方法是分爲IaaS(Infrastructure as a Service,基礎設施即服務)、PaaS(Platform as a Service,平臺即服務)和SaaS(Software as aService,軟件即服務),基本對應於傳統IT中的硬件、平臺和應用軟件。
<2>雲計算對傳統軟件工程的影響
首先從六個方面討論這個問題:
(1) 軟件架構開放性
軟件架構是什麼呢? 軟件架構是指基本結構的軟件系統,創建這種結構的紀律,這些結構的文檔。須要這些結構來思考軟件系統。每一個結構包括軟件元件,其中的關係,以及兩個元件和關係的性質,連同理每一個元素的引入和配置。該體系結構的軟件系統的一個比喻,相似於架構建築物【4】。
"軟件的共享"使得有價值,擴展性強的軟件可以被大量的工程使用,傳統軟件開發已經從封閉走向了開發。雲計算使得大量的開發團隊可以共享不少的優秀代碼和架構,不須要重複的造輪子了,這樣一來編寫源代碼的工做量大大減少了,咱們能夠想象到,當雲計算與軟件架構的聯繫很是緊密的時候,一個工程的主要任務就會是分析需求,而具體編碼就會變成從開源架構中選取適合的架構,並從代碼庫中選取詳細代碼組合成一個完整的工程。網絡在一個團隊中起的做用不只僅是提升團隊的溝通能力,而是成爲團隊工程的開發平。雲計算
使得不少軟件架構最初的一個團隊進行開發轉變成任何對該軟件感興趣的人均可以進行開發。這極大的加強了軟件架構的開放性。
舉一個例子,近年來Github迅速發展,該網站就像一個「代碼噴泉」,天天都有大量的編程愛好者對其中的項目進行完善和修改,他們經過Github,促進了開源軟件的發展而且影響了軟件開發模式。他們爲這個社區所作的貢獻對整個雲計算生態系統都有着極大的價值。
github中爲企業的團隊項目也提供了服務,GitHub企業版和普通的Github相似,GitHub企業版是專爲大型企業的軟件開發團隊,經過靈活的部署選項,集中權限,以及數以百計的集成,團隊可以方便快捷的完成【5】。
【圖4】
(2)軟件對象的分析和複用
首先須要介紹一下UML。
【圖5】
UML用類圖來(class diagram)來表示類,接口,及其關聯。這裏能夠簡單的說,一個工程是由衆多的類以及接口,以及類與類之間的關係構成的。一般一個類圖能夠由下圖的模式來進行表示。 網絡
【圖6】
這說明在傳統軟件工程中,軟件是由衆多的模塊組成的,咱們須要分析這些類的功能,接口的定義,每一個類的父類與子類,每一個類的前置和後置條件。在雲計算軟件工程中,只要咱們可以將每一個模塊分析的十分清楚,那麼咱們就能夠經過平計算開發平臺找到咱們須要的軟件模塊,只需進行部分改寫和鏈接以及一部分的重寫,來完成整個功能【6】。
雲計算使得傳統的軟件工程在開發中,更加註重對軟件對象的分析和複用,由於在軟件開發中。軟件體現出了很明顯的結構化和模塊化(在上面的UML中體現的最爲突出)。所以只要咱們將軟件對象分析清楚,那麼咱們就成功了一半了。
雲計算帶給咱們的海量數據,能幫咱們提升工做效率,並能夠提供給咱們大量的用戶體驗和用戶需求。若是相對孤立地研發,沒有數據支持,那咱們的開發就具備很大的盲目性。可是雲平臺的開發工具、開發環境、開發平臺將爲傳統軟件開發、異地開發等帶來便利。而且咱們能夠利用雲計算實現異地開發,溝通交流等功能,而且不怕代碼丟失,或工做環境忽然崩潰等意外狀況,由於咱們的編譯器和文檔也能夠直接進行在線編輯。
(3)軟件過程動態性和開發組織社會化(這二者之間有必定的聯繫所以合併成一個標題)
經過雲計算使得傳統軟件工程的開發更加的大衆化,以及更加有效率的開發,併爲並行開發提供了方便,開發組織每每是由一羣對同一個項目感興趣的志同道合的軟件開發者組成,他們可能來自於世界各地。而且對於一個項目一個團隊中極可能在短期內更迭多個版本(動態性),而且最終獲得穩定版本。
(4)開發人員大衆化
雲計算使得傳統軟件開發者的隊伍大大增長,利用雲計算,開發團隊將整個團隊的項目上傳到了代碼託管平臺,而且能夠邀請對此感興趣並樂於開發的編程愛好者共同進行開發,開發人員從一個團隊,到萬衆開發,許多模塊功能的代碼(這一點在前文的軟件對象的分析部分已經講過了)公佈在gitHub上或者osChina等代碼託管平臺上,能夠快速有效的而且完善的完成。這一點雲計算也使得軟件更加的開源化。這一點雲計算和代碼託管不謀而合,對於不少主張開源的開發者來講,雲計算使得開發者利用代碼託管平臺將本身開發的應用與其餘開發者分享,並且還能夠利用代碼託管平臺得到其餘的開發組件,這些開發組件或者其餘樂於共同開發的編程愛好者提交的代碼可讓開發者很是快速地找到一個有效的解決方案。這樣就可讓應用開發變得更加便捷,而且能夠經過懸賞的方式鼓勵你們參與到項目中來。
除了上文提到的gitHub,還有osChina等衆多的代碼託管平臺。
(5)資源部署的虛擬化
經過虛擬化技術可實現軟硬件分離,虛擬化每每意味着平臺無關性(這一點咱們能夠從JVM中獲取啓發)。
每每在多種平臺上均可以方便的進行資源部署。它包括將單個資源劃分紅多個虛擬資源的裂分模式,也包括將多個資源整合成一個虛擬資源的聚合模式。
服務器的虛擬化是指"服務器以及使用軟件模擬數據存儲設備"。這至關於吧服務器隔離開來。每個虛擬服務器做爲物理服務器的一部分運行,多個虛擬服務器能夠在一臺物理服務器上運行。這些虛擬服務器能夠是分離的,而且能夠單獨使用處理。
資源部署要虛擬化的前提是必須保證效率,即虛擬化後程序的運行效率必須大於等於在本地平臺上運行的效率。爲了更好的理解這一點,咱們介紹一下Hadoop。Hadoop是一個可以讓用戶輕鬆架構和使用的分佈式計算平臺。經過Hadoop用戶能夠很簡單的處理大量數據或者進行開發。經過下圖咱們能夠知道,資源部署的虛擬化能夠保證效率(圖中VM>native)。
【圖7】架構
(6)下降軟件開發的複雜性
開發團隊在將服務器和資源配置等交給提供雲服務的企業後,只須要負責開發。其餘服務器以及計算資源等問題都由提供雲服務的企業來負責。用一句話說就是「大家負責開發,其餘的都交給咱們(提供雲服務的企業)」。
(7)顯著下降開發團隊的成本
開發團隊只需付出相對較低的價格就能夠得到雲服務公司的服務器和數據處理功能,不須要團隊購買硬件(文中的第一個例子就能夠說明雲計算的便宜)。使用雲計算服務,如icloud,比購買通常的物理硬件要便宜得多,那麼中小企業就能夠擺脫不少沒必要要的開支。例如cloud擁有的5GB的免費存儲空間已經足夠的存儲至關一部分中小企業的工做文件備份了,這能夠爲他們節省不少的經費。不少雲服務公司,都對小額的租用採起免費試用的策略,例如Amazon的AWS就是亞馬遜提供的專業雲計算服務。雲計算對於創業團隊是一個很大的助力。
【圖8】
(8)銷售模式,技術模式,管理模式的進步
雲計算對傳統軟件開發的影響是深遠的,不管是技術模式仍是管理模式都會發生巨大的變化。在雲計算充分發展的將來,軟件開發完成後,不須要我的用戶手動安裝,而是隻須要接入某個應用功能服務商即可以完成全自動的安裝,我的用戶將不涉及任何技術層面的東西了,傳統軟件開發的技術模式和管理模式也會更加的智能化【7】。
(9)"代碼再也不值錢"
隨着雲計算的發展,團隊進行軟件開發的時候將極可能不須要進行具體的代碼設計,而代碼庫中的代碼愈來愈多,這一點以谷歌爲例,它包含了搜索、郵件、地圖、文檔處理等等功能,總共的代碼的行據Google工程部經理 Rachel Potvin透露,是20億行。軟件開發團隊只須要從海量的代碼庫中尋找特定的功能模塊,最終進行構件間的組合,這同時也使得軟件的架構分析在軟件開發中也來越重要。app
<4>軟件使用雲計算的實例。
雲計算有不少成功的案例,這裏舉兩個例子。
(1)IBM爲中國中化集團公司打造的企業雲計算平臺
中石化面臨的困境是,調整業務的時候都須要進行信息同步,而這個過程遭遇資源瓶頸,孤立的數據中心令全球化的運做難覺得繼。中石化但願可以儘量的進行數據共享和整合。IBM Cloud Labs 和GTS爲中化搭建了企業雲計算平臺,該平臺可以支持中化員工訪問整合的資源共享池,而且支持運行大數據處理應用
(2)甲骨文ERP雲幫助上海海每天盈捷紡織科技有限公司打造雲計算平臺
海天輕紡集團是一家集研發、生產、商貿及投資爲一體的高科技紡織企業集團,。甲骨文在該公司搭建的雲計算平臺,幫助進行財務、採用、項目組合管理和供應鏈管理【8】。
【圖9】
<5>結束語
雲計算的發展仍然在繼續。隨着更多公司和我的對雲計算的使用,不少工做的新模式將被創造出來。將會大大改善傳統軟件工程的開發模式,甚至在會給傳統軟件開發帶來革命性的進步。
<6>引用文獻及插圖
【1】:美國國家標準與技術研究院(NIST):" Cloud computing is a type of Internet-based computing that provides shared computer processing resources and data to computers and other devices on demand. It is a model for enabling ubiquitous, on-demand access to a shared pool of configurable computing resources (e.g., computer networks, servers, storage, applications and services), which can be rapidly provisioned and released with minimal management effort."
【2】:《雲計算---深入改變將來》 做者:張爲民
【3】:《CloudComputingWebBasedApplications》 (美)MICHAEL MILLER
原話爲
"Cloud computing is User-centeric .Once you as a user are connected to the cloud,whatever is stored there----documents,messages,images,applications,whatever becomes yours.In addition,not only is the data yours,but you can also share it...."
"Cloud computing is task-centric......"
"Cloud computing is Programmable......"
【4】:wikipedia 原話爲"Software architecture refers to the fundamental structures of a software system, the discipline of creating such structures, and the documentation of these structures. These structures are needed to reason about the software system. Each structure comprises software elements, relations among them, and properties of both elements and relations,[1] along with rationale for the introduction and configuration of each element."
【5】:來源於gitHub Enterpries 網站的Features介紹 原文爲 "GitHub Enterprise is the on-premises version of GitHub.com. With flexible deployment options, centralized permissions, and hundreds of integrations, you and your team can enjoy the best parts of working with GitHub without compromising on the features your business needs."
【6】:書名《Applying UML and Patterns 》 做者:Craig Larman。 來自於第16.1章,原文爲"The UML includes class diagrams to illustrate classes, interfaces, and their associations. They are used for static object modeling.................."
【7】:書名《問道雲計算》 做者:王鵬,來源第6章。
其餘參考書籍:
【8】:取自2015年度雲計算應用案例TOP100
【9】:《雲計算寶典:技術與實踐》
其餘參考
【10】:《OpenStack Cloud Computing Cookbook 2012》
引用圖片:
【圖1】:《雲計算髮展的幾個關鍵問題》做者:張銘芮
【圖2】:自行截圖
【圖3】:自行繪製
【圖4】:github enterprise網站截圖
【圖5】:UML官網
【圖6】:來源於《Applying UML and Patterns 》 16.1章的插圖。
【圖7】:來源於PPT《虛擬化和雲計算讓Hadoop變得簡單》
【圖8】:來源於https://aws.amazon.com/cn/free/
【圖9】:來源於2015年度雲計算應用案例TOP100