低延遲應(yīng)用使用Docker時(shí)的問題解決方案
大小:0.4 MB 人氣: 2017-10-13 需要積分:1
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
標(biāo)簽:Docker(11471)
一個(gè)偉大的問題誕生在 mechanical-sympathyGoogle郵件列表,或許已經(jīng)有許多其他的偉大的問題誕生在此了。問題如下:我不斷地聽說Docker,就好像他是切片面包以來最偉大的發(fā)明一樣,但是我還聽說低延遲應(yīng)用在使用它的時(shí)候遭受打擊。沒有誰比Azul Systems的技術(shù)副總裁、首席技術(shù)官和聯(lián)合創(chuàng)始人Gil Tene更適合回答這個(gè)問題了。就像我們相信喬丹的三步上欄一樣,我們總能依靠Gil的洞察力,參見下面的文章:
系統(tǒng)地去除Linux操作系統(tǒng)抖動(dòng)的黑魔法你的載荷生成器可能騙了你——吃下紅藥丸然后找出原因
下面是Gil的答案:
拋開問題的品味和風(fēng)格不說,單說延遲效果(原始的問題),從機(jī)制角度來分析,答案很簡(jiǎn)單:Docker使用Linux容器作為執(zhí)行方式?jīng)]有對(duì)CPU和內(nèi)存的操作系統(tǒng)虛擬層,有可選的(即使缺省是打開的)對(duì)I/O的虛擬層。
CPU和內(nèi)存從延遲的角度來說,Docker(和其他Linux容器)的CPU和內(nèi)存延遲特性不能夠和Linux自身區(qū)分出來,但是對(duì)Linux有效的控制遲延行為對(duì)Docker也有效。
如果你想要清楚和一致的低延遲,你必須做不用Docker和不用容器時(shí)相同的工作來獲得相同級(jí)別的一致性。例如,如果你想讓整個(gè)系統(tǒng)盡在掌握(沒有饑餓的鄰居),你也不得不在主機(jī)這個(gè)層次為Docker做工作。
如果你需要分隔套接字或者內(nèi)核和選擇哪些進(jìn)程在哪里,對(duì)Docker容器或者其中的線程,你也要做相同的事。
如果你使用非統(tǒng)一內(nèi)存存取(NUMA, Non-Uniform Memory Access),或者使用任何類型的直接的NUMA驅(qū)動(dòng)的內(nèi)存分配,你也要做相同的事。
并且,你需要做的一些事情可能看起來違反一些人想要的部署Docker的模式。但是,如果你真正對(duì)一致性的低延遲感興趣,你或許需要擺脫現(xiàn)有工具集,使用不同的控制組(cgroups)、任務(wù)設(shè)置(tasksets)和其他酷的工具來確保事情的安排。然而,即使你做了這些事情,你也不能夠區(qū)分容器內(nèi)外的進(jìn)程的CPU和內(nèi)存的延遲。
I/O磁盤I/O
在不同配置下的I/O行為是許多延遲問題產(chǎn)生和解答的原因。對(duì)于磁盤I/O行為和選項(xiàng)我也所知甚少,不能談?wù)撎唷5掖_定解決任何存儲(chǔ)吞吐量和延遲敏感問題的答案是“越過虛擬層和邏輯分區(qū),直接訪問磁盤和掛接點(diǎn)”。
網(wǎng)絡(luò)
網(wǎng)絡(luò)的情形相當(dāng)清楚:如果你想要網(wǎng)絡(luò)地理位置無關(guān)、網(wǎng)絡(luò)地址翻譯(NAT, Network Address Translation)或橋接、自動(dòng)生成的網(wǎng)絡(luò)等功能,你或許會(huì)為網(wǎng)絡(luò)延遲或吞吐量(相比Linux上直接真實(shí)物理網(wǎng)卡)付出代價(jià)。然而,也有為Docker配置低成本或基本上零延遲成本的網(wǎng)絡(luò)鏈路的選項(xiàng)(再一次,可能與一些人想要的部署方式不同)。使用宿主機(jī)的網(wǎng)絡(luò)或者專用IP地址和網(wǎng)卡,你將獲得比缺省的橋接網(wǎng)絡(luò)更好的性能。但你將會(huì)遇到配置Solarflare的網(wǎng)卡(在裸金屬低延遲環(huán)境中很普遍)、繞過內(nèi)核、專用自旋核心網(wǎng)絡(luò)協(xié)議棧等相關(guān)的事宜。這些延遲相關(guān)的行為與是在宿主機(jī)上還是用Docker沒有分別。
Docker(作為一個(gè)整體屬于用戶空間)不是把大雜燴裝進(jìn)一個(gè)盒子,客機(jī)(guest OS)作為一個(gè)整體的虛擬化方案也不是。確實(shí),他們都能夠這樣用(經(jīng)常是這樣),但是使用他們的最大益處是發(fā)布一致的精心選擇的配置,還有開發(fā)、測(cè)試和部署都使用相同配置的能力。后者可以容易地管理發(fā)布和版本(包括回滾),還有實(shí)現(xiàn)如“彈性大小”這樣的酷的事情。其他配置工具(puppet或者shef等)當(dāng)然也能得到相同的結(jié)果(假定他們控制你的鏡像中的一切),但是把可以工作的東西打包在一起開箱即用確實(shí)是很誘人的事。
我知道有使用一個(gè)宿主機(jī)上只有一個(gè)客機(jī)這樣虛擬化方案的人們(例如,AWS r3.8加大實(shí)例類型目前大概就是這樣的)。也知道有采用相同方式使用Docker的人們(一個(gè)宿主機(jī)一個(gè)容器)。這兩種用例是為了配置控制和部署,不是為了節(jié)約成本而把東西打包。
低延遲這件事現(xiàn)在變成了“它更糟嗎?”這個(gè)問題。相比較基于宿主機(jī)和客機(jī)或KVM的虛擬化方案,在低延遲這個(gè)問題上,只要做正確的選擇(專用網(wǎng)卡、內(nèi)核和設(shè)備),Docker帶來的損害更少,真正的不可察覺。
?
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
下載地址
低延遲應(yīng)用使用Docker時(shí)的問題解決方案下載
相關(guān)電子資料下載
- 如何在Windows系統(tǒng)上設(shè)置Docker鏡像源 55
- 機(jī)器學(xué)習(xí)需要掌握的九種工具盤點(diǎn) 16
- Docker鏡像國(guó)內(nèi)加速的幾種方法 55
- VectorCAST|Docker場(chǎng)景下的代碼白盒測(cè)試實(shí)施 402
- 如何用Springboot整合Redis 118
- 如何在macOS系統(tǒng)中用Docker運(yùn)行macOS鏡像呢? 364
- 什么是Docker容器?為什么需要Docker容器? 71
- 為什么需要Docker容器?Docker容器和VM有什么區(qū)別? 323
- 如何使用 Docker容器化技術(shù) 1188
- Dockerfile定義Docker鏡像的構(gòu)建過程 1088