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