了解最新公司動態(tài)及行業(yè)資訊
京東云作為京東集團對外輸出能力的窗口,實現(xiàn)京東能力+云平臺賦能客戶。其產(chǎn)品涵蓋IaaS層、PaaS層以及以此為基礎的電子商務、物流、金融、保險等領域的服務和解決方案。本文主要從保障這些服務的穩(wěn)定性和效率的角度來講解京東云自動化運維系統(tǒng)的構建和實現(xiàn)。
2017年12月1日至2日,由51CTO主辦的WOTD全球軟件開發(fā)技術峰會在深圳中州萬豪酒店舉行。
京東云高級架構師在主會場與來賓分享了《京東云自動化運維系統(tǒng)建設》的主題演講。以下是演講稿。
說到京東云,我們最看重運維,需要一個自動化的運維平臺。這方面有幾個關鍵問題,主要圍繞安全、部署變更、網(wǎng)絡管理、監(jiān)控管理……使用自動化運維來提高平臺架構的穩(wěn)定性和人員的開發(fā)效率。
在京東云的整體環(huán)境中,除了我們的技術團隊管理和維護的云應用外,還啟用和提供了各種SaaS服務。
如何在云端維護客戶業(yè)務的穩(wěn)定性?我們對此進行了深入的研究和探索,我們將分四個部分進行說明:
京東云自動化運維基礎組件
針對以上問題,我們從四個方面入手:
如上圖所示,京東云運維平臺的大致建設路線圖是:基礎組件→客戶端系統(tǒng)→部署系統(tǒng)(包括:各種發(fā)布系統(tǒng)、任務調度系統(tǒng)、監(jiān)控系統(tǒng)),最后完善運營和維護平臺。,以便更好地服務于我們的客戶。
服務和資源管理
首先我們來看第一個基礎組件:服務組織資源的管理it運維,也就是利用CMDB來實現(xiàn)所謂的配置管理。
通過CMDB的“服務樹”概念,我們可以把握以下三個方面:
因此,“服務樹”主要涉及到系統(tǒng)中服務的實時信息,包括:哪個服務在哪臺機器上,哪些實例,屬于哪個App,內部有哪些邏輯進程,以及如何申請所需的外部權限,以及我們如何對其進行監(jiān)控等。這些都需要從服務器獲得。
其次,可以解決服務之間的解耦關系,即服務與實例的關系,以及服務對外提供的窗口。
上圖右側為“服務樹”與名稱服務的示意圖。底部顯示了從應用程序到實例的解耦關系,頂部是客戶端的退避()。
任務調度管理
第二個基本組成部分是任務調度管理。在實際場景中,無論我們是想?yún)f(xié)同操作、在線發(fā)布,還是部署和分發(fā)文件。
這些都需要系統(tǒng)調度目標機器完成相應的任務,也就是我們必須要求指定的機器能夠按照指定的策略執(zhí)行指定的命令。由于該過程的實時性、批處理性和共生性,支持該系統(tǒng)極具挑戰(zhàn)性。
同時,我們需要通過策略來定義不同類型的并發(fā)。比如我們要發(fā)布一百臺機器,那么我們不會同時部署,而是批量并發(fā)。
因此,我們需要指定每個并發(fā)的具體任務,判斷成功與否的邏輯關系,檢查具體的完成程度,還要找出那些超時的狀態(tài)。由于這些是通過底層架構構建的各種服務,它們的調度邏輯其實是一樣的。
此外,所有執(zhí)行操作都需要可追溯,包括能夠知道誰、何時以及執(zhí)行了哪些操作。可見的安全性和標準化非常重要。
而如果出現(xiàn)故障,我們需要及時截取輸出來定位問題。這些是任務調度系統(tǒng)基于服務樹求和需要實現(xiàn)的基本邏輯。
監(jiān)控平臺
第三個基本組成部分是監(jiān)控平臺。監(jiān)控無非是一個從數(shù)據(jù)采集、到數(shù)據(jù)聚合、再到存儲和處理的過程。
與通常的數(shù)據(jù)監(jiān)控不同,我們構建了一個時間序列數(shù)據(jù)存儲(TSDB)。由于要查詢的數(shù)據(jù)點比較多,所以我們將每個查詢和收集到的監(jiān)控點信息按順序存儲。
另外,我們的系統(tǒng)具有“少讀多寫”的特點,即“寫”(寫數(shù)據(jù))比較均衡;而“讀取”(讀取數(shù)據(jù))是突發(fā)的。
例如,檢查一個監(jiān)控的狀態(tài)是一個隨時都要做的操作。一般這樣的寫操作需要1秒、10秒或1分鐘作為獲取間隔,這是一個比較頻繁的過程。讀操作是突然發(fā)生的,所以我們需要分離讀寫。
因此,我們基于 ES() 實現(xiàn) TSPD,其中涉及到兩個封裝:
監(jiān)控數(shù)據(jù)的另一個特點是自動采樣。有時,一些頻繁的查詢涉及很大的時間跨度。
例如:一個月甚至一年。由于我們的數(shù)據(jù)采集間隔是1秒、10秒或者1分鐘,如果直接查詢所有的數(shù)據(jù)點,需要產(chǎn)生海量的數(shù)據(jù),這當然是很難實現(xiàn)的。
因此,我們自動對寫操作進行采樣。當查詢超過15天的數(shù)據(jù)時,我們會按分鐘或每小時匯總數(shù)據(jù),放入數(shù)據(jù)庫,然后查詢一個月的數(shù)據(jù)。
通過自適應路由,我們可以找到有限的一小時數(shù)據(jù),同時我們的數(shù)據(jù)庫和業(yè)務系統(tǒng)速度也可以有更快的水平。
另外,對于那些實時數(shù)據(jù)處理,我們主要采用基于JNS的多地點部署和多調度流程,從而實現(xiàn)多維實時計算。
客戶
第四個基本組件是客戶端。由于所有業(yè)務都需要客戶端,對于京東這樣大的公司,會細分為部署類(如JNS)、監(jiān)控類、初始化等客戶端類型。
想象一下,如果我們需要加載、部署或升級 100,000 臺機器,工作量是可想而知的。
即使我們只維護一個幾十萬臺機器的Agent,由于環(huán)境復雜,多個IP的存在,根據(jù)一個“何時何地出問題”來處理會很費時費力。單一維度。
所以這里我們介紹一下Agent資源溢出的重要概念。比如對Agent的監(jiān)控,由于占用了一些計算資源,當前的服務可能會被關閉,所以這種服務外的監(jiān)控會影響服務本身的穩(wěn)定性。
可以看出,Agent客戶端需要做以下事情:
在具體實現(xiàn)中,我們使用 ifrit 進行控制。也就是當一臺機器在引入服務時,負責管理的agent會在我們的ifrit服務器上注冊,告知它當前的分機房和使用的agent的版本。
然后其對應的客戶端就可以相應的下載這些信息包,從而掌握最新版本的Agent等信息。這導致了一個簡單的客戶端架構。
京東云自動化運維部署介紹
有了上述客戶端和組件系統(tǒng)的構建基礎,我們進一步構建部署和發(fā)布任務就相對容易了。
我們先來看看應用的部署系統(tǒng)。除了實現(xiàn)應用部署外,它還管理各種服務的維護和資源,以及訪問的過程。
如上圖所示: 除了編譯構建“”之外,我們還實現(xiàn)了流量訪問“”。
如上圖所示,這里的Agent有一個核心需求:實現(xiàn)跨平臺。由于京東整體平臺環(huán)境復雜,我們有不同的虛擬機、物理機,需要整合上面提到的各種操作。
因此,我們需要實現(xiàn)以下容錯功能:
對于上述功能的實現(xiàn),我們將部署分為兩種:
大體流程是:編譯構建自己的產(chǎn)品庫(包括代碼包和代碼項)→通過部署服務和上述調度系統(tǒng)的部署服務發(fā)布(物理機和容器都可以實現(xiàn))→部署完成并開始運行→對運維(尤其是鏡像日志的收集)→通過日志服務進一步分析。
同時我們在前端做好了流量接入,中間還提供了一個LB(負載均衡)網(wǎng)絡。通過以上兩種部署方式,我們可以根據(jù)服務的實際需求進行按需升級。
此外,我們這里使用的是基于 NS 的服務自動化和資源管理。它不需要關心當前服務的具體流程是如何實現(xiàn)的,只關注:當前的容量,需要什么資源,可以獲得的資源。
京東云自動化運維監(jiān)控系統(tǒng)
除了上面提到的部署,我們還非常重視監(jiān)控系統(tǒng)。監(jiān)控最重要的作用是能夠在出現(xiàn)問題時及時恢復。
為此,必須完成以下工作:
因此,面對虛擬機和復雜環(huán)境,為了保證服務器不停止運行,我們在上線過程中采用了-分層發(fā)布。
它可以監(jiān)控一個服務是否在機器層、服務層、外部流量訪問層,甚至網(wǎng)絡層。這些都是監(jiān)控需要解決的問題。
上圖是監(jiān)控的整體架構,展示了從底層數(shù)據(jù)抽象,到數(shù)據(jù)采集,再到數(shù)據(jù)處理和離線處理的全流程。
數(shù)據(jù)采集??方式包括:采集代理、外部檢測和API推送。
同時,處理邏輯包括:如何判斷異常類型,對異常做出何種告警,運維溝通或研發(fā)溝通的方式。這些步驟都是提前計劃好的。
當然,這些失敗本身就是事件類型。因此,我們需要考慮如何存儲事件以方便查詢和進一步?jīng)Q策。
由于之前的事件可能會影響到后續(xù)的事件,如果你有一個好的事件庫,那么你可以讓系統(tǒng)下游知道上游發(fā)生故障的時間和地點,這對于下游故障排除非常有用。都非常有幫助。
同時,我們也會對監(jiān)測到的數(shù)據(jù)進行一些離線處理,通過各種高效算法反饋給相應的告警計算。最終以趨勢圖或各種事件、報警的形式顯示各種數(shù)據(jù)。
在之前的基礎上it運維,我們構建的京東云監(jiān)控系統(tǒng)由以下四種監(jiān)控類型組成:
其實這個問題對于京東來說會很嚴重,因為它會直接影響到用戶流量甚至用戶訂單的流失,所以我們需要從用戶層面做黑盒檢測。
基本監(jiān)控
具體而言,對于機器監(jiān)控,我們將機器連接的整個過程自動化,從采集到計算,再到報警,從而避免人工干預。
同時,我們?yōu)楦鞣N報警指標設置了默認值。例如,通過發(fā)現(xiàn)某臺機器的cpu.idle小于10%,我們可以從服務名知道它所屬的服務,以及誰是維護者,然后向它的維護者發(fā)送告警信息,并通過報警信息,可以大致了解相關數(shù)據(jù),從而實現(xiàn)后臺聯(lián)動。
生存監(jiān)測
對于生存監(jiān)控,主要檢查進程和端口是否存活。為了實現(xiàn)部署聯(lián)動,我們指定進程和端口的部署路徑。
通過進程的路徑,我們可以知道進程的類型和對外開放的端口,從而實現(xiàn)自然監(jiān)控。
性能監(jiān)控
再來看看性能監(jiān)控,主要關注服務的外部指標,一般來自日志。
為了統(tǒng)一,我們規(guī)定、規(guī)范、約定了一種日志格式,從多個維度讀取日志信息中不同的標簽(tag)值。
比如,從宏觀層面來看,京東整體流量是穩(wěn)定的,但通過多維度聚合可以發(fā)現(xiàn),某省機房流量存在細微的底層波動。
當然,除了主動從日志中抓取,我們還可以從程序和用戶的告警中學習。
業(yè)務監(jiān)控
業(yè)務監(jiān)控就是從用戶那里檢查服務是否正常。比如電商中常用的就是通過模擬全國用戶訪問,找出分省、分運營商或分機房的訪問情況。
這是使用外部網(wǎng)絡或自定義方法來測試業(yè)務。此外,我們還將使用模擬云操作的方法來監(jiān)控云服務。
例如:模擬用戶登錄云網(wǎng)站→購買主機→部署鏡像→發(fā)布。
讓我們判斷一切是否正常。通過這種方式,我們能夠在用戶之前從用戶的角度識別、處理和解決問題。
總結與展望
如上圖所示,我們最終在上一個的基礎上搭建了京東云自動化運維平臺方舟。
在界面上,它可以提供:
綜上所述,我們的監(jiān)控自動化平臺通過各種技術的應用,基本實現(xiàn)了服務化,實現(xiàn)了全生命周期。
面對大量的 SaaS 客戶,我們的解決方案為他們提供有保障的交付效率、成本節(jié)約以及對各種可能出現(xiàn)的問題的準備。
組織/夏立成 上海藍夢創(chuàng)始人兼CEO,湖北IT公司副總裁,致力于為企業(yè)客戶提供IT外包網(wǎng)絡維護服務,幫助他們創(chuàng)新、迭代和進化。
藍盟1999年成立于上海,致力于為企業(yè)客戶提供IT外包、弱電工程(網(wǎng)絡布線、機房建設、門禁考勤、視頻監(jiān)控、電話交換機、多媒體會議室)、系統(tǒng)集成(網(wǎng)絡搭建、網(wǎng)絡改造)、WIFI覆蓋、數(shù)據(jù)備份、病毒防護、文件權限、虛擬化等)、云服務(微軟云、阿里云、企業(yè)郵箱等)“一站式”IT外包解決方案。, 咨詢。