Windows Docker原理的大膽猜測和深入分析

前言:這篇文章最初由盆盆發表在華來四微信公衆號(微信號:sysinternal)。雖然Windows Docker要等到微軟Build大會時才能看到實例演示,但這並不妨礙我們利用手頭擁有的公開材料對其進行大膽猜測和深入分析。對於盆盆來說,猜測的過程甚至比謎底揭曉更有樂趣!

大家知道,Docker相對虛擬機,屬於輕量級應用方案。就好比圖中的這個創意便攜打印機,不需要把功能封裝在笨重的傳統打印機裏。Windows Docker也是這樣,不需要把應用封裝在笨重的虛擬機裏,以節省資源以及提高性能。

盆盆發表過一篇Windows Docker和Nano Server的文章,您可以在公衆號裏回覆docker6閱讀這篇文章(在微信裏關注公衆號:sysinternal)。

雖然Windows Docker要等到微軟Build大會時才能看到實例演示,但這並不妨礙我們利用手頭擁有的公開材料對其進行大膽猜測和深入分析。對於盆盆來說,猜測的過程甚至比謎底揭曉更有樂趣!

我們可以從很多公開的資料裏猜測Windows Docker技術有可能就是所謂的DrawBridge(雖然微軟官方並沒有確認),例如以下的公開報道。所以我們的目的就來看看這個DrawBridge到底是什麼原理。

http://t.cn/RAN9Y9h

當然猜測歸猜測,還必須以事實爲準繩。庶不負胡適先生“大膽假設,小心求證”的教導(今年盆盆還拜謁過胡適先生墓)。

那麼盆盆用來小心求證的論據是什麼?

求證論據

這是微軟研究院公開的一篇有關DrawBridge的論文《Rethinking the Library OS from the Top Down》,其PDF文檔下載地址如下:

http://research.microsoft.com/apps/pubs/default.aspx?id=141071

這裏是公開可以觀看的Video:

http://channel9.msdn.com/Shows/Going+Deep/Drawbridge-An-Experimental-Library-Operating-System

以上兩個資料都比較老,2011年,針對當時的Windows 7進行原理描述,而且還針對桌面應用(例如Excel進行描述),但是基本道理是不會變動太大的。

理論上來說,桌面應用需要更多的進程間交互,例如Word可能需要通過OLE調用其它Office文檔對象等。而服務端的應用之間的交互一般是通過網絡來實現(例如虛擬機一般擁有完整的網絡棧,以便能支持這種需求)。

大膽分析

視頻裏提到,類似Excel這樣的用戶應用程序,其API調用是通過用戶模式的ntdll.dll來實現,由ntdll.dll再代爲調用內核模式下的OS Kernel相關功能。而類似圖形化界面、桌面、剪貼板等,則是通過用戶模式下的Windows子系統(例如圖中的user32.dll、gdi32.dll和kernel32.dll等),和內核模式下的win32k.sys來完成。

前面所述的PDF文檔把傳統的OS服務分爲3個類別:用戶服務、應用服務和硬件服務,用不同的顏色灰度來表示。

視頻裏提到一個Library OS的概念,相當於給每個進程“包”了一層很薄的"外皮"。其實質是給上述提到的兩個重要的內核模式組件win32k.sys和OS Kernel提供了用戶模式下的獨立副本,其中對應win32k.sys的用戶模式副本叫做win32k.dll,而OS Kernel的用戶模式副本叫做NTUM(NT Kernel User Mode)。每個Docker進程都有自己獨立的Library OS,通過secmon(Secure Monitor)和Host OS內核進行交互。這大概就是其代號"DrawBridge"的由來吧。

和Linux Docker不一樣,Windows進程大多數有圖形化界面,所以爲了對其進行管理,我們可以藉助secmon中的RDP服務來實現,參考視頻裏的截圖。這樣的話,多個Windows Docker容器,可以通過RDP服務來共享Host上的圖形化資源。當然我相信廣大微軟IT運維人員會越來越喜歡通過PowerShell對應用進行控管。

PDF文檔裏提到,Library OS所需的代碼改動極小,在Windows 7的項目上只消耗了約2個人年的代價。這是一件好事情,越小的代碼修改,意味着越穩定。

PDF還提到DrawBridge和虛擬機以及傳統進程模式之間的比較。可見DrawBridge相對傳統進程所增加的開銷非常低,幾乎可以忽略不計。

盆盆在前一篇文檔裏也提到Docker和其他應用封裝模式的比較:

Hyper-V Container是怎麼回事?

說實在話,盆盆手裏也沒有什麼猛料,只能猜測它是整合了Hyper-V虛擬化和DrawBridge技術的容器。可能更加適合生產環境。既然是可選的部署模式,那麼爲了適合在Azure和其他Hypervisor上運行,Hyper-V Container必然能支持在虛擬化裏的虛擬化(好拗口)。

一切得等待Build大會上的實況演示了。等Build大會過後,華來四會第一時間奉上最新的深入分析。

本文所涉及的Windows內部原理,歡迎大家可以在公衆號裏回覆課程2查看黃愛華老師的精品課程"Windows性能優化與藍屏診斷"(需要在微信裏關注公衆號:sysinternal)。

最後請容盆盆得瑟一下,前天花了200大元從網上買了一個可摺疊的鋼架電腦桌,直接放在空調正下方,避免夏天時被空調直接吹到而引起感冒,等於是降低受***面、提高可工作時間。同時可摺疊還能節省空間。注意我說的不是Windows Nano Server哈!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章