文/PKUMASS團(tuán)隊(duì)
云時(shí)代的集成開發(fā)環(huán)境
文/PKUMASS團(tuán)隊(duì)
Ceclipse是一個(gè)開源的系統(tǒng),其云端部分采用VMware的硬件虛擬化技術(shù)來構(gòu)造基礎(chǔ)設(shè)施平臺,使用TC Server作為應(yīng)用服務(wù)器,利用Hyperic HQ對系統(tǒng)進(jìn)行檢測和管理,并以Eclipse為基礎(chǔ)構(gòu)造開發(fā)、編譯和運(yùn)行環(huán)境,同時(shí),利用我們自主開發(fā)的靜態(tài)分析和動態(tài)監(jiān)測系統(tǒng)對源代碼進(jìn)行分析和監(jiān)測。為最終用戶提供可協(xié)同開發(fā)的在線的集成開發(fā)環(huán)境。
Ceclipse主要提供以下服務(wù):開發(fā)環(huán)境支持服務(wù)、靜態(tài)分析服務(wù)、動態(tài)監(jiān)測服務(wù)、代碼存儲服務(wù)和協(xié)同開發(fā)服務(wù)。
具備豐富的應(yīng)用場景
Ceclipse系統(tǒng)具備豐富的應(yīng)用場景。
典型應(yīng)用場景之一:
在學(xué)校的程序設(shè)計(jì)類課程上,學(xué)生無需安裝編程環(huán)境,只需要通過訪問瀏覽器訪問Ceclipse,就可以立刻開始編程之旅,快速地進(jìn)入到程序設(shè)計(jì)語言的學(xué)習(xí)中,這種簡單的入門方式,有利于提高學(xué)生對于編程語言的興趣。借助Ceclipse的協(xié)作特性,學(xué)生可以進(jìn)行更加方便的交流。對Ceclipse的組管理員功能進(jìn)行簡單擴(kuò)展,即可演化為教師-助教系統(tǒng),并且可以將繁雜的教師評審作業(yè)的環(huán)節(jié)進(jìn)行簡化,增加評審的自動化程度,方便程序設(shè)計(jì)類課程的開展。
典型應(yīng)用場景之二:
對于企業(yè)內(nèi)的應(yīng)用,由于Ceclipse具有零部署,易擴(kuò)展的特性,很容易在大量的開發(fā)機(jī)上進(jìn)行直接的部署,有利于簡化企業(yè)開發(fā)機(jī)的初始化環(huán)節(jié),大大節(jié)省人力成本。借助Ceclipse的協(xié)作功能,項(xiàng)目組內(nèi)的成員可以進(jìn)行暢通的交流,而Ceclipse提供的版本管理功能,又可以有力地幫助開發(fā)人員控制代碼版本,免除版本沖突的問題,免除了日常開發(fā)過程中的代碼合并過程。項(xiàng)目的管理人員擔(dān)任組管理員,可以實(shí)時(shí)地掌控項(xiàng)目進(jìn)度。
典型應(yīng)用場景之三:
近年來,各類以程序設(shè)計(jì)為主要項(xiàng)目的比賽有很多,競賽的組織往往需要工作人員投入大量的時(shí)間與精力,由于參賽選手往往會采用不同的編程工具和開發(fā)環(huán)境,在這種情況下,評判參賽選手的代碼就是一個(gè)繁冗的體力勞動。為了查看選手們的代碼,評委們不得不在各種不同的平臺上切換,而這又需要根據(jù)每個(gè)選手的代碼來配置開發(fā)環(huán)境。如果采用Ceclipse作為開發(fā)環(huán)境,不但免除了多次配置環(huán)境的重復(fù)勞動,而且可以使代碼的評閱在某種程度上實(shí)現(xiàn)自動化,統(tǒng)一的后臺接口和運(yùn)行環(huán)境,也使得對代碼質(zhì)量和算法效率的評判更加客觀公正。此外,借助Ceclipse的代碼靜態(tài)分析功能,能夠在第一時(shí)間發(fā)現(xiàn)代碼的雷同等不良現(xiàn)象。
無縫接駁現(xiàn)有系統(tǒng)
Ceclipse的后臺以Eclipse的JDT為基礎(chǔ),可以無縫地與Eclipse系統(tǒng)進(jìn)行接駁,Ceclipse支持用戶上傳本地已有的Eclipse Java項(xiàng)目,并且可以將在線的項(xiàng)目打包下載為Eclipse Java項(xiàng)目。這樣,用戶可以方便地在兩個(gè)系統(tǒng)之間進(jìn)行切換,既可以享受到桌面應(yīng)用程序在界面和功能上的優(yōu)越性,也能享受在線開發(fā)環(huán)境提供的各種便利。
當(dāng)用戶需要向別人展示自己的代碼時(shí),無需再在展示現(xiàn)場配置開發(fā)機(jī),或者將自己的開發(fā)機(jī)帶到展示現(xiàn)場,只需要提前將自己的project上傳到Ceclipse,并且在展示現(xiàn)場訪問即可。甚至如果用戶使用一臺配置了瀏覽器的手機(jī),可以用手機(jī)直接訪問Ceclipse,隨時(shí)隨地修改自己的代碼,隨時(shí)隨地完成開發(fā)工作。
安全并且可靠
對于開發(fā)人員來說,代碼是非常重要的資源,Ceclipse提供多重機(jī)制來保障代碼的安全性。在基礎(chǔ)設(shè)施層面,Ceclipse使用冗余系統(tǒng)保障數(shù)據(jù)的安全,即使基礎(chǔ)平臺崩潰,也能夠利用冗余數(shù)據(jù)快速回滾,恢復(fù)用戶的代碼,保障代碼的安全。在具體服務(wù)層面,Ceclipse為用戶提供自動的代碼保存機(jī)制和多版本代碼的回滾機(jī)制,即使用戶的誤操作導(dǎo)致的修改錯(cuò)誤,只需要簡單的操作,就可以回到修改前的狀態(tài)。對于網(wǎng)絡(luò)服務(wù)來說,可靠性也是評判服務(wù)質(zhì)量的一個(gè)重要方面。Ceclipse可以通過靜態(tài)分析和運(yùn)行時(shí)的動態(tài)監(jiān)測來保障服務(wù)質(zhì)量。對于運(yùn)行在Server上的用戶代碼進(jìn)行高級錯(cuò)誤檢測(如空指針異常),違禁調(diào)用檢查(如本地文件的非法訪問等),惡意代碼分析(如死循環(huán)等),以確保服務(wù)器的平穩(wěn)運(yùn)行。Ceclipse還可以對用戶編程過程中的錯(cuò)誤情況進(jìn)行收集,建立缺陷模式庫,總結(jié)用戶在程序設(shè)計(jì)中的常見錯(cuò)誤和代碼中的常見缺陷,并對這些缺陷進(jìn)行提示,幫助用戶提高代碼質(zhì)量。
Ceclipse對服務(wù)器的多個(gè)層面進(jìn)行實(shí)時(shí)的動態(tài)監(jiān)測與調(diào)整,以確保服務(wù)的順暢運(yùn)行,在基礎(chǔ)設(shè)施層面,對系統(tǒng)資源進(jìn)行詳盡地監(jiān)測,對資源的過度消耗進(jìn)行充分地預(yù)估和及時(shí)的報(bào)警,對運(yùn)行“異?!钡某绦蚣皶r(shí)作出決策(如強(qiáng)制關(guān)閉等)以避免服務(wù)器拒絕服務(wù),實(shí)現(xiàn)整個(gè)系統(tǒng)的負(fù)載均衡。
Ceclipse的部署設(shè)計(jì)
圖1 Ceclipse部署
對于用戶而言,Ceclipse是一個(gè)云,其內(nèi)部是不可知的區(qū)域,用戶向Ceclipse發(fā)出請求,Ceclipse予以響應(yīng)并提供服務(wù),用戶不關(guān)心也不可能知道Ceclipse是如何解決了自己的問題。但是,對于Ceclipse的管理者而言,其結(jié)構(gòu)式非常明晰的。在Ceclipse內(nèi)部,用較小規(guī)模的機(jī)群來實(shí)現(xiàn)各個(gè)不同的功能模塊,每個(gè)功能模塊,在其他的功能模塊看來,也是以云的形式存在,其內(nèi)部實(shí)現(xiàn)細(xì)節(jié)是透明的,這些功能模塊之間相互協(xié)作,為用戶提供完整的服務(wù)。我們可以把每個(gè)提供服務(wù)的模塊稱之為“云團(tuán)”,若干個(gè)“云團(tuán)”相互合作,構(gòu)成了最終用戶眼中的云。在Ceclipse系統(tǒng)中,有圖1所示的幾個(gè)云團(tuán),每個(gè)云團(tuán),在其他的云團(tuán)看來,也是云。
Ceclipse將每個(gè)功能模塊以云團(tuán)的形式實(shí)現(xiàn),這樣有一個(gè)顯而易見的好處,就是任何一個(gè)云團(tuán)的失效,都不會影響其他的云團(tuán)實(shí)現(xiàn)各自的功能。在某些特定的時(shí)刻,系統(tǒng)可以暫時(shí)降級甚至關(guān)閉某些云團(tuán)的服務(wù),以保證能夠持續(xù)地提供最基本的服務(wù)。同時(shí),在系統(tǒng)的進(jìn)一步演化過程中,如果實(shí)現(xiàn)了新的功能,也可以方便的將新的功能模塊以新的云團(tuán)的方式加入到系統(tǒng)中,構(gòu)造成更大的一片云,而不會對原有的系統(tǒng)造成很大的影響。
Ceclipse的架構(gòu)設(shè)計(jì)
Ceclipse采用了分層的架構(gòu)模式,自底向上,分為硬件平臺和虛擬化層,基礎(chǔ)服務(wù)層,分析監(jiān)測層服務(wù)層,Ceclipse服務(wù)層,請求分發(fā)層和用戶交互層。Ceclipse的架構(gòu)圖如圖2所示:
1 .硬件平臺和虛擬化層
Ceclipse采用的基礎(chǔ)平臺為若干臺性能較高的刀片服務(wù)器,服務(wù)器硬盤采用RAID1來保障數(shù)據(jù)安全。直接在服務(wù)器上安裝基于Linux的VMware ESX,并劃分虛擬機(jī),安裝操作系統(tǒng),使之構(gòu)成硬件平臺及虛擬化層,這是Ceclipse云平臺的硬件基礎(chǔ)。
虛擬機(jī)的操作系統(tǒng)保持了一定的多樣性,既有基于Windows平臺的虛擬機(jī),也有基于Linux平臺的虛擬機(jī),這樣可以保證Ceclipse能夠適應(yīng)Eclipse的絕大多數(shù)插件。
虛擬機(jī)按照不同的用途來設(shè)定其性能指標(biāo),對于運(yùn)行編譯和運(yùn)行環(huán)境的虛擬機(jī),給予較高的CPU頻率和內(nèi)存,而對于運(yùn)行Hadoop文件系統(tǒng)的虛擬機(jī),則給予較大的硬盤空間。
2 .基礎(chǔ)服務(wù)層
對于用戶來說,數(shù)據(jù)永遠(yuǎn)是最重要的,而對于軟件開發(fā)人員來說,代碼作為一種關(guān)鍵的數(shù)據(jù)資源,更是非常重要的,因此Ceclipse在設(shè)計(jì)上非常重視數(shù)據(jù)的安全,在硬件層面,采取冗余的RAID保證數(shù)據(jù)的安全性,在數(shù)據(jù)存儲方面,也采取了一系列措施來保障數(shù)據(jù)的安全,提高數(shù)據(jù)的存取速率。
圖2 Ceclipse架構(gòu)設(shè)計(jì)
基礎(chǔ)服務(wù)層主要提供的服務(wù)是數(shù)據(jù)的存儲服務(wù),為了便于文件的存取操作,Ceclipse提供了數(shù)據(jù)庫、Windows文件系統(tǒng)和Hadoop文件系統(tǒng)三種數(shù)據(jù)存儲機(jī)制,分別存儲不同的數(shù)據(jù)資源。對于用戶信息數(shù)據(jù)等,采用數(shù)據(jù)庫存儲的方式保證查詢的效率,對于一些公共的數(shù)據(jù)資源,采用網(wǎng)絡(luò)化的Windows文件系統(tǒng),保證操作的方便,對于用戶的代碼,采用Hadoop文件系統(tǒng)進(jìn)行存儲,一方面可以通過Hadoop的安全和冗余機(jī)制,為用戶代碼加上雙保險(xiǎn),另一方面,多個(gè)節(jié)點(diǎn)存儲數(shù)據(jù),可以讓用戶就近讀取,提高效率。
3. 分析監(jiān)測層
代碼的靜態(tài)分析和運(yùn)行時(shí)的動態(tài)監(jiān)測,以及對系統(tǒng)的全方位的監(jiān)測活動,是Ceclipse系統(tǒng)的一個(gè)重要的特色,Ceclipse的分析監(jiān)測層,提供了完善的分析和監(jiān)測機(jī)制。
首先,分析監(jiān)測層借助對Hyperic HQ相關(guān)功能的封裝,對系統(tǒng)的資源進(jìn)行全面的監(jiān)測,幫助系統(tǒng)的運(yùn)行人員及時(shí)掌握系統(tǒng)的運(yùn)行情況,對系統(tǒng)的資源分配及時(shí)進(jìn)行調(diào)整,并對突發(fā)事件及時(shí)做出反應(yīng)。
其次,Ceclipse對用戶的代碼進(jìn)行靜態(tài)分析,防治惡意代碼在服務(wù)器上被比編譯運(yùn)行,保障服務(wù)器的安全,并通過與缺陷模式庫的比較,及時(shí)發(fā)現(xiàn)用戶代碼中的缺陷,并對用戶進(jìn)行提示,幫助用戶提高代碼質(zhì)量。
最后,對于運(yùn)行在Ceclipse上的各種服務(wù),監(jiān)測系統(tǒng)隨時(shí)監(jiān)測其資源消耗情況,預(yù)防可能發(fā)生的任何資源泄漏,并及時(shí)做出調(diào)整,防止局部錯(cuò)誤擴(kuò)大到全局,保障系統(tǒng)的安全。
4. Ceclipse服務(wù)層
Ceclipse對Eclipse Java的JDT進(jìn)行封裝,將其包裝成Web服務(wù),并向系統(tǒng)的用戶交互層提供訪問接口。該層主要提供三大類服務(wù):基礎(chǔ)功能服務(wù)、認(rèn)證授權(quán)服務(wù)和代碼提示服務(wù)。
基礎(chǔ)功能服務(wù)包括用戶代碼的編譯和運(yùn)行服務(wù),Eclipse項(xiàng)目的導(dǎo)入和導(dǎo)出服務(wù)等。認(rèn)證授權(quán)服務(wù)主要是對注冊用戶進(jìn)行管理,并且實(shí)現(xiàn)項(xiàng)目組的管理功能,以確認(rèn)用戶是否有權(quán)訪問代碼并對其進(jìn)行修改。代碼提示服務(wù)包含的功能非常豐富,主要是代碼在客戶端的高亮顯示,代碼的輸入提示等。
5. 請求分發(fā)層
為了保證Ceclipse能夠支持大量用戶的同時(shí)訪問,Ceclipse提供了請求分發(fā)的功能,首先將不同功能的服務(wù)部署在多個(gè)服務(wù)器集群上,由專門的機(jī)器運(yùn)行專門的服務(wù),以簡化配置服務(wù)時(shí)需要考慮的條件,便于配置和部署。
通過對用戶HTTP請求的分發(fā),將不同的請求分發(fā)到不同的服務(wù)器集群上,以便實(shí)現(xiàn)用戶所要求的服務(wù),服務(wù)器集群上的二級分發(fā)系統(tǒng),可以實(shí)現(xiàn)服務(wù)器的負(fù)載平衡,保證服務(wù)器的效率。
6. 用戶交互層
Ceclipse提供了人性化的人機(jī)交互界面,在使用習(xí)慣上,盡可能地與Eclipse系統(tǒng)保持一致,方便用戶的操作,尤其是Eclipse的用戶可以輕松地轉(zhuǎn)到Ceclipse系統(tǒng)上來。在Ceclipse的設(shè)計(jì)目標(biāo)中,用戶交互體驗(yàn)是一個(gè)可以配置的選項(xiàng),在后期,用戶可以實(shí)現(xiàn)對界面的自定義配置,以滿足自己的個(gè)人習(xí)慣。