目前,仍然有相當一部分企業還沒有完全采用最靈活的軟件托管戰略之一——應用虛擬化。當然這也是合情合理的,從成本節約框架來講,采用應用虛擬化技術是最難以把握的。
很多軟件既沒有安裝在用戶自身的系統上,也沒有在客戶端或服務器模式中的服務器上運行。然而,客戶端或服務器應用程序可能會有性能問題,另外隨著配置參數和注冊表參數的不斷增多和可能會與本地庫文件產生沖突,以及中間件越來越相似,本地軟件的安裝工作也變得相當復雜。對于很多公司來講,簡單地按順序保持運行桌面應用的系統上所有的公司軟件需求是技術支持部門的工作。
應用虛擬化可以使用一種客戶端/服務器、兩步流程的方法解決這些問題。這個是好消息,壞消息是這個流程不太容易理解。其中部分原因是因為像IT產業的很多術語一樣,“應用虛擬化”被賦予過多的含義了。
最直觀地來看,提到虛擬化的應用程序,就會認為是一個宿主在某個平臺上的虛擬服務器。然而實際上是由于中間件存在的問題,這個情況不太可能出現。應用程序在操作系統和物理平臺上運行,但是也使用到其它系統軟件工具,如通信系統工作、數據庫訪問工具和圖形用戶界面等。比如,如果有一個用在Windows平臺上的應用程序,需要在Linux平臺上運行,就需要一個復雜的應用程序中間件集合,即所謂的“動態鏈接庫(DLL:Dynamic LinkLibraries)”;同樣,如果試圖在Linux平臺上運行Windows DLL,也會遇到兼容性問題和相當多的性能問題。
當前很多應用程序虛擬化都基于雙元素模型——一個客戶端或者目標系統和一個宿主系統。宿主系統用來運行應用程序,有時也用來通過稱作“sequencing”的進程構建所謂的“應用程序包(Application Package)”。在應用程序組件裝載和運行的時候創建一系列“機器鏡像”,這樣的話就可以在創建鏡像時保證注冊表參數和配置參數都已經得到了處理。在使用應用程序的時候,這些應用程序組件就可以“流向”客戶端系統。
由于這些鏡像已經和注冊表參數和配置參數無關了,所以在客戶端就只需要一個兼容的應用程序接口(API)來提供操作系統正常運行所需要的機器鏡像集合和中間件接口。在理論上,這就是整合應用程序和不兼容的軟件、甚至硬件的原因。只要客戶端系統能夠模擬宿主系統的執行環境,任何程序都可以正常運行。但是在大多數情況下,為了保證應用程序的可用性最大化,硬件平臺(x86)和軟件操作系統(Windows)最好能夠相同。
應用虛擬化的最大好處就是排除了配置上不兼容的常見問題,尤其是和注冊表或者配置數據不兼容問題。很多公司都有應用程序和配置變量不兼容或者完全相沖突的問題,此時找到合適的應用程序就是主要問題了。應用程序虛擬化也能夠輔助完成系統保護,因為不會使用受到破壞的系統庫文件——流線化應用程序是獨立的。
這個方法的問題出在難以對應用程序序列化,序列化可以從輕微不方便到高度復雜性。如果不打算廣泛使用應用程序虛擬化技術的話,可能就沒有必要花費精力序列化應用程序。另外一個需要考慮的問題是很多應用程序要么根本就沒有次序,要么就是序列化之后就不能再正常運行。最好是有一個需要虛擬化的應用程序完整目錄,在使用“序列化”這個概念之前,檢查這些應用程序與“序列化”和“流線化能力”的兼容性。
對于跨一種操作系統多個版本的應用程序虛擬化,在業界的經驗非常有限,因此需要考慮到即將發布的Windows7的部署。知道虛擬化以何種方式支持新操作系統非常重要,開發人員在正式版本發行的較長一段時間會公布一個預發布版本,用來提供過渡時期的體驗。為了安全起見,有必要考慮在任何操作系統的早期版本下所做的應用程序序列化和流線化工作都有可能在新的操作系統下必須重新序列化,并且宿主和目標或者客戶端操作系統也必須相同。
應用程序虛擬化是有潛力價值的強大工具,并且一天天變得越來越成熟、越來越功能化、也越來越有用。該項技術也應該是任何一家企業在操作層節支的重要手段,需要留意技術方面的不斷演進。