【博文推薦】Windows Docker原理的大膽猜測和深入分析
本博文出自51CTO博客華來四盆盆 博主,有任何問題請進(jìn)入博主頁面互動討論! |
前言:
雖然Windows Docker要等到微軟Build大會時才能看到實(shí)例演示,但這并不妨礙我們利用手頭擁有的公開材料對其進(jìn)行大膽猜測和深入分析。對于盆盆來說,猜測的過程甚至比謎底揭曉更有樂趣!
下面我們開始進(jìn)入正題。
大家知道,Docker相對虛擬機(jī),屬于輕量級應(yīng)用方案。就好比圖中的這個創(chuàng)意便攜打印機(jī),不需要把功能封裝在笨重的傳統(tǒng)打印機(jī)里。Windows Docker也是這樣,不需要把應(yīng)用封裝在笨重的虛擬機(jī)里,以節(jié)省資源以及提高性能。
盆盆發(fā)表過一篇Windows Docker和Nano Server的文章,您可以在公眾號里回復(fù)docker6閱讀這篇文章(在微信里關(guān)注公眾號:sysinternal)。
雖然Windows Docker要等到微軟Build大會時才能看到實(shí)例演示,但這并不妨礙我們利用手頭擁有的公開材料對其進(jìn)行大膽猜測和深入分析。對于盆盆來說,猜測的過程甚至比謎底揭曉更有樂趣!
我們可以從很多公開的資料里猜測Windows Docker技術(shù)有可能就是所謂的DrawBridge(雖然微軟官方并沒有確認(rèn)),例如以下的公開報(bào)道。所以我們的目的就來看看這個DrawBridge到底是什么原理。
http://t.cn/RAN9Y9h
當(dāng)然猜測歸猜測,還必須以事實(shí)為準(zhǔn)繩。庶不負(fù)胡適先生“大膽假設(shè),小心求證”的教導(dǎo)(今年盆盆還拜謁過胡適先生墓)。
那么盆盆用來小心求證的論據(jù)是什么?
求證論據(jù)
這是微軟研究院公開的一篇有關(guān)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年,針對當(dāng)時的Windows 7進(jìn)行原理描述,而且還針對桌面應(yīng)用(例如Excel進(jìn)行描述),但是基本道理是不會變動太大的。
理論上來說,桌面應(yīng)用需要更多的進(jìn)程間交互,例如Word可能需要通過OLE調(diào)用其它Office文檔對象等。而服務(wù)端的應(yīng)用之間的交互一般是通過網(wǎng)絡(luò)來實(shí)現(xiàn)(例如虛擬機(jī)一般擁有完整的網(wǎng)絡(luò)棧,以便能支持這種需求)。
#p#
大膽分析
視頻里提到,類似Excel這樣的用戶應(yīng)用程序,其API調(diào)用是通過用戶模式的ntdll.dll來實(shí)現(xiàn),由ntdll.dll再代為調(diào)用內(nèi)核模式下的OS Kernel相關(guān)功能。而類似圖形化界面、桌面、剪貼板等,則是通過用戶模式下的Windows子系統(tǒng)(例如圖中的user32.dll、 gdi32.dll和kernel32.dll等),和內(nèi)核模式下的win32k.sys來完成。
前面所述的PDF文檔把傳統(tǒng)的OS服務(wù)分為3個類別:用戶服務(wù)、應(yīng)用服務(wù)和硬件服務(wù),用不同的顏色灰度來表示。
視頻里提到一個Library OS的概念,相當(dāng)于給每個進(jìn)程“包”了一層很薄的"外皮"。其實(shí)質(zhì)是給上述提到的兩個重要的內(nèi)核模式組件win32k.sys和OS Kernel提供了用戶模式下的獨(dú)立副本,其中對應(yīng)win32k.sys的用戶模式副本叫做win32k.dll,而OS Kernel的用戶模式副本叫做NTUM(NT Kernel User Mode)。每個Docker進(jìn)程都有自己獨(dú)立的Library OS,通過secmon(Secure Monitor)和Host OS內(nèi)核進(jìn)行交互。這大概就是其代號"DrawBridge"的由來吧。
和Linux Docker不一樣,Windows進(jìn)程大多數(shù)有圖形化界面,所以為了對其進(jìn)行管理,我們可以借助secmon中的RDP服務(wù)來實(shí)現(xiàn),參考視頻里的截圖。這樣的話,多個Windows Docker容器,可以通過RDP服務(wù)來共享Host上的圖形化資源。當(dāng)然我相信廣大微軟IT運(yùn)維人員會越來越喜歡通過PowerShell對應(yīng)用進(jìn)行控管。
PDF文檔里提到,Library OS所需的代碼改動極小,在Windows 7的項(xiàng)目上只消耗了約2個人年的代價。這是一件好事情,越小的代碼修改,意味著越穩(wěn)定。
PDF還提到DrawBridge和虛擬機(jī)以及傳統(tǒng)進(jìn)程模式之間的比較??梢奃rawBridge相對傳統(tǒng)進(jìn)程所增加的開銷非常低,幾乎可以忽略不計(jì)。
盆盆在前一篇文檔里也提到Docker和其他應(yīng)用封裝模式的比較:
#p#
Hyper-V Container是怎么回事?
說實(shí)在話,盆盆手里也沒有什么猛料,只能猜測它是整合了Hyper-V虛擬化和DrawBridge技術(shù)的容器。可能更加適合生產(chǎn)環(huán)境。既然是可選的部署模式,那么為了適合在Azure和其他Hypervisor上運(yùn)行,Hyper-V Container必然能支持在虛擬化里的虛擬化(好拗口)。
一切得等待Build大會上的實(shí)況演示了。等Build大會過后,華來四會第一時間奉上最新的深入分析。
本文所涉及的Windows內(nèi)部原理,歡迎大家可以在公眾號里回復(fù)課程2查看黃愛華老師的精品課程"Windows性能優(yōu)化與藍(lán)屏診斷"(需要在微信里關(guān)注公眾號:sysinternal)。
最后請容盆盆得瑟一下,前天花了200大元從網(wǎng)上買了一個可折疊的鋼架電腦桌,直接放在空調(diào)正下方,避免夏天時被空調(diào)直接吹到而引起感冒,等于是降低受攻擊面、提高可工作時間。同時可折疊還能節(jié)省空間。注意我說的不是Windows Nano Server哈!