揭秘微軟的Container技術之一Drawbridge
在構建軟件定義的數據中心方面,VM 技術已逐漸顯露出力不從心,Container 技術作為后繼者慢慢嶄露頭角。Container 技術由來已久,但開源技術 Docker 的出現,為開發者以微服務的形式構建可移植的應用,提供了標準。隨著 Docker 技術的成熟,容器已經能夠滿足應用的可移植性、自動性、編排和擴展性。
作為一種開源的 Linux Container 技術,Docker 已經得到 IBM、Google、RedHat、VMware 和微軟等多個公司的支持,這些公司紛紛宣布在自己的操作系統、虛擬機或云平臺中支持 Docker。微軟更是在 5 月份宣布,在其 Azure 云服務的 IaaS 組件中可運行基于 Linux 的 Docker 容器。至于在 PaaS 服務中可用,應該只是時間問題了。Azure 云服務部門 CTO Mark Russinovich 在 9 月份公開表示:“我們也在考慮這個問題,許多 Azure 云的 PaaS 用戶已經有了這個需求。”
Russinovich 確認了正在將其代號為“Drawbridge”的 Container 技術商業化的計劃,Drwbridge 基于庫操作系統(library OS),library OS 由微軟研究院 Galen Hunt 在 2008 年發起。
“基于 VM 的虛擬化技術其效率不高,而傳統的 OS 虛擬化技術,如 Linux Container 技術,安全性又不足,所以 Drawbridge 選擇了一條兩者兼顧的道路,把 Kernel 的內存狀態放到了 Container 中(這里指 Windows 的 Container),用戶間的隔離更徹底,而各個 Container 之間依然共享一部分資源,所以相較 VM 虛擬化效率要高。”曾經負責過 Drawbridge 項目的前美國微軟首席開發經理左玥告訴筆者。
Drawbridge 的基石:庫操作系統(library OS)
在 Galen 2011 年發布的一篇論文中, 詳細說明了 win7 庫操作系統中運行 Excel、PowerPoint 和 Internet 的工作原型。library OS 的想法是,一個應用所依賴的操作系統的特性,會體現在應用的地址空間上。一個連接宿主機操作系統內核和庫操作系統的小抽象集合,提高了系統安全性,也使得 系統各組件能夠更快地改進。
在論文中,詳細描述了一個 win7 library OS 的工作原型,其中運行了諸如 Microsoft Excel、PowerPoint 和 Internet Explorer 等常用應用。證明了通過對網絡協議的重用,可以實現在各個獨立、安全隔離的庫操作系統實例的桌面共享。每個實例的開銷相比全虛擬化要小得多,一個典型的應 用只會增加 16M 的工作集和 64M 的磁盤空間。在庫操作系統下面提供了一個新的 ABI(應用二進制接口),保證了應用的移動性。我們也證明了只花費很小的開銷,就可以達到當前很多硬件虛擬化的功能。
庫操作系統會精簡操作系統到固件層,將重點放在 API 和應用交付層面,而不是低層次的服務。定義了 3 種 OS 服務,包括:硬件服務、用戶服務和應用服務。硬件服務包括了操作系統內核和硬件驅動;用戶服務包括了 GUI shell 和桌面、剪切板、索引器等;應用服務包含了 API 實現,包括框架、渲染引擎、通用的 UI 控制等。
在 Drawbridge 中運行的應用可以訪問 Windows 的核心特性和增強版的 API,包括 .NET CLR 和 DirectX。雖然被嚴格地隔離開來,但 Drawbridge 中的應用依然可以共享資源,包括屏幕,鍵盤,鼠標和用戶剪切板。
在 August TechMentor 大會的 Keynote 上,Redmond的專欄作家 Don Jones 曾發表演講討論過庫操作系統的話題。Jones 說:“我們通常都將開發人員的開發理解為針對某一系統的開發,比如 iOS 開發、Android 開發、Windows 開發等,但這是不準確的,他們應該是在針對一種運行環境或一組 API 做開發。而這組 API 再關聯相應的操作系統。”
Drawbridge VS Docker
在紐約舉行的 Interop 大會上,Russinovich 宣告了 Drawbridge 依然在使用。雖然他沒說 Windows 的計劃,也沒有明確表示 Drawbridge 會被加到 Windows Server 和 Hyper-V 中。但可以肯定的是 Drawbridge 在 Windows Server 和 Azure 的工作已經在進展中了。Russinovich 說在微軟新的基于 Azure 的機器學習技術中,已經使用了 Drawbridge 容器技術。
“顯然對虛擬化技術的加速已經不能滿足我們的需求,所以我們借助了微軟研究院的 Container 技術 Drawbridge,這是一項我們內部一直在用的技術,我們正在試圖將其公開化。”
雖然微軟 Azure 也高調宣稱了其對 Docker 技術的支持,但從 Russinovich 的態度看來,其將 Drawbridge 作為容器技術的優先選擇,不斷強調 Drawbridge 在部署微服務方面更安全。
Russinovich 說:“在一個多租戶的環境中,必然會有很多未知來源的第三方代碼運行在同一個平臺上,你需要為他們設立安全屏障。大多數云平臺使用虛擬化技術來實現,而通 過一個更小粒度的安全容器,能夠更高效地實現,這就是 Drawbridge 的設計初衷。”
左玥告訴筆者,其實微軟自身的 Container 技術與 Docker 并不矛盾,Docker 是將 Linux 的 Container 技術標準化的工具,同樣 Windows 的 Container 技術也可以使用 Docker。
Windows Server 的 Container 技術?
Sam Ramji,是 Apigee(一家提供基于云的 API 服務提供商)的 VP,5 年前離開微軟時,是新興開源與 Linux 策略部門的頭。在采訪中,他認為 Windows Server 只有擁有了自己的 Container 技術才能繼續保持與 Linux 的抗衡。
雖然不知道 Server 團隊的頭是怎么想的,但可以肯定的是他們也已經開始了 Container 技術方面的投入,預計在下一個 Server 版本中就會添加對 Container 的支持。左玥告訴筆者,Drawbridge 只是微軟的一種 Container 技術,至于未來 Windows Server 的 Container support 是否基于 Drawbridge 還有待觀察。
老大開源,老二怎么玩?
以前的 IT 界,多是老大閉源,老二開源,現在老大開源了,閉源怎么玩呢?先不說去搶 Linux 的生意,首先 Windows 目前的用戶是否對 Container 技術有這么強的需求呢?
Ubuntu 也剛剛推出了自己的 LXD, 并且還強調并不是要替代 Docker,而是作為 Docker 的補充。有幸在微信群中看到了大牛們討論:有人說 LXD 就是要替代 Docker,因為 Docker 的初衷本來就是 LXC+RESTful API;還有人說 Docker 讓容器更像進程,而 LXD 是讓容器更像虛機。老外不是一直反對“重復造車輪”的嗎?你怎么看?
(感謝前美國微軟首席開發經理左玥對本文的審校和幫助!)
相關鏈接:
- Windows 'Drawbridge' Container Tech Sets Stage for Docker Battle
- Why IT Pros Should Prepare for Microsoft's Stealth Library OS