劉 琦
云是一種使用松散耦合結(jié)構(gòu)的Web服務(wù)。
提供云服務(wù)的主機(jī)放置在互聯(lián)網(wǎng)上,用戶直接從互聯(lián)網(wǎng)服務(wù)器集群上獲取應(yīng)用和服務(wù)。這樣的部署方式使得開發(fā)人員不必過多地關(guān)心操作系統(tǒng)和硬件這樣的底層架構(gòu),只要專注于應(yīng)用創(chuàng)新和業(yè)務(wù)邏輯即可。同時(shí),開發(fā)人員還必須注意云服務(wù)帶來的新挑戰(zhàn)。
通過使用API,開發(fā)人員可以為云應(yīng)用編寫程序,并直接向云提供商要求更多的資源。在開發(fā)過程中,開發(fā)人員需要進(jìn)行冗余設(shè)計(jì)?!叭绻悴粸樵茟?yīng)用設(shè)計(jì)冗余,服務(wù)器出錯(cuò)是不可避免的?!蔽④汚zure云平臺(tái)副總裁薩維斯塔夫指出。
創(chuàng)建云還需要設(shè)計(jì)無狀態(tài)性的云應(yīng)用。無狀態(tài)性是指客戶端和服務(wù)器端都不保存對(duì)方的詳細(xì)信息,服務(wù)器只處理當(dāng)前請(qǐng)求,而不必了解歷史信息。
云服務(wù)的特點(diǎn)是,如果某些應(yīng)用失效,完全可以將應(yīng)用中止并重新開始。云的無狀態(tài)性減少了服務(wù)器從局部錯(cuò)誤中恢復(fù)的任務(wù)量。云計(jì)算技術(shù)包含維護(hù)應(yīng)用程序狀態(tài)變化的機(jī)制,當(dāng)然這需要無狀態(tài)設(shè)計(jì)。在云中,既沒有本地磁盤的概念,也沒有真正的登錄,所有應(yīng)用都是無狀態(tài)的。
簡單的云應(yīng)用應(yīng)該是無狀態(tài)的。然而,還有一些有趣的應(yīng)用要求保留某些狀態(tài),因此會(huì)用數(shù)據(jù)庫來存儲(chǔ)一些狀態(tài)信息。某些特定項(xiàng)目,比如用戶信息可以存儲(chǔ)起來,但有一定規(guī)模的應(yīng)用程序在云中依然是無狀態(tài)的。
過去,人們一般都在本地服務(wù)器上把整個(gè)應(yīng)用開發(fā)出來,現(xiàn)在不必這樣做了。云應(yīng)用的另一個(gè)不同之處在于,應(yīng)用組件可以在不同的云中運(yùn)行。例如,一個(gè)應(yīng)用可以調(diào)用Facebook的表現(xiàn)層,把數(shù)據(jù)儲(chǔ)存在Amazon的S3上,而邏輯運(yùn)算可以在其他地方進(jìn)行。這意味著構(gòu)建云應(yīng)用需要新的系統(tǒng)架構(gòu)和思維方式,還要考慮云服務(wù)的規(guī)模。
云的抽象和無狀態(tài)性會(huì)影響到數(shù)據(jù)庫。例如,Azure平臺(tái)提出了一個(gè)非標(biāo)準(zhǔn)關(guān)系數(shù)據(jù)庫的模型,存儲(chǔ)引擎不使用標(biāo)準(zhǔn)的關(guān)系數(shù)據(jù)庫。因此,如果按照標(biāo)準(zhǔn)的關(guān)系型數(shù)據(jù)庫來開發(fā)應(yīng)用,很多工作就毫無意義了。另外,Azure的存儲(chǔ)引擎與微軟提供的基于云服務(wù)的SQL Server版本是不同的,開發(fā)者在設(shè)計(jì)時(shí)必須注意。
目前,微軟正在加速開發(fā)Azure利用關(guān)系型數(shù)據(jù)庫的能力,同時(shí)也為非關(guān)系型數(shù)據(jù)存儲(chǔ)提供了數(shù)據(jù)表式的存儲(chǔ)選擇。App Engine中使用的Big Table數(shù)據(jù)庫模型是另外一個(gè)例子?!癇ig Table不是SQL數(shù)據(jù)庫。它支持的一些功能很難進(jìn)行分割,與我們跨機(jī)器存儲(chǔ)數(shù)據(jù)的想法無法結(jié)合。”Google App Engine產(chǎn)品經(jīng)理派特?庫門說,“這意味著開發(fā)者上傳代碼,然后Google進(jìn)行管理并將數(shù)據(jù)庫分割。這樣的數(shù)據(jù)處理有特定的模式,與傳統(tǒng)SQL模式完全不同,開發(fā)人員必須遵循?!?/p>
云環(huán)境會(huì)摒棄掉關(guān)系型數(shù)據(jù)庫?!霸诟吡髁康木W(wǎng)絡(luò)環(huán)境中,關(guān)系型數(shù)據(jù)庫很難管理,而且最終會(huì)給開發(fā)者帶來巨大負(fù)擔(dān)?!迸商?庫門說。