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