實(shí)例分析京東Docker,彈性伸縮成重點(diǎn)
大?。?/span>0.8 MB 人氣: 2017-10-10 需要積分:1
推薦 + 挑錯(cuò) + 收藏(0) + 用戶(hù)評(píng)論(0)
標(biāo)簽:Docker(11471)彈性伸縮(1781)
不知不覺(jué)中,年中的618和年終的11.11已經(jīng)成為中國(guó)電商的兩大促銷(xiāo)日,當(dāng)然,這兩天也是一年中系統(tǒng)訪問(wèn)壓力最大的兩天。對(duì)于京東而言,618更是這一年中最大的一次考試,考點(diǎn)是系統(tǒng)的擴(kuò)展性、穩(wěn)定性、容災(zāi)能力、運(yùn)維能力、緊急故障處理能力。彈性計(jì)算云是京東2015年研發(fā)部戰(zhàn)略項(xiàng)目,它基于Docker簡(jiǎn)化了應(yīng)用的部署和擴(kuò)容,提高了系統(tǒng)的伸縮能力。目前京東的圖片系統(tǒng)、單品頁(yè)、頻道頁(yè)、風(fēng)控系統(tǒng)、緩存、登錄、團(tuán)購(gòu)、O2O、無(wú)線(xiàn)、拍拍等業(yè)務(wù)都已經(jīng)運(yùn)行在彈性計(jì)算云系統(tǒng)中。過(guò)去的一段時(shí)間里,彈性計(jì)算云項(xiàng)目在京東內(nèi)部獲得了廣泛應(yīng)用,并且日趨穩(wěn)定成熟。一方面,這個(gè)項(xiàng)目可以更有效地管理機(jī)器資源,提高資源利用率;另外還能大幅提高生產(chǎn)效率,讓原來(lái)的申請(qǐng)機(jī)器上線(xiàn)擴(kuò)容逐漸過(guò)渡到全自動(dòng)維護(hù)。京東彈性計(jì)算云項(xiàng)目將深刻影響京東未來(lái)幾年的基礎(chǔ)架構(gòu)。
受訪嘉賓介紹
劉海鋒,京東云平臺(tái)首席架構(gòu)師、系統(tǒng)技術(shù)部負(fù)責(zé)人。系統(tǒng)技術(shù)部專(zhuān)注于基礎(chǔ)服務(wù)的自主研發(fā)與持續(xù)建設(shè),包括分布式存儲(chǔ)、以?xún)?nèi)存為中心的NoSQL服務(wù)、圖片源站、內(nèi)容分發(fā)網(wǎng)絡(luò)、消息隊(duì)列、內(nèi)部SOA化、彈性計(jì)算云等核心系統(tǒng),均大規(guī)模部署以支撐京東集團(tuán)的眾多業(yè)務(wù)。
InfoQ:能否介紹下京東彈性計(jì)算云項(xiàng)目的情況,你們什么時(shí)候開(kāi)始使用Docker的?目前有多大的規(guī)模?
劉海鋒:彈性計(jì)算云項(xiàng)目在去年第四季度開(kāi)始研發(fā),今年春節(jié)后正式啟動(dòng)推廣應(yīng)用。經(jīng)過(guò)半年多的發(fā)展,逐漸做到了一定規(guī)模。截至6月17日,我們線(xiàn)上運(yùn)行了9853個(gè)Docker實(shí)例(注:無(wú)任何夸大)以及幾百個(gè)KVM虛擬機(jī)。京東主要的一些核心應(yīng)用比如商品詳情頁(yè)、圖片展現(xiàn)、秒殺、配送員訂單詳情等等都部署在彈性云中。彈性計(jì)算云項(xiàng)目也作為今年618的擴(kuò)容與災(zāi)備資源池,這估計(jì)是國(guó)內(nèi)甚至世界上最大規(guī)模的Docker應(yīng)用之一。隨著業(yè)務(wù)的發(fā)展以及IDC的增加,預(yù)計(jì)今年年底規(guī)模會(huì)翻兩番,京東大部分應(yīng)用程序都會(huì)通過(guò)容器技術(shù)來(lái)發(fā)布和管理。
系統(tǒng)架構(gòu)可以這樣簡(jiǎn)潔定義:彈性計(jì)算云 = 軟件定義數(shù)據(jù)中心 + 容器集群調(diào)度。整個(gè)項(xiàng)目分成兩層架構(gòu),底層為基礎(chǔ)平臺(tái),系統(tǒng)名JDOS,通過(guò)『OpenStack married with Docker』來(lái)實(shí)現(xiàn)基礎(chǔ)設(shè)施資源的軟件管理,Docker取代VM成為一等公民,但這個(gè)系統(tǒng)目標(biāo)是統(tǒng)一生產(chǎn)物理機(jī)、虛擬機(jī)與輕量容器;上層為應(yīng)用平臺(tái),系統(tǒng)名CAP,集成部署監(jiān)控日志等工具鏈,實(shí)現(xiàn)『無(wú)需申請(qǐng)服務(wù)器,直接上線(xiàn)』,并進(jìn)行業(yè)務(wù)特定的、數(shù)據(jù)驅(qū)動(dòng)的容器集群調(diào)度與彈性伸縮。
InfoQ:能否談?wù)勀銈兊腄ocker使用場(chǎng)景?在618這樣的大促中,Docker這樣的容器有什么優(yōu)勢(shì)?618中有哪些業(yè)務(wù)跑到Docker中?
劉海鋒:目前主要有兩類(lèi)場(chǎng)景:無(wú)狀態(tài)的應(yīng)用程序,和緩存實(shí)例。這兩類(lèi)場(chǎng)景規(guī)模最大也最有收益。不同的場(chǎng)景具體需求不同,因此技術(shù)方案也不相同。內(nèi)部我們稱(chēng)呼為“胖容器”與“瘦容器”技術(shù)。從資源抽象角度,前者帶獨(dú)立IP以及基礎(chǔ)工具鏈如同一臺(tái)主機(jī),后者可以理解為物理機(jī)上面直接啟動(dòng)cgroup做資源控制加上鏡像機(jī)制。
618這樣的大促備戰(zhàn),彈性計(jì)算云具備很多優(yōu)勢(shì):非常便捷的上線(xiàn)部署、半自動(dòng)或全自動(dòng)的擴(kuò)容。Docker這樣的操作系統(tǒng)級(jí)虛擬化技術(shù),啟動(dòng)速度快,資源消耗低,非常適合私有云建設(shè)。
今年618,是京東彈性計(jì)算云第一次大促亮相,支持了有很多業(yè)務(wù)的流量。比如圖片展現(xiàn)80%流量、單品頁(yè)50%流量、秒殺風(fēng)控85%流量、虛擬風(fēng)控50%流量,還有三級(jí)列表頁(yè)、頻道頁(yè)、團(tuán)購(gòu)頁(yè)、手機(jī)訂單詳情、配送員主頁(yè)等等,還有全球購(gòu)、O2O等新業(yè)務(wù)。特別是,今年618作戰(zhàn)指揮室大屏監(jiān)控系統(tǒng)都是部署在彈性云上的。
InfoQ:你們是如何結(jié)合Docker和OpenStack的?網(wǎng)絡(luò)問(wèn)題是如何解決的?
劉海鋒:我們深度定制OpenStack,持續(xù)維護(hù)自己的分支,稱(chēng)之為JDOS(the Jingdong Datacenter Operating System)。JDOS目標(biāo)很明確:統(tǒng)一管理和分配Docker、VM、Bare Metal,保證穩(wěn)定高性能。網(wǎng)絡(luò)方面不玩復(fù)雜的,線(xiàn)上生產(chǎn)環(huán)境劃分VLANs + Open vSwitch。SDN目前沒(méi)有顯著需求所以暫不投入應(yīng)用。我們以『研以致用』為原則來(lái)指導(dǎo)技術(shù)選擇和開(kāi)發(fā)投入。
InfoQ:能否談?wù)勀銈兡壳盎贒ocker的workflow?
劉海鋒:彈性計(jì)算平臺(tái)集成了京東研發(fā)的統(tǒng)一工作平臺(tái)(編譯測(cè)試打包上線(xiàn)審批等)、自動(dòng)部署、統(tǒng)一監(jiān)控、統(tǒng)一日志、負(fù)載均衡、數(shù)據(jù)庫(kù)授權(quán),實(shí)現(xiàn)了應(yīng)用一鍵部署,并且全流程處理應(yīng)用接入,擴(kuò)容、縮容、下線(xiàn)等操作。支持半自動(dòng)與全自動(dòng)。
InfoQ:這么多的容器,你們是如何調(diào)度的?
劉海鋒:容器的調(diào)度由自主研發(fā)的CAP(Cloud Application Platform)來(lái)控制,并會(huì)根據(jù)應(yīng)用配置的策略來(lái)進(jìn)行調(diào)度;在創(chuàng)建容器的時(shí)候,會(huì)根據(jù)規(guī)格、鏡像、機(jī)房和交換機(jī)等策略來(lái)進(jìn)行創(chuàng)建;創(chuàng)建完容器后,又會(huì)根據(jù)數(shù)據(jù)庫(kù)策略、負(fù)載策略、監(jiān)控策略等來(lái)進(jìn)行注冊(cè);在彈性調(diào)度中,除了根據(jù)容器的資源情況,如CPU和連接數(shù),還會(huì)接合應(yīng)用的TPS性能等等來(lái)綜合考慮,進(jìn)行彈性伸縮。
目前已經(jīng)針對(duì)兩大類(lèi)在線(xiàn)應(yīng)用實(shí)現(xiàn)自動(dòng)彈性調(diào)度,一是Web類(lèi)應(yīng)用,二是接入內(nèi)部SOA框架的服務(wù)程序。大規(guī)模容器的自動(dòng)化智能調(diào)度,我們?nèi)栽谶M(jìn)一步做研究與開(kāi)發(fā)。
InfoQ:目前主要有哪些業(yè)務(wù)使用了Docker?業(yè)務(wù)的選擇方面有什么建議?
劉海鋒:目前有1000個(gè)應(yīng)用已經(jīng)接入彈性云,涵蓋京東各個(gè)業(yè)務(wù)線(xiàn),包括很多核心應(yīng)用。目前我們主要支持計(jì)算類(lèi)業(yè)務(wù),存儲(chǔ)類(lèi)應(yīng)用主要應(yīng)用到了緩存。數(shù)據(jù)庫(kù)云服務(wù)也將通過(guò)Docker進(jìn)行部署和管理。
特別強(qiáng)調(diào)的是,業(yè)務(wù)場(chǎng)景不同,技術(shù)方案就有差別。另外,有些對(duì)隔離和安全比較敏感的業(yè)務(wù)就分配VM。技術(shù)無(wú)所謂優(yōu)劣和新舊,技術(shù)以解決問(wèn)題和創(chuàng)造業(yè)務(wù)價(jià)值為目的。
InfoQ:你們的緩存組件也跑在Docker中,這樣做有什么好處?IO什么的沒(méi)有問(wèn)題嗎?有什么好的經(jīng)驗(yàn)可以分享?
劉海鋒:我們團(tuán)隊(duì)負(fù)責(zé)一個(gè)系統(tǒng)叫JIMDB,京東統(tǒng)一的緩存與高速NoSQL服務(wù),兼容Redis協(xié)議,后臺(tái)保證高可用與橫向擴(kuò)展。系統(tǒng)規(guī)模增長(zhǎng)到現(xiàn)在的三千多臺(tái)大內(nèi)存機(jī)器,日常的部署操作、版本管理成為最大痛點(diǎn)。通過(guò)引入Docker,一鍵完成容器環(huán)境的緩存集群的全自動(dòng)化搭建,大幅提升了系統(tǒng)運(yùn)維效率。
技術(shù)上,緩存容器化的平臺(tái)并不基于OpenStack,而是基于JIMDB自身邏輯來(lái)開(kāi)發(fā)。具體說(shuō)來(lái),系統(tǒng)會(huì)根據(jù)需求所描述的容量、副本數(shù)、機(jī)房、機(jī)架、權(quán)限等約束創(chuàng)建緩存容器集群,并同時(shí)在配置中心注冊(cè)集群相關(guān)元數(shù)據(jù)描述信息,通過(guò)郵件形式向運(yùn)維人員發(fā)出構(gòu)建流水詳單,并通知用戶(hù)集群環(huán)境構(gòu)建完成。調(diào)度方面,不僅會(huì)考慮容器內(nèi)進(jìn)程,容器所在機(jī)器以及容器本身當(dāng)前的實(shí)時(shí)狀況,還會(huì)對(duì)它們的歷史狀況進(jìn)行考察。一旦緩存實(shí)例觸發(fā)內(nèi)存過(guò)大流量過(guò)高等擴(kuò)容條件,系統(tǒng)會(huì)立即執(zhí)行擴(kuò)容任務(wù)創(chuàng)建新的容器分?jǐn)側(cè)萘亢土髁?,為保證服務(wù)質(zhì)量,緩存實(shí)例只有在過(guò)去一段時(shí)間指標(biāo)要求持續(xù)保持低位的情況下才會(huì)縮容。在彈性伸縮的過(guò)程中,會(huì)采用Linux TC相關(guān)技術(shù)保證緩存數(shù)據(jù)遷移速度。
InfoQ:使用過(guò)程中有哪些坑?你們有做哪些重點(diǎn)改進(jìn)?
劉海鋒:坑太多了,包括軟件、硬件、操作系統(tǒng)內(nèi)核、業(yè)務(wù)使用方式等等。底層關(guān)鍵改進(jìn)印象中有兩個(gè)方面:第一,Docker本地存儲(chǔ)結(jié)構(gòu),拋棄Device Mapper、AUTFS等選項(xiàng),自行定制;第二,優(yōu)化Open vSwitch性能。比如,優(yōu)化Docker鏡像結(jié)構(gòu),加入多層合并、壓縮、分層tag等技術(shù),并采用鏡像預(yù)分發(fā)技術(shù),可以做到秒級(jí)創(chuàng)建容器實(shí)例;優(yōu)化Open vSwitch轉(zhuǎn)發(fā)層,顯著提升網(wǎng)絡(luò)小包延遲。
?
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
下載地址
實(shí)例分析京東Docker,彈性伸縮成重點(diǎn)下載
相關(guān)電子資料下載
- 如何在Windows系統(tǒng)上設(shè)置Docker鏡像源 55
- 機(jī)器學(xué)習(xí)需要掌握的九種工具盤(pán)點(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)建過(guò)程 1088