溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Captial One如何實(shí)現(xiàn)Artifactory HA集群的自動(dòng)化維護(hù)

發(fā)布時(shí)間:2020-08-10 00:52:49 來(lái)源:ITPUB博客 閱讀:160 作者:JFrog杰蛙科技 欄目:開(kāi)發(fā)技術(shù)

一、背景

本文整理自Hank Hudgins,Capital One高級(jí)工程師,在JFrog 2019用戶(hù)大會(huì)上的講演《Automated Artifactory HA Pipeline》。

Captial One如何實(shí)現(xiàn)Artifactory HA集群的自動(dòng)化維護(hù)

Capital One是美國(guó)最大的數(shù)字化銀行之一,其IT管理方法和應(yīng)用技術(shù)也極為敏捷,全球擁有上萬(wàn)研發(fā),具備非常豐富的 DevOps落地經(jīng)驗(yàn)。在Capital One的DevOps體系當(dāng)中,有很多類(lèi)似于JFrog Aritfactory的HA(高可用)應(yīng)用服務(wù)集群。眾所周知,HA集群的運(yùn)維,如升級(jí)、擴(kuò)容、打補(bǔ)丁等工作,要想在保持用戶(hù)服務(wù)不中斷,服務(wù)水平不降級(jí)的前提下完成,尤其是在像Capital One這么大規(guī)模的DevOps系統(tǒng)當(dāng)中,是十分困難、復(fù)雜,和高風(fēng)險(xiǎn)的。 

Captial One如何實(shí)現(xiàn)Artifactory HA集群的自動(dòng)化維護(hù)

Captital One使用的Artifactory為其DevOps體系中的制品及依賴(lài)管理提供了企業(yè)級(jí)解決方案,擁有工作(primary)和容災(zāi)(HR)兩類(lèi)HA集群。Hank所在的Artifactory維護(hù)團(tuán)隊(duì),針對(duì)Artifactory HA集群維護(hù)的難點(diǎn),通過(guò)建設(shè)和運(yùn)行自動(dòng)化的流水線(xiàn),在不影響用戶(hù)使用和服務(wù)水平的前提下,自動(dòng)、高效、保質(zhì)地完成了諸如版本升級(jí)、配置更新、補(bǔ)丁加載等工作,并且在檢測(cè)到問(wèn)題時(shí),還能夠?qū)崿F(xiàn)自動(dòng)化的回滾。在本次講演中,Hank就介紹了這套自動(dòng)化流水線(xiàn)的組成與特色。

二、自動(dòng)化流水線(xiàn)概述

Capital One采用這套可靠的自動(dòng)化流水線(xiàn),在Artifactory HA集群的維護(hù)工作中獲得了良好的收益:

Captial One如何實(shí)現(xiàn)Artifactory HA集群的自動(dòng)化維護(hù)

首先是通過(guò)自動(dòng)化加速了維護(hù)進(jìn)程,使得開(kāi)發(fā)人員能夠集中精力進(jìn)行研發(fā),而不需要考慮重復(fù)性的部署和測(cè)試任務(wù);其次,流水線(xiàn)的可復(fù)用性也為維護(hù)工作提供了便捷的可擴(kuò)展性,通過(guò)修改相關(guān)配置,流水線(xiàn)就能在新的環(huán)境中進(jìn)行部署;最后,流水線(xiàn)還提供了可以快速檢測(cè)缺陷,并實(shí)現(xiàn)無(wú)縫、高效回滾的部署過(guò)程。

該自動(dòng)化流水線(xiàn)是按下述方式組成的:

Captial One如何實(shí)現(xiàn)Artifactory HA集群的自動(dòng)化維護(hù)

首先是利用Jenkins驅(qū)動(dòng)整個(gè)流水線(xiàn),并集成GitHub進(jìn)行觸發(fā):

·        每個(gè)Pull Request會(huì)觸發(fā)小規(guī)模的測(cè)試以得到快速反饋。這些測(cè)試不是HA集群范圍的,但可以得到快速驗(yàn)證;

·        每個(gè)Merge會(huì)觸發(fā)研發(fā)環(huán)境HA集群范圍的部署,并進(jìn)行相關(guān)測(cè)試;

·        標(biāo)簽(Tag)被用來(lái)標(biāo)記代碼更新的驗(yàn)證階段和對(duì)應(yīng)的環(huán)境。

其次,利用Terraform創(chuàng)建基礎(chǔ)設(shè)施,實(shí)現(xiàn)了“類(lèi)”藍(lán)/綠的發(fā)布。

最后,利用Chef cookbook實(shí)現(xiàn)針對(duì)各種應(yīng)用服務(wù)的操作和配置更新。除了Artifactory,這些應(yīng)用服務(wù)還包括了相關(guān)用于反向代理的Nginx、監(jiān)控的Datadog,以及日志收集的Splunk。

三、自動(dòng)化流水線(xiàn)組成

接下來(lái),Hank逐一介紹了這套自動(dòng)化流水線(xiàn)各個(gè)階段的任務(wù)及實(shí)現(xiàn)方式。

Captial One如何實(shí)現(xiàn)Artifactory HA集群的自動(dòng)化維護(hù)

首先是代碼的靜態(tài)分析,針對(duì)Pull Request和Merge運(yùn)行。分析的目的是對(duì)代碼結(jié)構(gòu)進(jìn)行快速驗(yàn)證和反饋,確保其符合業(yè)界標(biāo)準(zhǔn)。流水線(xiàn)集成了一系列的Linter來(lái)實(shí)現(xiàn)針對(duì)不同類(lèi)型代碼的靜態(tài)分析。

Captial One如何實(shí)現(xiàn)Artifactory HA集群的自動(dòng)化維護(hù)

接下來(lái)是安全測(cè)試,這在流水線(xiàn)當(dāng)中體現(xiàn)了“左移”的原則,能夠在真正部署之前盡早的檢測(cè)和發(fā)現(xiàn)潛在的安全漏洞。目前的安全測(cè)試分兩類(lèi),一類(lèi)是靜態(tài)安全測(cè)試,即通過(guò)分析代碼結(jié)構(gòu)來(lái)發(fā)現(xiàn)如SQL注入、Cross-site腳本等安全隱患;另一類(lèi)是JFrog Xray提供的依賴(lài)測(cè)試,檢測(cè)三方依賴(lài)包中是否包含已知安全漏洞,并推薦對(duì)應(yīng)的修復(fù)版本。

Captial One如何實(shí)現(xiàn)Artifactory HA集群的自動(dòng)化維護(hù)

下一步是單元/集成測(cè)試,用于驗(yàn)證代碼的更新不會(huì)破壞預(yù)期的功能。這一步測(cè)試也可以應(yīng)用于Artifactory的Custom user plugin的測(cè)試。流水線(xiàn)通過(guò)啟動(dòng)包含Artifactory的容器,安裝并測(cè)試這些custom plugin,確保其正確工作,而不需要連接到真正的Artifactory HA集群。

Captial One如何實(shí)現(xiàn)Artifactory HA集群的自動(dòng)化維護(hù)

在完成了上述初步的測(cè)試之后,自動(dòng)化流水線(xiàn)進(jìn)入發(fā)布過(guò)程。首先要把部署相關(guān)的文件暫存到可靠的位置,這樣在集群自動(dòng)縮放的過(guò)程中不會(huì)依賴(lài)到其他系統(tǒng),也包括Artifactory自身。目前,部署的相關(guān)文件,包括二進(jìn)制包和Chef cookbook,都從Artifactory下載并緩存到S3存儲(chǔ)上。

Captial One如何實(shí)現(xiàn)Artifactory HA集群的自動(dòng)化維護(hù)

自動(dòng)化流水線(xiàn)的部署階段實(shí)現(xiàn)了“類(lèi)”藍(lán)/綠的部署過(guò)程,能夠保證新集群的部署不會(huì)影響到Artifactory的正常服務(wù):

1.   把用戶(hù)流量切換到容災(zāi)集群;

2.   縮容現(xiàn)有工作集群,僅保留幾個(gè)節(jié)點(diǎn)(保持和容災(zāi)集群的數(shù)據(jù)同步),不包括primary節(jié)點(diǎn)(由于Artifactory HA集群實(shí)現(xiàn)了多活的架構(gòu),每個(gè)節(jié)點(diǎn)都是支持讀/寫(xiě)的,所以縮容primary節(jié)點(diǎn)并不會(huì)影響正常服務(wù))。

3.   基于同樣的數(shù)據(jù)庫(kù)和S3存儲(chǔ),部署新的工作集群,包括新的primary節(jié)點(diǎn)。

4.   當(dāng)新的工作集群通過(guò)測(cè)試后,再把用戶(hù)流量切換回新的工作集群。

5.   之后再對(duì)容災(zāi)集群進(jìn)行升級(jí)部署。

在上述部署過(guò)程中,兩個(gè)Artifactory集群之間始終保持著數(shù)據(jù)同步,所以從用戶(hù)的角度來(lái)看,部署是無(wú)縫切換的。

Captial One如何實(shí)現(xiàn)Artifactory HA集群的自動(dòng)化維護(hù)

部署完成之后,要立即對(duì)集群中的各個(gè)應(yīng)用服務(wù)進(jìn)行檢測(cè)。Jenkins通過(guò)SSH通道訪(fǎng)問(wèn)新的服務(wù),并運(yùn)行測(cè)試,確保Artifactory、Nginx等應(yīng)用服務(wù)運(yùn)行正常,相關(guān)配置文件的內(nèi)容、位置、權(quán)限都部署正確,以及所有的網(wǎng)絡(luò)端口都正常開(kāi)通。如果檢測(cè)失敗,將會(huì)啟動(dòng)回滾過(guò)程。

Captial One如何實(shí)現(xiàn)Artifactory HA集群的自動(dòng)化維護(hù)

接下來(lái)要運(yùn)行系列的測(cè)試,確保Artifactory的各個(gè)repository都工作正常,包括能夠正確拉取Docker鏡像。同時(shí),也要檢測(cè)新的系統(tǒng)配置是否會(huì)影響制品依賴(lài)的解析,以及對(duì)不同虛擬repository的制品上傳。

Captial One如何實(shí)現(xiàn)Artifactory HA集群的自動(dòng)化維護(hù)

最后,還要進(jìn)行性能測(cè)試,確保部署后集群性能沒(méi)有下降。目前是利用Jmeter來(lái)模擬產(chǎn)品級(jí)流量,盡可能的匹配峰值流量時(shí)的API調(diào)用頻率。常規(guī)15分鐘的負(fù)載測(cè)試作為流水線(xiàn)的一部分,而可選的1小時(shí)負(fù)載測(cè)試,只有大的變更時(shí)才會(huì)執(zhí)行。

性能測(cè)試的難點(diǎn)在于流量的建模,這是因?yàn)锳rtifactory的全語(yǔ)言特性帶來(lái)的復(fù)雜性,支持多種數(shù)據(jù)包類(lèi)型,及對(duì)接相應(yīng)的包管理系統(tǒng)。通過(guò)分析Artifactory日志,獲得了用于測(cè)試的API調(diào)用序列。

Captial One如何實(shí)現(xiàn)Artifactory HA集群的自動(dòng)化維護(hù)

最后,是自動(dòng)化流水線(xiàn)當(dāng)中的回滾機(jī)制。目前實(shí)現(xiàn)了兩種回滾:

·        In-region回滾。當(dāng)部署后的測(cè)試失敗時(shí),馬上啟動(dòng)自動(dòng)化回滾,刪除新的集群,并恢復(fù)舊的集群。

·        DR容錯(cuò)回滾。當(dāng)工作集群升級(jí)成功后,或監(jiān)測(cè)幾天用戶(hù)流量,沒(méi)有問(wèn)題的時(shí)候再更新容災(zāi)集群。如果在這幾天中發(fā)現(xiàn)問(wèn)題,就會(huì)啟動(dòng)容錯(cuò)回滾:先把用戶(hù)流量切換到DR集群,然后把工作集群回滾到之前版本,數(shù)據(jù)庫(kù)回滾到之前的快照,再通過(guò)Artifactory Replication同步數(shù)據(jù),最后再把流量切換回回滾后的工作集群。

數(shù)據(jù)庫(kù)的回滾是個(gè)難題。在大版本的升級(jí)過(guò)程中,可能會(huì)有DB schema的變化,這時(shí)自動(dòng)化的數(shù)據(jù)庫(kù)回滾很難實(shí)現(xiàn),目前暫時(shí)還是通過(guò)手工操作來(lái)完成。

四、總結(jié)

Capital One通過(guò)自動(dòng)化流水線(xiàn)實(shí)現(xiàn)Artifactory HA集群的維護(hù)工作,獲得了很好的效果和收益,加速了發(fā)布過(guò)程,提供了良好的可復(fù)用性和擴(kuò)展性,也能夠啟動(dòng)有效的回滾機(jī)制。

Captial One如何實(shí)現(xiàn)Artifactory HA集群的自動(dòng)化維護(hù)

通過(guò)自動(dòng)化流水線(xiàn)的應(yīng)用也可以看出,即使如Artifactory這樣成熟的商業(yè)化產(chǎn)品,也需要對(duì)基礎(chǔ)架構(gòu)和配置進(jìn)行全面的測(cè)試。

最后,自動(dòng)化流水線(xiàn)本身也是需要持續(xù)的投資和提升的。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI