Captial One如何實現Artifactory HA集群的自動化維護


一、背景

本文整理自Hank

Hudgins,Capital One高級工程師,在JFrog

2019用戶大會上的講演《Automated Artifactory HA Pipeline》。

Captial One如何實現Artifactory HA集群的自動化維護


Capital One是美國最大的數字化銀行之一,其IT管理方法和應用技術也極為敏捷,全球擁有上萬研發,具備非常豐富的 DevOps落地經驗。在Capital One的DevOps體系當中,有很多類似於JFrog Aritfactory的HA(高可用)應用服務集群。眾所周知,HA集群的運維,如升級、擴容、打補丁等工作,要想在保持用戶服務不中斷,服務水平不降級的前提下完成,尤其是在像Capital One這麼大規模的DevOps系統當中,是十分困難、複雜,和高風險的。

Captial One如何實現Artifactory HA集群的自動化維護


Captital One使用的Artifactory為其DevOps體系中的製品及依賴管理提供了企業級解決方案,擁有工作(primary)和容災(HR)兩類HA集群。Hank所在的Artifactory維護團隊,針對Artifactory HA集群維護的難點,通過建設和運行自動化的流水線,在不影響用戶使用和服務水平的前提下,自動、高效、保質地完成了諸如版本升級、配置更新、補丁加載等工作,並且在檢測到問題時,還能夠實現自動化的回滾。在本次講演中,Hank就介紹了這套自動化流水線的組成與特色。


二、自動化流水線概述

Capital One採用這套可靠的自動化流水線,在Artifactory

HA集群的維護工作中獲得了良好的收益:

Captial One如何實現Artifactory HA集群的自動化維護


首先是通過自動化加速了維護進程,使得開發人員能夠集中精力進行研發,而不需要考慮重複性的部署和測試任務;其次,流水線的可複用性也為維護工作提供了便捷的可擴展性,通過修改相關配置,流水線就能在新的環境中進行部署;最後,流水線還提供了可以快速檢測缺陷,並實現無縫、高效回滾的部署過程。

該自動化流水線是按下述方式組成的:

Captial One如何實現Artifactory HA集群的自動化維護


首先是利用Jenkins驅動整個流水線,並集成GitHub進行觸發:

· 每個Pull Request會觸發小規模的測試以得到快速反饋。這些測試不是HA集群範圍的,但可以得到快速驗證

· 每個Merge會觸發研發環境HA集群範圍的部署,並進行相關測試;

· 標籤(Tag)被用來標記代碼更新的驗證階段和對應的環境。

其次,利用Terraform創建基礎設施,實現了“類”藍/綠的發佈。

最後,利用Chef

cookbook實現針對各種應用服務的操作和配置更新。除了Artifactory,這些應用服務還包括了相關用於反向代理的Nginx、監控的Datadog,以及日誌收集的Splunk。

三、自動化流水線組成

接下來,Hank逐一介紹了這套自動化流水線各個階段的任務及實現方式。

Captial One如何實現Artifactory HA集群的自動化維護


首先是代碼的靜態分析,針對Pull Request和Merge運行。分析的目的是對代碼結構進行快速驗證和反饋,確保其符合業界標準。流水線集成了一系列的Linter來實現針對不同類型代碼的靜態分析。

Captial One如何實現Artifactory HA集群的自動化維護


接下來是安全測試,這在流水線當中體現了“左移”的原則,能夠在真正部署之前儘早的檢測和發現潛在的安全漏洞。目前的安全測試分兩類,一類是靜態安全測試,即通過分析代碼結構來發現如SQL注入、Cross-site腳本等安全隱患;另一類是JFrog Xray提供的依賴測試,檢測三方依賴包中是否包含已知安全漏洞,並推薦對應的修復版本。

Captial One如何實現Artifactory HA集群的自動化維護


下一步是單元/集成測試,用於驗證代碼的更新不會破壞預期的功能。這一步測試也可以應用於Artifactory的Custom user plugin的測試。流水線通過啟動包含Artifactory的容器,安裝並測試這些custom plugin,確保其正確工作,而不需要連接到真正的Artifactory HA集群。

Captial One如何實現Artifactory HA集群的自動化維護


在完成了上述初步的測試之後,自動化流水線進入發佈過程。首先要把部署相關的文件暫存到可靠的位置,這樣在集群自動縮放的過程中不會依賴到其他系統,也包括Artifactory自身。目前,部署的相關文件,包括二進制包和Chef cookbook,都從Artifactory下載並緩存到S3存儲上。

Captial One如何實現Artifactory HA集群的自動化維護


自動化流水線的部署階段實現了“類”藍/綠的部署過程,能夠保證新集群的部署不會影響到Artifactory的正常服務:

1. 把用戶流量切換到容災集群;

2. 縮容現有工作集群,僅保留幾個節點(保持和容災集群的數據同步),不包括primary節點(由於Artifactory HA集群實現了多活的架構,每個節點都是支持讀/寫的,所以縮容primary節點並不會影響正常服務)。

3. 基於同樣的數據庫和S3存儲,部署新的工作集群,包括新的primary節點。

4.當新的工作集群通過測試後,再把用戶流量切換回新的工作集群。

5. 之後再對容災集群進行升級部署。

在上述部署過程中,兩個Artifactory集群之間始終保持著數據同步,所以從用戶的角度來看,部署是無縫切換的。

Captial One如何實現Artifactory HA集群的自動化維護


部署完成之後,要立即對集群中的各個應用服務進行檢測。Jenkins通過SSH通道訪問新的服務,並運行測試,確保Artifactory、Nginx等應用服務運行正常,相關配置文件的內容、位置、權限都部署正確,以及所有的網絡端口都正常開通。如果檢測失敗,將會啟動回滾過程。

Captial One如何實現Artifactory HA集群的自動化維護


接下來要運行系列的測試,確保Artifactory的各個repository都工作正常,包括能夠正確拉取Docker鏡像。同時,也要檢測新的系統配置是否會影響製品依賴的解析,以及對不同虛擬repository的製品上傳。

Captial One如何實現Artifactory HA集群的自動化維護


最後,還要進行性能測試,確保部署後集群性能沒有下降。目前是利用Jmeter來模擬產品級流量,儘可能的匹配峰值流量時的API調用頻率。常規15分鐘的負載測試作為流水線的一部分,而可選的1小時負載測試,只有大的變更時才會執行。

性能測試的難點在於流量的建模,這是因為Artifactory的全語言特性帶來的複雜性,支持多種數據包類型,及對接相應的包管理系統。通過分析Artifactory日誌,獲得了用於測試的API調用序列。

最後,是自動化流水線當中的回滾機制。目前實現了兩種回滾:

· In-region回滾。當部署後的測試失敗時,馬上啟動自動化回滾,刪除新的集群,並恢復舊的集群。

· DR容錯回滾。當工作集群升級成功後,或監測幾天用戶流量,沒有問題的時候再更新容災集群。如果在這幾天中發現問題,就會啟動容錯回滾:先把用戶流量切換到DR集群,然後把工作集群回滾到之前版本,數據庫回滾到之前的快照,再通過Artifactory

Replication同步數據,最後再把流量切換回回滾後的工作集群。


數據庫的回滾是個難題。在大版本的升級過程中,可能會有DB schema的變化,這時自動化的數據庫回滾很難實現,目前暫時還是通過手工操作來完成。


四、總結

Capital

One通過自動化流水線實現Artifactory HA集群的維護工作,獲得了很好的效果和收益,加速了發佈過程,提供了良好的可複用性和擴展性,也能夠啟動有效的回滾機制。

Captial One如何實現Artifactory HA集群的自動化維護


通過自動化流水線的應用也可以看出,即使如Artifactory這樣成熟的商業化產品,也需要對基礎架構和配置進行全面的測試。

最後,自動化流水線本身也是需要持續的投資和提升的。


更多精彩內容可以專注我們的在線課堂

微信搜索公眾號:jfrogchina 獲取課程通知


分享到:


相關文章: