亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

部署Jenkins服務時如何保障服務的高可用性呢?

OSC開源社區(qū) ? 來源:vivo互聯(lián)網(wǎng)技術 ? 2023-02-14 17:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文從目前業(yè)界實現(xiàn)Jenkins的高可用的實現(xiàn)方案,分析各方案的優(yōu)缺點,引入vivo目前使用的Jenkins高可用方案,以及目前Jenkins資源的調(diào)度方案的設計實踐和目前的落地運行效果。

一、前言

現(xiàn)在的企業(yè)很多都在用Jenkins做持續(xù)集成,各個業(yè)務端都依靠Jenkins,vivo Devops也是使用Jenkins來進行持續(xù)構建,部署Jenkins服務時如何保障服務的高可用變得尤為重要。

下面是目前Jenkins存在的一些問題。

Jenkins本身是單體的,即只能有一個Jenkins Master。雖然你也可以在多臺機器上部署多個Jenkins Master,但這些Master之間沒有聯(lián)系,都是各自把任務交給手下的slave去執(zhí)行,沒有任何交集。
也許某個master下的slave很忙,而另一個master下的slave卻很閑,資源得不到充分利用。

當其中一個slave宕機之后,該slave上的運行的job任務沒有版本重新進行分配,需要用戶重新執(zhí)行。并且slave節(jié)點離線之后沒有通知管理員。

當系統(tǒng)業(yè)務量比較大的時候業(yè)務請求集中在Jenkins Master上,會對Jenkins造成壓力,甚至的造成Jenkins服務不可用。

當有job任務在jenkins Master上隊列排隊的時候,Jenkins Master宕機后,隊列任務不可持久化。

Jenkins Workspace沒有自動清理功能,會導致磁盤空間不足,任務執(zhí)行不了的情況。

基于以上情況,vivo Devops對Jenkins的部署架構進行優(yōu)化搭建,并且配套了一套Jenkins資源調(diào)度系統(tǒng)用于管理Jenkins資源。

二、業(yè)界實現(xiàn)

目前業(yè)界也包含一些Jenkins 高可用的設計方式,但是并不能完全的滿足解決上述問題,比如:

2.1 方案一 Gearman + Jenkins

這是OpenStack團隊使用的方案。這個方案使用了gearman, gearman是個任務分發(fā)框架。

需要在每個Master上安裝好gearman的插件,并配置好能連接到gearman server,同時在每個Master必須建立相同的job。

之后運行任務的流程如下:

gearman worker運行在各個Jenkins Master中等待gearman server分發(fā)任務;

gearman client向gearman server發(fā)出運行job的請求;

gearman server通知各個gearman worker有任務拉,第一個閑著的worker會接受任務,如果所有的worker都忙,則放入gearman的任務隊列,得worker空閑時再分配;

gearman worker閑下來后會從任務隊列里取job來執(zhí)行,執(zhí)行完之后,將結果發(fā)回給gearman server;

gearman server將結果返回給 gearman client。

優(yōu)點:

這樣各個salver資源可以得到充分利用,某個master掛掉另外的master可以繼續(xù)服務。

弊端:

每個master的slave必須配置一致,否則會造成job調(diào)度錯誤,同時會造成一些資源的浪費。當一個master出現(xiàn)問題,該master的任務不會進行自動重新分配。

2.2 方案二 改造Jenkins的文件存儲方式

目前Jenkins的配置文件都是直接在硬盤上以文件形式存儲的,你在JENKINS_HOME的個文件夾下能看到各種.xml文件。

有些公司在Jenkins上進行二次開發(fā),將Jenkins的數(shù)據(jù)存儲方式改為數(shù)據(jù)庫存儲,這樣前端可以起多個Jenkins服務,后端連相同的數(shù)據(jù)庫即可。數(shù)據(jù)庫也有比較成熟的高可用方案。

優(yōu)點:

可以達到Jenkins的高可用也就是某個master掛掉另外的master可以繼續(xù)服務。

弊端:

需要對Jenkins進行二次開發(fā),使用數(shù)據(jù)庫會降低讀取資源效率下降。

2.3方案三 最簡單的Jenkins一主一備模式

平時讓Jenkins A機器提供服務,并使用SCM Sync configuration plugin保存數(shù)據(jù),JenkinsA機器修改配置后觸發(fā)Jenkins B更新配置,一旦Jenkins A出現(xiàn)問題掛掉后,切換到備機Jenkins B上。

優(yōu)點:

可以達到Jenkins的高可用,當master宕機后會進行切換到備機上。

弊端:

會有一批Jenkins備機存在資源浪費,切換master時間過長,會導致有段時間Jenkins服務不可用。

三、vivo Jenkins Scheduler系統(tǒng)目標

由于目前業(yè)界的一些實現(xiàn)還不能完全的滿足我們目前的需求,所以我們進行了vivo jenkins scheduler系統(tǒng)的設計與實現(xiàn)。該系統(tǒng)需要達到如下的目的:

提升整個構建服務可靠性時長。

保證jenkins集群的高可用,解決目前master-slave的單點問題,保證整個構建服務的可靠性時長。

降低災難時服務恢復時長。

①提供精準流控方式,在jenkins構建出現(xiàn)請求量過高的時候可以進行流控和持久化操作,減少對目前系統(tǒng)的沖擊。

②當系統(tǒng)壓力減少后,放開流控可以快速的對堆積的請求進行分配執(zhí)行。

有效分配任務至各個子節(jié)點,保證資源的有效利用。

能保證災難時的及時切換任務至可用節(jié)點上,同時能快速的通知管理員進行處理。

能進行數(shù)據(jù)的可視化分析,能提供一系列幫助改善開發(fā)效率的視圖,比如構建時長報表、構建量報表等。

四、 vivo Jenkins Scheduler設計

該系統(tǒng)我們從兩大部分進行了設計,首先,我們不采用原生的Jenkins部署方案,而是采用全master的方式。第二,設計并開發(fā)了一套用于管理Jenkins集群的調(diào)度系統(tǒng)。

五、底層 Jenkins 工具部署方案

不采用目前單master的搭建方案,采用多master的搭建方案,master下不進行掛載slave機器,任務直接有master進行處理,master之間的關系、任務分配、離線、插件安裝等由調(diào)度系統(tǒng)進行管理。這樣由于vivo Jenkins Scheduler系統(tǒng)為高可用的,解決了目前Jenkins的單點問題。

fc3fde1c-ac41-11ed-bfe3-dac502259ad0.png

六、系統(tǒng)架構圖

fc53a488-ac41-11ed-bfe3-dac502259ad0.png

七、系統(tǒng)說明

7.1 API-Gateway

主要提供系統(tǒng)的外部請求,網(wǎng)關系統(tǒng),功能包含:

權限校驗:校驗用戶發(fā)送集群管理系統(tǒng)的請求的權限。

智能路由:接收外部一切請求,并轉發(fā)到后端的外服上去。

限流:與監(jiān)控線程配合(當構建請求達到某個閾值時),進行限流操作。

API日志統(tǒng)一收集:類似于一個aspect切面,記錄接口的進入和出去時的相關日志。

數(shù)據(jù)處理:對請求的參數(shù)進行數(shù)據(jù)的轉換處理。

7.2 事件中心

是整個系統(tǒng)通信調(diào)用的主要模塊,采用的是Spring的Event機制實現(xiàn),主要核心事件如下:

Jenkins注冊事件

(EVENT_REGIST_JENKINS)

Jenkins啟動后,通過自定的插件會向系統(tǒng)發(fā)送注冊請求時,系統(tǒng)接收到后會觸發(fā)Jenkins管理模塊將Jenkins的信息注冊至調(diào)度系統(tǒng)中。

Jenkins宕機事件

(EVENT_DOWN_JENKINS) :

監(jiān)控管理輪詢檢查Jenkins狀態(tài),當發(fā)現(xiàn)有Jenkins宕機的情況會觸發(fā)該事件,Jenkins管理模塊處理將Jenkins的信息狀態(tài)設置為不可用狀態(tài),從而是任務不能分配至該臺jenkins。

任務從分配事件 (EVENT_JOB_REDO) :

當Jenkins宕機后,如果該臺jenkins上存在未執(zhí)行完的任務時候,由job監(jiān)控模塊觸發(fā),job管理莫管處理,會對該Jenkins上未執(zhí)行的job進行重新分配。

任務接受事件 (EVENT_JOB_RECIVE) :

當job管理模塊接受到創(chuàng)建請求,會觸發(fā)該事件,由job管理模塊放入Redis執(zhí)行隊列。

任務執(zhí)行事件 (EVENT_JOB_EXECUTE) :

job管理模塊中的執(zhí)行線程(10s執(zhí)行一次,會從Redis隊列中彈出任務),彈出任務后觸發(fā)該事件,由調(diào)度中心選取合適的jenkins進行執(zhí)行。

7.3 調(diào)度中心

是整個系統(tǒng)的核心模塊,主要的功能是進行執(zhí)行job時候能選取合適的jenkins進行處理任務,包含兩個核心算法

7.3.1 Jenkins分組算法

每臺jenkins都可以使用標簽的方式,打上多個標簽,比如jenkins可以構建java程序,使用的構建工具可以是maven和gradle,這個時候我們就可以給其打上java、maven、gradle三個標簽。

標簽的維度主要有以下幾個:

標簽配置: 判斷構建配置是否配置了標簽,根據(jù)標簽選擇對應標簽的Jenkins,比如配置了(docker等)。

構建語言: 根據(jù)構建配置的語言,比如Java、C++、Python、Go等。

構建工具和版本: 比如Maven、gradle、Ant,Cmark、Blade等。

JDK版本:比如JDK7、JDK8等。

Go語言版本:比如1.15.x.、1.16.x等。

GCC版本:如6.x、4.x等。

Python版本:2.x、3.x等。

是否存活:判斷Jenkins是否存活,如果宕機直接過濾。

(可選策略)選擇執(zhí)行過該job的Jenkins,減少下載代碼的過程:(第一次構建還是會比較慢,可以采用預執(zhí)行的方式,在配置構建配置的時候,就預先執(zhí)行一次,這樣在用戶執(zhí)行的時候就使用該job執(zhí)行過得workspace,減少代碼下載的時間)。

(可選策略)根據(jù)job的構建的平均構建時長,如果構建時長達到某個配置閾值時,優(yōu)先選擇構建器空閑多的Jenkins進行執(zhí)行,并指出Jenkins的鎖定功能。其他的job不允許分配上來。

如果我們給Jenkins打上標簽,那么我們就可以使用標簽為維度將Jenkins進行分組,并且存入至Redis中緩存,方便后續(xù)選取Jenkins用來執(zhí)行任務:

fc88192a-ac41-11ed-bfe3-dac502259ad0.png

7.3.2 Jenkins選取算法

當Jenkins分組好了后,我們接受到執(zhí)行的job的信息就可以使用Jenkins選取算法進行快速的選取合適的Jenkins進行處理job,如下圖所示。

其中l(wèi)abel子線程、語言子線程……就是我們上面的Jenkins分組的維度,有多少維度,那么這里就會有多少子線程處理。

構建任務進入主線程,然后主線程會按照分組維度分組操作并進行過濾,然后獲取到每個分組中合適的Jenkins,再進行取交集(這個時候就獲取到可以執(zhí)行該構建任務的Jenkins了),在判斷是否需要經(jīng)過可選策略,最終得到Jenkins。

fc99544c-ac41-11ed-bfe3-dac502259ad0.png

7.4 流控管理&隊列管理

調(diào)度系統(tǒng)中的的任務接受采用的是隊列的方式實現(xiàn),當系統(tǒng)請求量達到閥后,系統(tǒng)將不會進入Redis隊列,會將請求持久化至MySQL。

后續(xù)如果有請求過來,job管理模塊會檢查數(shù)據(jù)庫MySQL中是否有請求,如果有請求,會將請求放入Redis隊列,如果沒有請求就會將當前請求放入Redis隊列,具體流程如下:

fca85596-ac41-11ed-bfe3-dac502259ad0.png

其中基于Redis實現(xiàn)的消息隊列的時序圖如下:

fcbe50b2-ac41-11ed-bfe3-dac502259ad0.png

7.5 回調(diào)中心

該模塊主要是監(jiān)控任務的狀態(tài),當任務開始執(zhí)行、中斷執(zhí)行、執(zhí)行成功、執(zhí)行失敗的時候進行通知業(yè)務并存儲數(shù)據(jù),用于保存構建記錄,方便后續(xù)數(shù)據(jù)的統(tǒng)計,用來完成數(shù)據(jù)的可視化。

八、實施效果

目前該系統(tǒng)已經(jīng)投入生產(chǎn)環(huán)境運行,Jenkins任務已采用調(diào)度系統(tǒng)進行調(diào)度執(zhí)行,運行穩(wěn)定,運行效果。

fcd9b9b0-ac41-11ed-bfe3-dac502259ad0.png

fcef4d66-ac41-11ed-bfe3-dac502259ad0.png

九、后續(xù)展望

隨著vivo Jenkins 調(diào)度系統(tǒng)的功能慢慢完善,Jenkins的機器也越來越多,目前還大多數(shù)運行在虛擬機上,從資源利用率和業(yè)務發(fā)布效率來看,未來的業(yè)務發(fā)布形態(tài)將會是以容器為主。目前公司也在大力發(fā)展k8s的容器生態(tài)建設,

所以我們希望將Jenkins工具后期進行容器化、池化,在提高資源利用率和發(fā)布效率的同時也可以為用戶提供可靠的、簡潔的、穩(wěn)定調(diào)度執(zhí)行。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)存儲

    關注

    5

    文章

    1009

    瀏覽量

    52353
  • python
    +關注

    關注

    57

    文章

    4851

    瀏覽量

    89358
  • MYSQL數(shù)據(jù)庫

    關注

    0

    文章

    96

    瀏覽量

    10177
  • API串口
    +關注

    關注

    0

    文章

    13

    瀏覽量

    4932
  • gcc編譯器
    +關注

    關注

    0

    文章

    78

    瀏覽量

    3900

原文標題:vivo自研Jenkins資源調(diào)度系統(tǒng)設計與實踐

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Arbor Networks推出Pravail可用性保護系統(tǒng)

    Arbor Networks公司宣布推出Arbor Pravail可用性保護系統(tǒng)(Availability Protection System, APS),新產(chǎn)品系列可保障互聯(lián)網(wǎng)數(shù)據(jù)中心(IDC)邊緣的安全,抵御可用性攻擊(尤其
    發(fā)表于 09-22 10:39 ?1262次閱讀

    企業(yè)服務器網(wǎng)絡的可用性設計

    企業(yè)服務器網(wǎng)絡的可用性設計 隨著企業(yè)信息系統(tǒng)的集中化和虛擬化,作為企業(yè)連接服務器和企業(yè)網(wǎng)絡主干的服務器群網(wǎng)絡必須具有高性能、可擴展性和
    發(fā)表于 04-29 11:09

    YARN群集可用性配置和驗證

    FlinkYarn 模式可用性配置
    發(fā)表于 06-21 16:45

    評估可用性機制

    評估可用性機制
    發(fā)表于 09-27 06:31

    評估可用性機制白皮書

    評估可用性機制(白皮書)
    發(fā)表于 10-10 09:09

    Jenkins遠程部署Linux服務器的過程

    1、Jenkins遠程部署Linux服務器  之前在Jenkins上也有一些使用經(jīng)驗了,但是都是使用團隊配置好的Jenkins,自己只需要管
    發(fā)表于 11-18 18:12

    基于開源系統(tǒng)的可用性集群應用

    隨著硬件價格的逐步下降,PC 服務器已經(jīng)不是什么高端設備了。而近些年虛擬化的發(fā)展,架設一臺服務器已經(jīng)是很容易的事情。通過組建集群來對關鍵服務提供
    發(fā)表于 07-07 17:47 ?29次下載
    基于開源系統(tǒng)的<b class='flag-5'>高</b><b class='flag-5'>可用性</b>集群應用

    云計算平臺對PACS的可用性支持

    介紹了云計算平臺對PACS的可用性支持,云計算平臺通過強大的資源配置、動態(tài)擴展以及對虛擬服務器的高效的備份恢復能力,提高了PACS的可用性
    發(fā)表于 01-04 14:55 ?0次下載

    如何確保冗余云存儲的可用性

    正如可用性和靈活性是本地存儲應用的重要性能要素一樣,這兩個性能指標對于使用云存儲服務的組織也是同等重要的。
    的頭像 發(fā)表于 06-27 10:35 ?4312次閱讀

    Sentinel如何通過限流實現(xiàn)服務可用性

    控制,可能會導致級聯(lián)故障,并影響到服務可用性,因此如何對流量進行合理控制,成為保障服務穩(wěn)定性的關鍵。在復雜的生產(chǎn)環(huán)境下可能
    發(fā)表于 08-20 16:19 ?486次閱讀

    如何使用馬爾可夫鏈與服務質(zhì)量提高網(wǎng)絡可用性的性能模型說明

    針對網(wǎng)絡可用性在不同網(wǎng)絡業(yè)務中的服務質(zhì)量( QoS)存在差異,且與性能花費相互制約的問題,引入了馬爾可夫鏈理論,在定義了基于業(yè)務開銷最小的服務能力匹配度的基礎上構建了基于馬爾可夫鏈和QoS指標的網(wǎng)絡
    發(fā)表于 12-19 14:53 ?4次下載
    如何使用馬爾可夫鏈與<b class='flag-5'>服務</b>質(zhì)量提高網(wǎng)絡<b class='flag-5'>可用性</b>的性能模型說明

    如何確保SQL Server在云端的可用性

    不知您是否意識到,云計算讓那些提供關鍵服務的SQL Server部署方案獲得了可用性(HA)和災難恢復(DR)能力。
    的頭像 發(fā)表于 03-18 14:17 ?2216次閱讀

    在線服務提供商利用Brocade提高數(shù)據(jù)中心的可用性和可靠

    電子發(fā)燒友網(wǎng)站提供《在線服務提供商利用Brocade提高數(shù)據(jù)中心的可用性和可靠.pdf》資料免費下載
    發(fā)表于 08-30 09:55 ?0次下載
    在線<b class='flag-5'>服務</b>提供商利用Brocade提高數(shù)據(jù)中心的<b class='flag-5'>可用性</b>和可靠<b class='flag-5'>性</b>

    華為云耀云服務器 L 實例:保障網(wǎng)站的穩(wěn)定性和可用性

    在如今這個高度依賴互聯(lián)網(wǎng)的時代,互聯(lián)網(wǎng)應用的穩(wěn)定性和可用性顯得至關重要。然而,要實現(xiàn)這一目標,企業(yè)需要投入大量的人力、物力和財力??紤]到各種成本和技術難度,許多企業(yè)選擇將應用遷移到云上,希望云服務
    的頭像 發(fā)表于 11-21 09:14 ?622次閱讀
    華為云耀云<b class='flag-5'>服務</b>器 L 實例:<b class='flag-5'>保障</b>網(wǎng)站的穩(wěn)定性和<b class='flag-5'>高</b><b class='flag-5'>可用性</b>

    香港服務部署Windows集群服務的網(wǎng)絡拓撲設計與實現(xiàn)-可用性架構方案

    ,重點講解網(wǎng)絡拓撲設計的3種典型模型及其適用場景,并提供香港本地化部署的實操建議。如何在遵守《網(wǎng)絡安全法》要求前提下實現(xiàn)多節(jié)點集群的可用性?冗余網(wǎng)絡配置如何平衡成本與效能?本文將為您揭曉具體實施路徑。 香港機房選址對網(wǎng)絡架構的
    的頭像 發(fā)表于 08-26 17:16 ?534次閱讀