本文講的是<b>使用Docker對時延影響幾何</b>,【編者的話】本文通過介紹Azul Systems的技術副總裁兼首席技術官、聯合創始人Gil Tene對Docker時延特性的分析,說明了針對Docker時延的關鍵影響因素(CPU、記憶體、IO)進行改善提高,認為時延對Docker的影響是一個“無關緊要”問題。
我不斷的聽到有關Docker是有史以來最偉大的技術的說法,但我也聽說Docker不适用于對時延要求嚴格的應用。
<a href="http://highscalability.com/blog/2015/4/8/the-black-magic-of-systematically-reducing-linux-os-jitter.html">系統的減少Linux作業系統抖動的黑魔法</a>
<a href="http://highscalability.com/blog/2015/10/5/your-load-generator-is-probably-lying-to-you-take-the-red-pi.html">你的負載生成器可能會欺騙你-對症下藥并找出原因</a>
暫且把喜好和風格的問題放在一邊,并将重點放在對延遲的影響上(最原始的原題),單純從技術原理機制的角度分析是非常簡單的:
Docker使用Linux容器技術作為執行手段,沒有采用在作業系統層級虛拟化CPU和記憶體,并且在I/O上采用可選的虛拟化層技術(預設情況對I/O虛拟化)。
從時延的角度來看,Docker(以及其他的Linux容器)的CPU和記憶體時延特性與Linux本身幾乎沒有什麼差別。是以适用于Linux時延特性也同樣适用于Docker。
如果你需要完全一緻的低延遲時間效果,你需要做與非Docker化和非容器化的Linux 相一緻的同級别且同樣的事情。比如,如果你需要從整體上對系統進行控制,那麼你也需要在主機級别做和Docker同樣的事情(排除相鄰幹擾)。
如果你需要隔離套接字或核心,并控制哪些程序在哪裡結束,期望這些程序去做與Docker容器或/和它裡面線程相同的事情。
如果你通過numactl(譯者注:numactl通過NUMA政策或記憶體配置設定政策來運作程序)或任何形式的針對numa驅動的記憶體配置設定,這也同樣适用。
你需要額外做一些東西,這可能與其他人部署Docker時不同,但是如果你确實對低延遲時間連接配接感興趣,你可能需要打開工具箱,并使用cgroups、taskets等其他各種酷炫的東西去評估如何對布局進行控制。但是如果你這樣做(當你這樣做時) ,你在CPU和記憶體時延方面無法分辨docker化的程序和非docker化程序之間的差別。
I/O性能是各種配置下時延開銷最主要的問題(和解決方法),通常也是最終的問題。對Docker的磁盤I/O性能和配置選項,我沒有足夠的了解,進而不能進行深入的探讨。但我敢肯定存儲中任何對吞吐量和時延敏感問題的解決方案都是“繞過虛拟化和卷相關的工具,并提供對磁盤裝置和挂載點的直接通路”
網絡特性很清楚:如果你試圖通過網絡自動化生成工具任意接入一種NAT映射或橋接的部署方式,你可能需要在網絡時延和吞吐量性能方面付出沉重的代價(相比于普通linux裸機專用網卡)。不過,在部署Docker容器時也存在一些其它的選擇方式(同樣,可能與一些人期望的部署方式不一樣)能夠在Docker裡實作低開銷或基本上是零延遲開銷網絡連接配接。使用主機網絡或者使用專用IP位址和網卡,你将會獲得比預設橋接方式更好的效果。但同樣你可以使用像Solarflare公司的網卡(在裸機低延遲環境中已普遍采用的解決方案),甚至使用核心旁路、或專用的旋轉核心網絡堆棧,如果進行同樣的操作,Docker将會在延遲性能方面和裸機Linux沒有差別。
Docker(以 “使用者空間作為基本單元”)并不是将很多東西封裝到一個盒子裡,也不采用客戶機作業系統虛拟化技術。當然,他們都可以被用于虛拟化技術(并且經常這樣使用),但是最重要的好處是他們都能進行一緻性遷移,并有充分儲存配置的能力。以及具有對開發、測試、部署環境進行相同配置的能力。這後來演變成能夠輕松的進行管理部署和版本控制(包括回退),并能實作彈性大小調整等酷炫的特性。也同樣可以使用puppet/chef...等配置工具獲得如在裸機裡使用般類似的效果,當然(假設他們能控制你鏡像裡的一切),但是,打包你工作環境的所有東西成一堆數字串,并可被啟動執行是非常吸引人的。
低延遲時間的問題就變成了一個“無關緊要”的問題。而且在對比低延遲時間時Docker比虛拟化管理程式或基于KVM的虛拟化技術帶來的損失更小,通過選擇正确的I/O(專用的網卡、核心和裝置),它的損失幾乎可以忽略。
原文釋出時間為:2015-12-21
本文作者:chenhl
本文來自雲栖社群合作夥伴DockerOne,了解相關資訊可以關注DockerOne。
原文标題:使用Docker對時延影響幾何?