Cloud Computing - The Spring Semester - 2017 (云計算,春季,2017)

5.6萬

The class, Cloud Computing, for graduate students, Spring 2017


My Blog: https://greatfree.lofter.com

My Email: bing dot li AT asu dot edu

You are welcome to our QQ group: 469024251



為什么不能進行云編程?


李冰


bing.li@asu.edu



在當(dāng)代云計算被炒得天翻地覆的情況下,一個尷尬的事實是,程序員并不能對云系統(tǒng)進行編程。我這里定義的編程指的是,根據(jù)自己對分布式系統(tǒng)的知識,運用一種編程語言或編程環(huán)境,開發(fā)滿足自身獨特需求的云計算系統(tǒng)。在這個前提下,當(dāng)前計算科學(xué)領(lǐng)域中,并不存在這樣的編程語言或編程環(huán)境。當(dāng)然,GreatFree正在努力打破這個格局。




作為計算機科學(xué)主要研究方向之一,軟件工程已經(jīng)走過了近六十年的歷程。計算機軟件的運行環(huán)境也發(fā)生了巨大變化。我認為,當(dāng)前軟件工程主要關(guān)注的計算環(huán)境完全由傳統(tǒng)單機系統(tǒng)轉(zhuǎn)變?yōu)樵诨ヂ?lián)網(wǎng)支持下的大規(guī)模計算系統(tǒng)。當(dāng)前軟件工程技術(shù)研究目的在于努力幫助開發(fā)人員盡可能便捷地開發(fā)出互聯(lián)網(wǎng)環(huán)境下的計算系統(tǒng)。這樣的系統(tǒng)一般可以籠統(tǒng)稱為云計算系統(tǒng)。這些工作都是建立在這樣的認識前提下,即傳統(tǒng)計算語言(如C、C++或者Java等)或者軟件工程技術(shù)在面對互聯(lián)網(wǎng)計算環(huán)境時,開發(fā)代價已經(jīng)不可承受。




為了幫助程序員快速開發(fā)云計算系統(tǒng),當(dāng)前的軟件工程技術(shù)產(chǎn)生了三個發(fā)展方向。第一,通過為特定計算環(huán)境建立基礎(chǔ)架構(gòu)系統(tǒng),從而大大減輕開發(fā)人員的代價。這些基礎(chǔ)架構(gòu)系統(tǒng)力圖通過軟件工程技術(shù)把復(fù)雜的計算環(huán)境開發(fā)細節(jié)隱藏起來,即代替用戶解決這些龐雜的技術(shù)問題;同時,向開發(fā)人員提供一套腳本語言或者利用現(xiàn)有面向?qū)ο蠹夹g(shù),描述具體應(yīng)用需求。這樣,在整個開發(fā)過程中,開發(fā)人員完全不需要關(guān)心互聯(lián)網(wǎng)計算環(huán)境的細節(jié),只要掌握基本單機或者簡單網(wǎng)絡(luò)環(huán)境下的邏輯描述方法,就可以完成互聯(lián)網(wǎng)環(huán)境中的軟件開發(fā)。當(dāng)前,這種方法被普遍采用;學(xué)術(shù)界和工業(yè)界都有眾多上述架構(gòu)存在;新的架構(gòu)也在不斷被提出。云計算系統(tǒng)作為一個互聯(lián)網(wǎng)環(huán)境中的特殊軟件,主要就是通過這種方法來開發(fā)的。這種方法的優(yōu)點很明顯,那就是通過軟件虛擬方法把復(fù)雜計算環(huán)境抽象成了簡單環(huán)境,從而降低開發(fā)成本。不過,它的缺點也很明顯。在整個開發(fā)過程中,開發(fā)人員完全依賴于已有架構(gòu),他們的主動開發(fā)能力完全被束縛,失去對軟件系統(tǒng)級別上的控制能力。另外,每一個基礎(chǔ)架構(gòu)通常只能針對一種特殊環(huán)境來進行虛擬化,幾乎不可能存在把互聯(lián)網(wǎng)這樣復(fù)雜系統(tǒng)中所有計算細節(jié)都隱藏起來的架構(gòu)。因此,如果在一個具體計算環(huán)境中沒有對應(yīng)架構(gòu)存在,開發(fā)人員開發(fā)代價將大大提高,甚至無法進行開發(fā)。




根據(jù)我前面對云計算編程的定義,由于這個方法開發(fā)人員無需了解互聯(lián)網(wǎng)復(fù)雜計算環(huán)境知識,并且完全依賴某個特殊環(huán)境中的虛擬基礎(chǔ)架構(gòu),無法自由構(gòu)造出滿足各種特殊需求的云計算系統(tǒng),這種開發(fā)方式不能叫做對云計算系統(tǒng)進行編程。




第二種方法就是提出新的應(yīng)用程序接口和設(shè)計模式,并且以開放代碼的方式幫助程序員開發(fā)互聯(lián)網(wǎng)系統(tǒng)。由于互聯(lián)網(wǎng)系統(tǒng)的復(fù)雜性,必然要求軟件工程研究人員提出大量新的程序接口以及組合這些接口的設(shè)計模式。利用這些接口和設(shè)計模式,可以針對不同互聯(lián)網(wǎng)計算環(huán)境靈活開發(fā)出各種可能的計算系統(tǒng)。在這個過程中,互聯(lián)網(wǎng)計算環(huán)境中的技術(shù)細節(jié)對開發(fā)人員并不是完全透明的,程序員必須對互聯(lián)網(wǎng)計算環(huán)境有所了解;同時由于應(yīng)用程序接口和代碼級成熟設(shè)計模式的使用,開發(fā)代價并不高。這種方式克服了利用成熟架構(gòu)開發(fā)時開發(fā)人員完全被動的地位,給他們提供了利用自己的能力主動適應(yīng)各種計算環(huán)境的可能性。更進一步,如果采取開放代碼的方式,開發(fā)人員還可以對具體應(yīng)用程序接口和設(shè)計模式進行修改,從而更加積極靈活地面對各種不同互聯(lián)網(wǎng)計算環(huán)境的要求。這種方式的缺陷是對于開發(fā)人員的要求明顯高于利用虛擬基礎(chǔ)架構(gòu)的方法。但是,根據(jù)我的定義,大家可以看出,這種方法初步為程序員提供了對云計算系統(tǒng)進行編程的能力。我的開發(fā)環(huán)境GreatFree當(dāng)前的工作就是沿著這個方向進行的。




第三,為互聯(lián)網(wǎng)計算系統(tǒng)開發(fā)環(huán)境提出新的編程語言。這當(dāng)然是最直接的解決方案。Java在起初被提出時,號稱是互聯(lián)網(wǎng)語言。相對于C或者C++,它確實前進了一大步。但是,互聯(lián)網(wǎng)計算環(huán)境發(fā)展速度遠遠超出當(dāng)時設(shè)計者的認識。當(dāng)前,幾乎沒有人敢于用Java標(biāo)準(zhǔn)版(Java SE)來開發(fā)互聯(lián)網(wǎng)系統(tǒng)軟件了。換言之,傳統(tǒng)程序語言已經(jīng)難以適應(yīng)互聯(lián)網(wǎng)系統(tǒng)開發(fā);這也是大量基礎(chǔ)架構(gòu)產(chǎn)生的直接原因。Java以及其他傳統(tǒng)開發(fā)環(huán)境不得不推出企業(yè)版,如Java EE,從而降低程序員開發(fā)難度。不過,我認為這些做法都是打補丁,并不想為開發(fā)人員互聯(lián)網(wǎng)或者云計算系統(tǒng)提供通用編程語言。如果說在傳統(tǒng)單機或者簡單網(wǎng)絡(luò)環(huán)境中,程序員可以通過一個計算語言滿足應(yīng)用開發(fā)的要求;為什么在互聯(lián)網(wǎng)環(huán)境中,這種技術(shù)就不存在了呢?或者說,現(xiàn)在為什么程序員沒有可利用的語言來對云計算系統(tǒng)進行編程了呢?計算機科學(xué)家為什么會忽視這個問題呢?針對這個認識,一些號稱云計算編程語言或者編程環(huán)境被提出。但是至少到目前為止,這些方案還遠遠沒有達到互聯(lián)網(wǎng)或者云計算系統(tǒng)編程的要求;被廣泛接受的新的互聯(lián)網(wǎng)開發(fā)語言更是沒有?,F(xiàn)有的一些新語言(如Go或者Scala)甚至更多在追求語言語法上的簡練或者美感。






演講幻燈片:https://greatfree.lofter.com/post/1d231e0d_1069dcc5




GreatFree應(yīng)用程序接口:https://greatfree.0fees.us




書和源代碼:https://github.com/greatfree/Programming-Clouds




語音課程:http://wqbo.cn/63922737/album/5769771




我的博客:https://greatfree.blog.163.com