金思宇,吳振宇,沈蘇彬
(1.南京郵電大學(xué) 物聯(lián)網(wǎng)學(xué)院,江蘇 南京 210003;2.南京郵電大學(xué) 計(jì)算機(jī)學(xué)院,江蘇 南京 210003)
一種基于Android平臺(tái)的云客戶端實(shí)現(xiàn)方案
金思宇1,吳振宇1,沈蘇彬2
(1.南京郵電大學(xué) 物聯(lián)網(wǎng)學(xué)院,江蘇 南京 210003;2.南京郵電大學(xué) 計(jì)算機(jī)學(xué)院,江蘇 南京 210003)
由于受到存儲(chǔ)資源和計(jì)算資源匱乏的影響,移動(dòng)設(shè)備無(wú)法進(jìn)行大文件的存儲(chǔ)操作和計(jì)算密集型任務(wù)的執(zhí)行操作,這種資源受限的問(wèn)題一直是影響移動(dòng)設(shè)備用戶體驗(yàn)的關(guān)鍵問(wèn)題之一。為此移動(dòng)設(shè)備生產(chǎn)廠商長(zhǎng)久以來(lái)試圖通過(guò)不斷改良硬件來(lái)解決這一問(wèn)題。文中試圖通過(guò)利用云計(jì)算技術(shù)解決移動(dòng)設(shè)備存儲(chǔ)和計(jì)算資源受限的問(wèn)題。首先成功地設(shè)計(jì)并開發(fā)了支持OpenStack、AWS和阿里云進(jìn)行云存儲(chǔ)操作的云客戶端原型,接著提出了一種移動(dòng)應(yīng)用計(jì)算減荷的解決方案。利用云存儲(chǔ)技術(shù)和本地文件瀏覽器將本地的大文件上傳到云端;通過(guò)攔截進(jìn)程間通信,將耗時(shí)任務(wù)減荷到云端運(yùn)行。通過(guò)實(shí)驗(yàn)驗(yàn)證了云客戶端原型可以成功地將移動(dòng)設(shè)備上的大文件保存到云端,提高移動(dòng)設(shè)備的運(yùn)行效率。
云計(jì)算;云存儲(chǔ);移動(dòng)云;Android客戶端
以智能手機(jī)為代表的移動(dòng)設(shè)備由于其安裝了豐富的應(yīng)用得到了飛速的普及和發(fā)展。隨著各種各樣的移動(dòng)應(yīng)用的涌現(xiàn),用戶對(duì)移動(dòng)設(shè)備的存儲(chǔ)和計(jì)算能力的要求越來(lái)越高。但移動(dòng)設(shè)備硬件的發(fā)展速度常常無(wú)法滿足移動(dòng)應(yīng)用對(duì)于存儲(chǔ)和計(jì)算資源的要求,一些應(yīng)用由于受到移動(dòng)設(shè)備存儲(chǔ)空間小、處理能力低、內(nèi)存有限、網(wǎng)絡(luò)連接不穩(wěn)定和電池使用時(shí)間短等限制而無(wú)法在移動(dòng)設(shè)備上運(yùn)行[1]。
目前,移動(dòng)設(shè)備的生產(chǎn)商力圖不斷通過(guò)改良移動(dòng)設(shè)備的硬件來(lái)提高移動(dòng)設(shè)備的運(yùn)行效率和計(jì)算能力。這導(dǎo)致了兩方面的問(wèn)題:由于尺寸限制,硬件層面的改良很難完全滿足應(yīng)用的需要;一味增加硬件的性能,在運(yùn)行對(duì)移動(dòng)設(shè)備性能要求不高的應(yīng)用時(shí)造成了資源浪費(fèi),增加了設(shè)備廠商的成本,最終導(dǎo)致移動(dòng)設(shè)備用戶成本的增加。
近年來(lái),云計(jì)算技術(shù)發(fā)展迅速,它使用戶可以在任何時(shí)間任何地點(diǎn)按需獲得所需資源。驅(qū)使云計(jì)算誕生和發(fā)展的因素有:網(wǎng)格計(jì)算的發(fā)展、數(shù)據(jù)存儲(chǔ)和傳輸中高新技術(shù)的出現(xiàn)、WEB2.0的出現(xiàn)。其中虛擬化技術(shù)的發(fā)展對(duì)云計(jì)算影響巨大[2]。
云計(jì)算具有虛擬化、分布式和動(dòng)態(tài)可擴(kuò)展性等特征。虛擬化指對(duì)云進(jìn)行的管理、擴(kuò)展、遷移和通過(guò)虛擬平臺(tái)進(jìn)行的備份等操作都可以在虛擬層完成;分布式指的是計(jì)算所用的物理節(jié)點(diǎn)是分布式的;動(dòng)態(tài)擴(kuò)展指的是通過(guò)動(dòng)態(tài)擴(kuò)展虛擬化層達(dá)到承載應(yīng)用的目的。虛擬化技術(shù)通過(guò)將物理資源適應(yīng)邏輯進(jìn)行統(tǒng)一表示,打破了原有物理資源的壁壘。
云存儲(chǔ)和計(jì)算減荷技術(shù)可以從軟件的角度解決移動(dòng)設(shè)備資源受限的問(wèn)題。云存儲(chǔ)將數(shù)以萬(wàn)計(jì)的廉價(jià)存儲(chǔ)設(shè)備結(jié)合成一個(gè)龐大的存儲(chǔ)資源池,用戶可以按照自己的需求使用池中的存儲(chǔ)資源[3],它的三個(gè)特征是:分布于網(wǎng)絡(luò)(互聯(lián)網(wǎng)或局域網(wǎng))、易于擴(kuò)展和易于管理[4]。計(jì)算減荷可以將資源敏感的計(jì)算任務(wù)從移動(dòng)設(shè)備遷移到資源豐富的云端,增強(qiáng)移動(dòng)應(yīng)用的性能、減少電量消耗。
文中分別從存儲(chǔ)和計(jì)算的角度出發(fā),研究如何將云中的資源提供給移動(dòng)設(shè)備使用?;贏ndroid平臺(tái)創(chuàng)新性地設(shè)計(jì)并實(shí)現(xiàn)了一種支持三種主流云平臺(tái)的移動(dòng)云客戶端,提出了一種適用于Android設(shè)備的進(jìn)程間通信攔截方案,利用該方案設(shè)計(jì)開發(fā)了客戶端的云存儲(chǔ)功能和計(jì)算減荷功能。
1.1 移動(dòng)云架構(gòu)
移動(dòng)云的定義是:一種云計(jì)算技術(shù)和移動(dòng)設(shè)備的整合,旨在在存儲(chǔ)、計(jì)算、能源和情景感知方面使移動(dòng)設(shè)備具有充足的資源[5]。
移動(dòng)云計(jì)算是用云計(jì)算技術(shù)和移動(dòng)計(jì)算技術(shù)共同發(fā)展而來(lái),這個(gè)跨學(xué)科的技術(shù)也被稱為mobicloud computing[6]。
移動(dòng)云計(jì)算具有兩種不同的架構(gòu):一是以基礎(chǔ)設(shè)施為基礎(chǔ)的,二是專用的云。在基于基礎(chǔ)設(shè)施的云計(jì)算架構(gòu)中,硬件基礎(chǔ)設(shè)施仍然是固定的,并且向移動(dòng)用戶提供服務(wù)。相對(duì)的,專用的云指的是一組移動(dòng)設(shè)備組成的云平臺(tái),其基于局域網(wǎng)或因特網(wǎng)向其他移動(dòng)設(shè)備提供云服務(wù)[7]。文中討論的移動(dòng)云是基于基礎(chǔ)設(shè)施的云。
移動(dòng)設(shè)備可以通過(guò)兩種方式接入到云中,分別是通過(guò)移動(dòng)網(wǎng)絡(luò)和熱點(diǎn)接入,如圖1所示。
圖1 移動(dòng)云架構(gòu)
與3G移動(dòng)網(wǎng)絡(luò)相比,WiFi具有更低的延遲和能耗[7],所以在接入網(wǎng)絡(luò)方式上用戶應(yīng)首選WiFi。文中對(duì)移動(dòng)網(wǎng)絡(luò)環(huán)境下的上傳下載操作進(jìn)行了相應(yīng)優(yōu)化。
1.2 主流云平臺(tái)介紹
OpenStack為公有云和私有云提供了可擴(kuò)展的彈性云平臺(tái),可以實(shí)現(xiàn)簡(jiǎn)單、大規(guī)模可擴(kuò)展的云。圖2展示了OpenStack的基本架構(gòu)。
圖2 OpenStack架構(gòu)圖
其中,Nova作為云平臺(tái)的控制器,具有Nova-API,負(fù)責(zé)根據(jù)用戶的請(qǐng)求部署資源;Queue,是通過(guò)RabbitMQ實(shí)現(xiàn)的消息隊(duì)列,用于實(shí)現(xiàn)遠(yuǎn)程程序請(qǐng)求;Nova計(jì)算模塊,負(fù)責(zé)開始或終止計(jì)算節(jié)點(diǎn)上的虛擬機(jī)實(shí)例;Nova網(wǎng)絡(luò)模塊,負(fù)責(zé)為虛擬機(jī)實(shí)例管理IP地址以及建立虛擬局域網(wǎng);Nova中卷管理模塊負(fù)責(zé)關(guān)鍵虛擬機(jī)的卷的創(chuàng)建和掛載等操作;Nova調(diào)度模塊,負(fù)責(zé)根據(jù)可用的計(jì)算節(jié)點(diǎn)調(diào)度計(jì)算資源;Nova數(shù)據(jù)庫(kù)[8]。Swift對(duì)象存儲(chǔ)系統(tǒng)非常易于擴(kuò)展,其包含一個(gè)代理服務(wù)器、一個(gè)對(duì)象服務(wù)器、一個(gè)賬戶服務(wù)器、一個(gè)容器服務(wù)器。Glance是鏡像存儲(chǔ)組件,用于在虛擬機(jī)的鏡像中創(chuàng)建用于查找和檢索的系統(tǒng)。Dashboard實(shí)現(xiàn)一個(gè)基于Web的用戶接口。
亞馬遜AWS最早通過(guò)網(wǎng)頁(yè)的形式為用戶提供IT資源服務(wù),可以說(shuō)是云計(jì)算的鼻祖。阿里獨(dú)立開發(fā)的飛天平臺(tái)是阿里云服務(wù)的基礎(chǔ),其可以有效地管理數(shù)據(jù)中心中的服務(wù)器集群,很好地做到了隱藏層硬件實(shí)現(xiàn)的細(xì)節(jié),使用戶便于使用存儲(chǔ)、計(jì)算資源。
1.3 Android系統(tǒng)架構(gòu)
Android平臺(tái)基于Linux內(nèi)核,其將應(yīng)用、應(yīng)用系統(tǒng)內(nèi)核和中間件進(jìn)行了分層。其基本架構(gòu)見圖3。
圖3 Android系統(tǒng)架構(gòu)
Linux內(nèi)核層:主要負(fù)責(zé)保障系統(tǒng)運(yùn)行的安全性、穩(wěn)定性,管理基本的內(nèi)存使用,管理程序的進(jìn)程、網(wǎng)絡(luò)堆棧和處理驅(qū)動(dòng)模塊。Android系統(tǒng)的Linux內(nèi)核層放棄了使用虛擬內(nèi)存文件,提高了文件系統(tǒng)的工作效率[9]。
Android運(yùn)行時(shí)及其他庫(kù)層:Android平臺(tái)上每個(gè)應(yīng)用都有自己專有的Dalvik虛擬機(jī)實(shí)例。經(jīng)過(guò)優(yōu)化使每個(gè)虛擬機(jī)占用很小的內(nèi)存。
應(yīng)用框架層:使開發(fā)人員有權(quán)限訪問(wèn)框架中所有API。
應(yīng)用程序?qū)樱杭聪到y(tǒng)自帶的用于實(shí)現(xiàn)一些重要基礎(chǔ)功能的應(yīng)用,開發(fā)新應(yīng)用時(shí)可以很方便地與這些核心應(yīng)用交互[10]。
將文中設(shè)計(jì)的移動(dòng)云客戶端功能視圖劃分為如下模塊:用戶認(rèn)證、云存儲(chǔ)、信息管理、計(jì)算減荷和其他功能。
2.1 用戶認(rèn)證模塊
用戶認(rèn)證模塊主要負(fù)責(zé)獲取用戶輸入的賬號(hào)密碼和與云端認(rèn)證模塊交互,判斷認(rèn)證結(jié)果后返回給客戶端。其首先檢驗(yàn)賬號(hào)密碼的合法性并判斷移動(dòng)設(shè)備目前的聯(lián)網(wǎng)狀態(tài),接著和云平臺(tái)交互進(jìn)行用戶認(rèn)證操作,最后用戶認(rèn)證模塊對(duì)認(rèn)證結(jié)果進(jìn)行判斷,如果認(rèn)證成功則向客戶端返回成功認(rèn)證的消息,若認(rèn)證不成功則判斷失敗原因,如用戶賬號(hào)密碼錯(cuò)誤或是網(wǎng)絡(luò)因素,返回相應(yīng)的失敗原因給客戶端。
2.2 云存儲(chǔ)模塊
云存儲(chǔ)模塊主要負(fù)責(zé)根據(jù)用戶選擇的本地或云端文件完成對(duì)應(yīng)的上傳或下載操作。由于在移動(dòng)網(wǎng)絡(luò)下進(jìn)行云存儲(chǔ)操作相比WiFi環(huán)境具有低帶寬、高時(shí)延的缺陷,所以針對(duì)移動(dòng)網(wǎng)絡(luò)進(jìn)行了優(yōu)化設(shè)計(jì)。
數(shù)據(jù)上傳模塊中,首先實(shí)現(xiàn)對(duì)本地設(shè)備文件進(jìn)行瀏覽的功能。其次,允許用戶選擇需要上傳的文件,并選擇是執(zhí)行直接上傳操作還是壓縮上傳操作。針對(duì)移動(dòng)網(wǎng)絡(luò)環(huán)境,文中優(yōu)化了上傳機(jī)制,在該環(huán)境下會(huì)優(yōu)先推薦用戶使用壓縮上傳功能,將待上傳文件壓縮成ZIP格式再進(jìn)行上傳。數(shù)據(jù)上傳模塊支持用戶多選在不同路徑下的文件,在一次上傳操作中打包將這些文件上傳云端。
數(shù)據(jù)下載模塊,首先會(huì)遍歷云端已有的文件和文件存儲(chǔ)結(jié)構(gòu),接著將遍歷結(jié)果保存在客戶端的數(shù)據(jù)庫(kù)中。和數(shù)據(jù)上傳模塊一樣,數(shù)據(jù)下載模塊也考慮移動(dòng)網(wǎng)絡(luò)環(huán)境下的優(yōu)化。通過(guò)實(shí)驗(yàn)發(fā)現(xiàn),在用戶進(jìn)行了上傳操作之后云端存儲(chǔ)的文件才有可能發(fā)生變化。所以數(shù)據(jù)下載模塊在客戶端軟件關(guān)閉后初次啟動(dòng)或發(fā)生了上傳操作的情況下,才會(huì)查詢?cè)贫宋募鎯?chǔ)結(jié)構(gòu)。查詢結(jié)果會(huì)保存在數(shù)據(jù)庫(kù)中,方便用戶下次下載操作時(shí)使用。
2.3 信息管理
信息管理模塊主要負(fù)責(zé)收集云端和本地設(shè)備的運(yùn)行信息和資源信息,并展示給用戶。
云資源信息管理模塊主要負(fù)責(zé)與云平臺(tái)的管理軟件通信,收集存儲(chǔ)和計(jì)算資源的使用情況,并在移動(dòng)設(shè)備上向用戶展示。本地設(shè)備信息管理模塊主要負(fù)責(zé)收集移動(dòng)設(shè)備當(dāng)前的存儲(chǔ)、內(nèi)存、電量和CPU使用率情況,并用圖表向用戶展示。用戶在使用客戶端時(shí),可以通過(guò)這些信息決定是否需使用云存儲(chǔ)服務(wù)或?qū)⒂?jì)算減荷到云端。
2.4 計(jì)算減荷
計(jì)算減荷模塊主要負(fù)責(zé)將本地移動(dòng)設(shè)備中計(jì)算密集型任務(wù)卸載到云端運(yùn)行。目前計(jì)算減荷的解決方案可以分為兩種:一種是在移動(dòng)應(yīng)用開發(fā)時(shí)使用可以進(jìn)行計(jì)算減荷的框架和模式,這種框架需要對(duì)Android系統(tǒng)或應(yīng)用本身進(jìn)行修改,如文獻(xiàn)[11-12];另一種是在不改變移動(dòng)應(yīng)用本身和Android系統(tǒng)本身的前提下,通過(guò)在移動(dòng)設(shè)備上的客戶端軟件,監(jiān)測(cè)移動(dòng)應(yīng)用的行為,當(dāng)其需要執(zhí)行計(jì)算密集型任務(wù)時(shí),將該任務(wù)卸載到云端。
文中設(shè)計(jì)的移動(dòng)客戶端軟件更加傾向于第二種計(jì)算減荷解決方案。因?yàn)橐苿?dòng)設(shè)備的流行很大程度上是由于其具有豐富多樣的移動(dòng)應(yīng)用,要求每一個(gè)移動(dòng)應(yīng)用的開發(fā)者都遵循一個(gè)統(tǒng)一的框架開發(fā),來(lái)開發(fā)支持計(jì)算減荷的應(yīng)用,在生產(chǎn)環(huán)境下的成本是巨大的。
文中的計(jì)算減荷模塊是一種基于Android系統(tǒng)組件接口的計(jì)算減荷方式,客戶端將監(jiān)聽Android系統(tǒng)中Activity組件對(duì)Service組件的調(diào)用并利用動(dòng)態(tài)代理攔截Binder請(qǐng)求,根據(jù)移動(dòng)設(shè)備目前的運(yùn)行情況或提示用戶決定是否需要卸載計(jì)算任務(wù)到云端。
2.5 其他功能
其他功能主要包括用戶反饋模塊和關(guān)于程序模塊??蛻舳顺绦蛟谶\(yùn)行時(shí)產(chǎn)生的日志文件都會(huì)被重定向到設(shè)備本地文件中,用反饋模塊將運(yùn)行日志和客戶反饋信息一同發(fā)送給開發(fā)者。關(guān)于程序模塊主要負(fù)責(zé)顯示客戶端的開發(fā)者信息和版本號(hào)。
3.1 UML建模
從實(shí)現(xiàn)視圖劃分,云客戶端具有UI、云端交互、信息采集、數(shù)據(jù)展示和輔助功能模塊。文中實(shí)現(xiàn)的云客戶端基于Android系統(tǒng)使用Java語(yǔ)言開發(fā)。根據(jù)面向?qū)ο蟮乃枷?,?duì)開發(fā)中需要的對(duì)象進(jìn)行抽象得到客戶端中主要的類結(jié)構(gòu)關(guān)系,如圖4所示。這里簡(jiǎn)要列出了主要的類和這些類中主要的方法,省略了一些非主要功能函數(shù)和類。
圖4 云客戶端類圖
為了支持三種不同的云平臺(tái)而開發(fā)三套不同的上傳下載和登錄邏輯會(huì)造成大量的代碼冗余問(wèn)題,不利于維護(hù)并且導(dǎo)致程序臃腫。文中通過(guò)對(duì)客戶端軟件的基本操作進(jìn)行抽象,提取出三個(gè)對(duì)應(yīng)的接口,分別是CloudStorage、Offload和InfoInquiry,分別表示云存儲(chǔ)、計(jì)算減荷和信息查詢模塊。程序的實(shí)現(xiàn)中,通過(guò)實(shí)現(xiàn)相應(yīng)的接口,自定義的類可以提供相應(yīng)操作所需方法,如CloudStorage接口由UploadFiles和DownloadFiles兩個(gè)類實(shí)現(xiàn),這兩個(gè)類執(zhí)行上傳和下載邏輯。這種設(shè)計(jì)體現(xiàn)了經(jīng)典的開閉原則,主UI類中使用setter方法將用戶的數(shù)據(jù)傳遞給相應(yīng)的類,每個(gè)類在完成數(shù)據(jù)處理之后,提供相應(yīng)的getter方法或Android的消息傳遞機(jī)制將結(jié)果返回給主UI類。
3.2 云平臺(tái)接口分析
OpenStack是當(dāng)今最流行的開源云平臺(tái),而AWS和阿里云分別是國(guó)內(nèi)外最流行的公有云平臺(tái)。為了增加客戶端的實(shí)用性和通用性,文中設(shè)計(jì)兼容了這三種最主流的云平臺(tái),也是文中的創(chuàng)新點(diǎn)之一。針對(duì)OpenStack、AWS和阿里云三種不同的平臺(tái),以實(shí)現(xiàn)云存儲(chǔ)功能為目的,對(duì)三種云提供的接口進(jìn)行了研究。在接口的支持方面,接口最為完善和強(qiáng)大的是AWS平臺(tái),其支持Android、iOS、Java、Python、PHP等幾乎所有常用的語(yǔ)言和平臺(tái)。其次是OpenStack平臺(tái),與AWS相比OpenStack只是缺少了對(duì)于iOS操作系統(tǒng)的支持,但是值得一提的是OpenStack官方指定的Java SDK為Apache Jclouds,也正是文中客戶端選用的Java SDK。Apache Jclouds是Apache基金會(huì)推出的一個(gè)開源項(xiàng)目,旨在支持所有主流的云平臺(tái)。通過(guò)使用Jclouds SDK可以和30種不同的云平臺(tái)進(jìn)行交互,包括Amazon、Azure、OpenStack和Google等。目前,其對(duì)各種云平臺(tái)的計(jì)算服務(wù)和存儲(chǔ)服務(wù)提供了成熟的支持,其提供的計(jì)算服務(wù)接口可以允許用戶一次性開啟多臺(tái)虛擬機(jī),并在其中安裝制定的軟件;存儲(chǔ)服務(wù)可以簡(jiǎn)化用戶對(duì)存儲(chǔ)容器的管理,為用戶提供一個(gè)存儲(chǔ)容器的直觀的視圖。
相比于上述兩個(gè)云平臺(tái),阿里云提供的接口十分有限,在文中進(jìn)行開發(fā)和實(shí)驗(yàn)時(shí)其僅支持Java、Python、.NET和PHP四種接口。
在接口的使用效率方面,做的最好的依然是AWS,利用其為Android提供的SDK,用戶可以通過(guò)多種方式進(jìn)行身份認(rèn)證,并且認(rèn)證成功后AWS將返回一個(gè)用于緩存認(rèn)證結(jié)果的對(duì)象,使用該對(duì)象可以創(chuàng)建對(duì)應(yīng)于該賬戶的證書緩存,再使用傳輸管理器對(duì)象提供的上傳和下載方法即可實(shí)現(xiàn)數(shù)據(jù)的上傳下載。利用Apache提供的Jclouds SDK與OpenStack的Swift組件交互實(shí)現(xiàn)云存儲(chǔ)功能也十分簡(jiǎn)單。首先傳入Swift組件的地址或URL和認(rèn)證所需要的用戶名密碼獲取Swift API對(duì)象,接著調(diào)用上傳、下載或創(chuàng)建容器方法并傳入創(chuàng)建好的用戶選項(xiàng)對(duì)象即可完成相應(yīng)操作。
由于Android應(yīng)用使用Java語(yǔ)言進(jìn)行開發(fā),所以基于阿里云的云存儲(chǔ)開發(fā)文中選擇其提供的Java SDK。但在實(shí)驗(yàn)中發(fā)現(xiàn),其在Android設(shè)備上運(yùn)行時(shí)會(huì)報(bào)無(wú)相應(yīng)方法錯(cuò)誤。進(jìn)一步實(shí)驗(yàn)發(fā)現(xiàn),這一問(wèn)題是由于新建阿里云OSSClient內(nèi)部通過(guò)SDK中的ThreadSafeClientConnManager構(gòu)造,該方法其實(shí)生成一個(gè)httpClient對(duì)象,為此阿里云SDK和Android平臺(tái)都集成了Apache的HttpClient類庫(kù),導(dǎo)致阿里云封裝的代碼中調(diào)用的方法在Android上運(yùn)行時(shí)無(wú)法找到。最后,使用了一個(gè)第三方的SDK與阿里云進(jìn)行交互,同時(shí),阿里已經(jīng)陸續(xù)增加了其云存儲(chǔ)SDK,將逐步支持更多的平臺(tái)。
3.3 主要功能實(shí)現(xiàn)
云存儲(chǔ)模塊分為數(shù)據(jù)上傳和數(shù)據(jù)下載兩個(gè)功能。在實(shí)現(xiàn)數(shù)據(jù)上傳功能的過(guò)程中,文中首先實(shí)現(xiàn)了一個(gè)基于Android移動(dòng)設(shè)備文件瀏覽器,可以向用戶展示本地所有文件的絕對(duì)路徑和文件名。在用戶選擇了相應(yīng)的文件后,該文件的絕對(duì)路徑和文件名將被傳遞到上傳模塊中,上傳模塊判斷用戶是否選擇壓縮操作,并生成相應(yīng)的壓縮文件對(duì)象,接著從用戶認(rèn)證模塊獲取已經(jīng)通過(guò)認(rèn)證的云平臺(tái)傳輸管理器對(duì)象,調(diào)用其提供的上傳方法進(jìn)行文件上傳操作。
文件下載功能,首先需要通過(guò)信息查詢模塊,查詢?cè)贫四壳氨4娴奈募约氨4嫖募拇鎯?chǔ)結(jié)構(gòu)。為了節(jié)省移動(dòng)設(shè)備的資源,查詢操作只有在客戶端運(yùn)行后首次進(jìn)行下載操作或進(jìn)行了上傳操作之后才會(huì)運(yùn)行,并且客戶端會(huì)將最新的查詢結(jié)果保存在本地SQLite數(shù)據(jù)庫(kù)中作為緩存。這里使用SQLite這一Android提供的輕量級(jí)數(shù)據(jù)庫(kù),相比于傳統(tǒng)的SQL數(shù)據(jù)庫(kù),SQLite更加輕量更加適合嵌入式設(shè)備,在運(yùn)行時(shí)僅僅需要百kb級(jí)的內(nèi)存[13]。并且Android為其提供了SQLite Helper類,不僅可以使用傳統(tǒng)的SQL語(yǔ)句,而且可以使用面向?qū)ο蟮姆椒▽?duì)其進(jìn)行操作。用戶通過(guò)查看數(shù)據(jù)庫(kù)獲得云中文件存儲(chǔ)結(jié)構(gòu)信息并選擇下載。
信息查詢模塊通過(guò)和云平臺(tái)的管理模塊進(jìn)行通信,獲得云中目前的存儲(chǔ)和計(jì)算資源使用情況;通過(guò)與Android交互,查詢移動(dòng)設(shè)備的內(nèi)存、存儲(chǔ)、CPU和電量信息,并將這些信息匯總到圖表中展示給用戶。
傳統(tǒng)的計(jì)算減荷解決方案通過(guò)接收應(yīng)用發(fā)送的Intent請(qǐng)求或監(jiān)聽Activity和Service之間的調(diào)用實(shí)現(xiàn)。這種解決方案的前提是移動(dòng)設(shè)備上所有的應(yīng)用都會(huì)發(fā)送標(biāo)準(zhǔn)的Intent請(qǐng)求并且移動(dòng)云客戶端可以準(zhǔn)確攔截所有的Intent請(qǐng)求。通過(guò)實(shí)驗(yàn)發(fā)現(xiàn),由于Android系統(tǒng)本身的碎片化現(xiàn)象和Android應(yīng)用的多樣化,不同品牌的設(shè)備和不同開發(fā)者開發(fā)的應(yīng)用,對(duì)同一個(gè)Intent請(qǐng)求做出的響應(yīng)是不同的,并且開發(fā)者并不會(huì)遵從同樣的開發(fā)原則。使用一個(gè)客戶端接收所有應(yīng)用發(fā)送Intent請(qǐng)求可行性較低,這并不是一種通用的解決方案。文中提出通過(guò)攔截并監(jiān)聽計(jì)算密集型任務(wù)的Binder調(diào)用進(jìn)行計(jì)算減荷。Binder是Andorid的IPC機(jī)制,由用戶層的libbinder.so和binder驅(qū)動(dòng)實(shí)現(xiàn)。
常見IPC攔截解決方案是在主調(diào)組件中注入并加載用于攔截的模塊,在主調(diào)組件GOT表中確定被調(diào)組件地址,重定向到新的地址[14]。由于Android和Linux的內(nèi)存布局不同,所以常見的方法在Android平臺(tái)上無(wú)法實(shí)現(xiàn)。為此,文中通過(guò)實(shí)驗(yàn)提出如下適合Android的攔截方式:
首先,運(yùn)行注入程序,通過(guò)ptrace停止并附加系統(tǒng)服務(wù);注入內(nèi)核代碼加載共享庫(kù)接觸附加服務(wù),調(diào)用共享庫(kù)中函數(shù);該函數(shù)將自己的地址和被替換的按時(shí)地址暴露到Android Property;注入程序通過(guò)Android Property獲得新函數(shù)和替換函數(shù)的地址并再次附加系統(tǒng)服務(wù),定位got文件中原始函數(shù)的地址并將其替換成新地址;最后附加系統(tǒng)服務(wù)并重新運(yùn)行。
通過(guò)上述步驟將活動(dòng)對(duì)服務(wù)的調(diào)用請(qǐng)求由客戶端發(fā)送到云端。云端運(yùn)行的虛擬在接收到調(diào)用后會(huì)啟動(dòng)其本地的服務(wù),執(zhí)行該計(jì)算任務(wù),執(zhí)行完畢后將執(zhí)行結(jié)果返回給客戶端,再由客戶端返回到作為服務(wù)調(diào)用方的活動(dòng)組件中。
文中涉及的客戶端測(cè)試環(huán)境如下:
(1)移動(dòng)設(shè)備:Android 4.3系統(tǒng),高通驍龍800四核處理器,運(yùn)行內(nèi)存3 GB,電池3 200 mAh,外部存儲(chǔ)32 G。
(2)云平臺(tái):OpenStack G版部署Intel core i3,內(nèi)存8 G,磁盤500 GB的物理機(jī)上,AWS和阿里云均使用其官方提供的平臺(tái)。
在移動(dòng)設(shè)備上運(yùn)行文中設(shè)計(jì)的客戶端軟件,其主界面如圖5所示。在列表試圖中包括了用戶認(rèn)證、云資源管理、數(shù)據(jù)上傳和下載、運(yùn)行狀態(tài)等8個(gè)不同的按鈕。
圖5 客戶端主界面
為了驗(yàn)證客戶端設(shè)計(jì)的正確性,在移動(dòng)和熱點(diǎn)接入環(huán)境下,在實(shí)驗(yàn)移動(dòng)設(shè)備上運(yùn)行客戶端原型。首先在移動(dòng)設(shè)備上完成用戶認(rèn)證操作,獲取云端資源的使用權(quán),接著選取本地測(cè)試文件testCloudStorage分別上傳文件到OpenStack、AWS和阿里云,然后選擇云中保存的測(cè)試文件下載到本地的操作也可以正確完成。
通過(guò)實(shí)驗(yàn)發(fā)現(xiàn),三種不同的云平臺(tái)可以提供可伸縮的對(duì)象存儲(chǔ)服務(wù),從存儲(chǔ)效率上,由于AWS的云服務(wù)器位于境外,所以通信速率要低于另外兩個(gè)云平臺(tái)。由于三種云提供的都是基于對(duì)象存儲(chǔ)服務(wù),所以都需要在全局唯一的bucket中對(duì)數(shù)據(jù)對(duì)象進(jìn)行存儲(chǔ)。
文中對(duì)Andriod系統(tǒng)架構(gòu)和云計(jì)算技術(shù)進(jìn)行了闡述,研究在Android移動(dòng)設(shè)備上使用云存儲(chǔ)服務(wù)和云計(jì)算減荷服務(wù)的方法,通過(guò)開發(fā)移動(dòng)云客戶端,實(shí)現(xiàn)了在移動(dòng)設(shè)備上使用OpenStack、AWS和阿里云三種不同的云平臺(tái)提供的存儲(chǔ)資源,并提出了一種移動(dòng)設(shè)備計(jì)算減荷的解決方案。通過(guò)對(duì)開發(fā)的客戶端原型進(jìn)行測(cè)試,結(jié)果表明該設(shè)計(jì)方案合理可行,開發(fā)的客戶端能夠?yàn)橐苿?dòng)用戶提供高效率的云存儲(chǔ)服務(wù)。接下來(lái)的研究和開發(fā)將針對(duì)計(jì)算減荷這一課題展開,通過(guò)實(shí)驗(yàn)開發(fā)具有移動(dòng)設(shè)備計(jì)算減荷功能的客戶端原型。
[1] Vallina-Rodriguez N,Crowcroft J.Energy management techniques in modern mobile handsets[J].IEEE Communications Surveys & Tutorials,2013,15(1):179-198.
[2] Zhang S,Zhang S,Chen X,et al.Cloud computing research and development trend[C]//Second international conference on future networks.[s.l.]:IEEE,2010:93-97.
[3] Amazon simple storage service[EB/OL].2011-12-08.http://aws.amazon.com/s3/.
[4] 武永衛(wèi),黃小猛.云存儲(chǔ)[J].中國(guó)計(jì)算機(jī)學(xué)會(huì)通訊,2009,5(6):44-52.
[5] Othman M,Madani S A,Khan S U.A survey of mobile cloud computing application models[J].IEEE Communications Surveys & Tutorials,2014,16(1):393-413.
[6] Huerta-Canepa G,Lee D.A virtual cloud computing provider for mobile devices[C]//Proceedings of 1st ACM Workshop on mobile cloud computing & services: social networks and beyond.[s.l.]:ACM,2010:6.
[7] 吳吉義,平玲娣,潘雪增,等.云計(jì)算:從概念到平臺(tái)[J].電信科學(xué),2009(12):23-30.
[8] Rimal B P,Choi E,Lumb I.A taxonomy and survey of cloud computing systems[C]//Fifth international joint conference on INC,IMS and IDC.[s.l.]:IEEE,2009:44-51.
[9] Meier R. Professional Android 4 application development[M].[s.l.]:John Wiley & Sons,2012.
[10] 韓 超.Android系統(tǒng)原理及開發(fā)要點(diǎn)詳解[M].北京:電子工業(yè)出版社,2010.
[11] Ghorpade S,Chavan N,Gokhale A,et al.A framework for executing android applications on the cloud[C]//International conference on advances in computing,communications and informatics.[s.l.]:IEEE,2013:230-235.
[12] Kovachev D,Yu T,Klamma R.Adaptive computation offloading from mobile devices into the cloud[C]//IEEE 10th international symposium on parallel and distributed processing with applications.[s.l.]:IEEE,2012:784-791.
[13] 郭 霖.第一行代碼—Android[M].北京:人民郵電出版社,2014.
[14] Chen E Y,Itoh M.Virtual smartphone over IP[C]//IEEE international symposium on world of wireless mobile and multimedia networks.[s.l.]:IEEE,2010:1-6.
A Cloud Client Implementation Scheme Based on Android Platform
JIN Si-yu1,WU Zhen-yu1,SHEN Su-bin2
(1.School of IoT,Nanjing University of Posts and Telecommunications,Nanjing 210003,China;2.School of Computer,Nanjing University of Posts and Telecommunications,Nanjing 210003,China)
Because mobile applications which need lots of storage space or computing power can not be efficiently executed,resource-constrained problem is always faced by mobile devices,and it affects the user experience.For this mobile device manufacturers have tried to improve the hardware continuously to solve this problem.It tries to use the cloud computing to solve this problem in this paper.By storing big files and offloading computationally intensive tasks to the cloud,it can improve the performance of mobile device.Moreover,a prototype of cloud client is designed which can supports three different cloud services,such as OpenStack,AWS and Aliyun.The cloud storages and file explorers are used to store big files in the cloud,using IPC interception to offload computationally intensive tasks to cloud.By the experiment,it concludes that cloud client can store big files to cloud and improve the performance of mobile device.
cloud computing;cloud storage;mobile cloud;Android client
2016-01-15
2016-04-20
時(shí)間:2016-10-24
國(guó)家自然科學(xué)基金資助項(xiàng)目(61502246);江蘇省未來(lái)網(wǎng)絡(luò)前瞻性研究資助項(xiàng)目(BY2013095-1-08);南京郵電大學(xué)自然科學(xué)基金(NY211115)
金思宇(1991-),男,碩士研究生,研究方向?yàn)樵朴?jì)算與云存儲(chǔ);吳振宇,講師,研究方向?yàn)椴淮_定性人工智能、數(shù)據(jù)挖掘;沈蘇彬,博士生導(dǎo)師,研究方向?yàn)橛?jì)算網(wǎng)絡(luò)、下一代電信網(wǎng)及網(wǎng)絡(luò)安全。
http://www.cnki.net/kcms/detail/61.1450.TP.20161024.1105.020.html
TP301
A
1673-629X(2016)11-0019-06
10.3969/j.issn.1673-629X.2016.11.005