99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

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

云原生場景下實現(xiàn)編譯加速

OSC開源社區(qū) ? 來源:OSCHINA 社區(qū) ? 2023-02-09 11:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景

云原生下的流水線是通過啟動容器來運行具體的功能步驟,每次運行流水線可能會被調(diào)度到不同的計算節(jié)點上。這會導(dǎo)致一個問題:容器運行完是不會保存數(shù)據(jù)的,每當(dāng)流水線重新運行時,又會重新拉取代碼、編譯代碼、下載依賴包等等。在云原生場景下,不存在本地宿主機編譯代碼、構(gòu)建鏡像時緩存的作用,大大延長了流水線運行時間,浪費很多不必要的時間、網(wǎng)絡(luò)和計算成本。在許多流水線場景中,同一條流水線的多次執(zhí)行之間是有關(guān)聯(lián)的。如果能夠用到上一次的執(zhí)行結(jié)果,則可以大幅縮短執(zhí)行時間。為了提高用戶使用流水線的體驗,我們加入支持緩存的功能,掛接遠程儲存管理構(gòu)建緩存,可以實現(xiàn)同一個項目的編譯依賴復(fù)用,在同一條流水線的多次運行中,共享同一份緩存。

目標(biāo)

通過實現(xiàn)云原生流水線的緩存技術(shù),實現(xiàn)代碼編譯的緩存復(fù)用,平均加速流水線 3~5 倍;

實現(xiàn)方案

我們將需要進行緩存的文件,使用 zstd 的方式進行壓縮,通過遠程掛載 cfs,將構(gòu)建的緩存持久化到 cfs 上的指定位置。當(dāng)下一次構(gòu)建開始的時候,判斷緩存是否被命中,如果命中緩存,我們從 cfs 上的指定位置 pull 對應(yīng)的緩存壓縮包,解壓到相應(yīng)目錄下。

所用工具 - cfs+zstd

非用戶自定義鏡像,將需要的工具打到引擎的基礎(chǔ)鏡像中,作為所有鏡像的基礎(chǔ)工具。用戶自定義鏡像,不和用戶鏡像進行強綁定,如果需要使用緩存功能,可以使用 Restore 緩存原子和 Save 緩存原子,設(shè)置緩存 key 和緩存目錄,實現(xiàn)緩存功能。

1 cfs 遠程掛載

?將工具和啟動腳本,配置文件打到基礎(chǔ)鏡像?在開啟緩存的位置,啟動腳本,開始掛載 cfs
_, err = c.ScriptAction.Sh([]string{
    "sh",
"-c",
"modprobe fuse;cd /export/servers/tools/cfs;sudo ./cfs-client-randomwrite -c fuse.json",
})

2 zstd 壓縮

針對現(xiàn)有的幾種壓縮方式進行了性能對比,最后選用了 zstd 進行壓縮。Zstd,全稱 Zstandard,是 Facebook 于 2016 年開源的新無損壓縮算法。Zstd 還可以以壓縮速度為代價提供更強的壓縮比,速度與壓縮率的比重可通過增量進行配置。與 zlib、lz4、xz 等當(dāng)前流行的壓縮算法不同,Zstd 尋求一種壓縮性能與壓縮率通吃的方案,而實際上它也確實做到了。在由官方所列出的表格中,可以看到,Zstd 不僅具備優(yōu)秀的壓縮性能,在壓縮率上也有非常亮眼的表現(xiàn)。在過去的兩年里,Linux 內(nèi)核、HTTP 協(xié)議、以及一系列的大數(shù)據(jù)工具(包括 Hadoop 3.0.0,HBase 2.0.0,Spark 2.3.0,Kafka 2.1.0)等都已經(jīng)加入了對 zstd 的支持。常見的壓縮算法性能對比:8b24e664-a813-11ed-bfe3-dac502259ad0.png壓縮包大小對比:
依賴包的大小 465M 壓縮效率
tar 壓縮 423M 14s 左右
zstd 壓縮 205M 1s 左右

緩存的實現(xiàn)

我們借鑒了 github cache action,zadig,gitlab 等緩存的處理方式,同時結(jié)合服務(wù)自身的特點將整體分成三步

?檢查是否命中緩存:根據(jù)緩存 key,判斷緩存是否命中

緩存 key 緩存的唯一標(biāo)識
不同語言編譯原子 根據(jù)下載代碼的代碼庫地址自動獲取 設(shè)置的緩存 key:home_auth/home-auth-center
用戶自定義鏡像 自定義緩存 key

?pull 緩存

當(dāng)緩存命中后,根據(jù)緩存路徑,找到掛載到 cfs 上的緩存壓縮包,解壓到指定的緩存目錄下

?push 緩存:將依賴包進行壓縮,放到 cfs 的掛載目錄下

8b4732f0-a813-11ed-bfe3-dac502259ad0.png
依賴包的大小 465M
tar 壓縮 423M
zstd 壓縮 205M
8b67b3e0-a813-11ed-bfe3-dac502259ad0.png

緩存的使用限制和回收策略

使用限制

目前存儲緩存數(shù)沒有限制,存儲庫中所有緩存的總大小限制是根據(jù)申請的 cfs 的大小限制:20G。

回收策略

我們會刪除 7 天內(nèi)未被訪問的任何緩存。利用 etcd 的 watch 機制,實現(xiàn)緩存的回收。etcd 可以Watch指定的鍵、前綴目錄的更改,并對更改時間進行通知。BASE 引擎中,緩存的清除策略借助 etcd 來實現(xiàn)。緩存過期策略:在編譯加速的實現(xiàn)中,每個需要緩存的項目都有對應(yīng)的緩存 key,通過 etcd 監(jiān)控 key,并且設(shè)置過期時間,例如 7 天,如果在 7 天之內(nèi)再次命中 key,則通過 lease 進行續(xù)約;7 天之內(nèi) key 都沒有被使用,key 就會過期刪除,通過監(jiān)聽對應(yīng)的前綴,在過期刪除的時候,調(diào)用刪除緩存的方法。
storage.Watch("cache/",
func(id string) {
//do nothing
},
func(id string) {
CleanCache(id)
})

不同技術(shù)棧的最佳實踐

1 Java

以 Maven 構(gòu)建工具為例,其默認(rèn)配置文件位于 conf/settings.xml 文件中,默認(rèn)指定環(huán)境變量 $M2_HOME 來設(shè)置緩存目錄,這樣同一條流水線多次執(zhí)行可以復(fù)用 ${M2_HOME}/.m2 目錄 (緩存目錄),甚至同一個應(yīng)用下的多個分支之間都可以使用同一個緩存目錄,就像本地構(gòu)建一樣。
? BASE 執(zhí)行
無緩存 平均時間:5.26min
有緩存 平均時間:41.462s
提升效率 提升 87.3%
緩存命中率 接近 100%

2 NodeJs

在 nodejs 編譯中,我們的緩存目錄是當(dāng)前用戶空間,針對 node_modules 文件進行壓縮打包,push 到 cfs;如果緩存命中,從 cfs 上 pull 并且解壓到當(dāng)前用戶空間下,恢復(fù)緩存。

使用舉例

? BASE 執(zhí)行
無緩存 平均時間:58s
有緩存 平均時間:29s
提升效率 提升 50%
緩存命中率 接近 100%

3 Golang 編譯

Golang 緩存路徑通過$GOCACHE環(huán)境變量控制,將$GOCACHE的內(nèi)容壓縮成 zstd 的包,上傳到 cfs 的指定路徑下。pull 緩存的時候,拉取到對應(yīng)的$GOCACHE。
? BASE 執(zhí)行
無緩存 平均時間:117s
有緩存 平均時間:18s
提升效率 提升 84.6%
緩存命中率 接近 100%

4 GCC 編譯

我們使用 ccache 進行緩存實現(xiàn)。ccache(“compilercache” 的縮寫)是一個編譯器緩存,該工具會高速緩存編譯生成的信息,并在編譯的特定部分使用高速緩存的信息。ccache 的緩存目錄:CCACHE_DIR,我們將這個目錄下的文件進行壓縮,push 到 cfs,當(dāng)?shù)诙芜\行并且命中緩存,從 cfs 上 pull 并解壓到 CCACHE_DIR 指定的目錄下。

總結(jié)

在不同語言的編譯原子內(nèi)部,默認(rèn)開啟緩存的設(shè)置。第一次運行流水線的時候,會進行依賴的下載,第二次運行流水線,會命中緩存,無需進行依賴的下載,提高了流水線執(zhí)行的效率。緩存默認(rèn)保存 7 天。

自定義鏡像進行緩存的最佳實踐

為了滿足用戶使用自定義鏡像的方式觸發(fā)流水線,我們增加了兩個通用的緩存原子。Restore 緩存:恢復(fù)緩存Save 緩存:保存緩存8b794c86-a813-11ed-bfe3-dac502259ad0.png在編譯之前,添加 Restore 緩存原子8b85de7e-a813-11ed-bfe3-dac502259ad0.png在編譯之后,添加 Save 緩存原子8b9c72ce-a813-11ed-bfe3-dac502259ad0.png

使用舉例

在 maven 編譯原子中,默認(rèn)開啟了 maven 編譯的緩存;同時還有 nodejs 的編譯構(gòu)建,所以我們增加了 restore 原子和 save 原子8bc13744-a813-11ed-bfe3-dac502259ad0.png
? BASE 執(zhí)行
無緩存 平均時間:21min57s 其中 maven: 17min83s nodejs: 4min19s
有緩存 平均時間:4min20s 其中 maven: 1min10s nodejs: 2min36s
緩存效率提升 maven:93.7% nodejs:39.8%(nodejs 編譯中有包含單元測試)
緩存命中率 接近 100%

未來規(guī)劃

?不同編譯原子,向用戶開放配置,如是否開啟緩存,設(shè)置緩存 key

?實現(xiàn)不同語言編譯原子增量 push 緩存功能

審核編輯 :李倩


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

    關(guān)注

    0

    文章

    124

    瀏覽量

    26638
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    679

    瀏覽量

    34033
  • 云原生
    +關(guān)注

    關(guān)注

    0

    文章

    261

    瀏覽量

    8278

原文標(biāo)題:云原生場景下實現(xiàn)編譯加速

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    性能提升1倍,成本直降50%!基于龍蜥指令加速的下一代云原生網(wǎng)關(guān)

    不打折的情況,用戶部署網(wǎng)關(guān)的資源成本直降 50%。(圖 8/云原生網(wǎng)關(guān))MSE 云原生網(wǎng)關(guān)優(yōu)勢:網(wǎng)關(guān)直連業(yè)務(wù) Pod IP,不經(jīng)過傳統(tǒng) Cluster IP,RT 更低。支持 HTTPS 硬件
    發(fā)表于 08-31 10:46

    只需 6 步,你就可以搭建一個云原生操作系統(tǒng)原型

    的時候,會發(fā)生什么故事?本文整理自 [2022 年阿里巴巴開源開放周技術(shù)演講],讓作者帶我們走進這場技術(shù)盛宴。本次的分享主題圍繞三個方面展開:首先簡要介紹一[龍蜥云原生 SIG(Special
    發(fā)表于 09-15 14:01

    云原生應(yīng)用中的“云”指的是什么?

    云原生應(yīng)用是獨立的小規(guī)模松散耦合服務(wù)的集合,旨在提供備受認(rèn)可的業(yè)務(wù)價值,例如快速融合用戶反饋以實現(xiàn)持續(xù)改進。簡而言之,通過云原生應(yīng)用開發(fā),您可以加速構(gòu)建新應(yīng)用,優(yōu)化現(xiàn)有應(yīng)用并在
    的頭像 發(fā)表于 11-27 17:24 ?2482次閱讀

    引領(lǐng)云原生2.0時代,賦能新云原生企業(yè)

    十年云計算浪潮,DevOps、容器、微服務(wù)等技術(shù)飛速發(fā)展,云原生成為潮流。Forrester首席分析師戴鯤表示,云原生是企業(yè)數(shù)字化轉(zhuǎn)型的基礎(chǔ),企業(yè)需要建立云原生優(yōu)先的戰(zhàn)略,構(gòu)建一體化
    的頭像 發(fā)表于 12-11 16:04 ?2015次閱讀

    云原生解決了什么問題?

    盡管Heroku、Pivotal、CNCF等眾多廠商都對云原生下了不同的定義,但從本質(zhì)上考慮,因為云原生構(gòu)建了易觀測松耦合容錯性高的系統(tǒng),所以其始終都在追求著三大目標(biāo):加速創(chuàng)新、降低成本、提高效率。
    的頭像 發(fā)表于 12-15 17:15 ?7139次閱讀
    <b class='flag-5'>云原生</b>解決了什么問題?

    如何更好地構(gòu)建云原生應(yīng)用生態(tài),推動業(yè)界更好地落地云原生

    信息通信研究院相關(guān)調(diào)研數(shù)據(jù)顯示,2019年我國云原生產(chǎn)業(yè)市場規(guī)模已達350.2億元。數(shù)字經(jīng)濟大潮,傳統(tǒng)行業(yè)的數(shù)字化轉(zhuǎn)型成為云原生產(chǎn)業(yè)發(fā)展的強勁驅(qū)動力,“新基建”帶來的萬億級資本投入,也將在未來幾年推動
    的頭像 發(fā)表于 12-24 11:13 ?2840次閱讀

    解讀騰訊云原生 鵝廠云原生的“新路”與“歷承”

    在云計算產(chǎn)業(yè)中,云原生是一個長期討論的“老話題”。而在今年新基建、產(chǎn)業(yè)數(shù)字化的宏觀背景,云原生的應(yīng)用主體開始擴張,關(guān)于這條技術(shù)路徑的討論也重新火熱了起來。 云原生突然“翻紅”的原因,
    的頭像 發(fā)表于 12-28 18:10 ?3721次閱讀

    云原生技術(shù)的華為云DevOps實踐之路

    和重視。 同樣,為了應(yīng)對業(yè)務(wù)的敏捷發(fā)布,應(yīng)用平臺的彈性訴求,商業(yè)環(huán)境的變化,云原生時代已到來,云原生技術(shù)已經(jīng)應(yīng)用到企業(yè)核心業(yè)務(wù)。 云原生與DevOps是什么關(guān)系?其技術(shù)優(yōu)勢如何與DevOps結(jié)合,才能更加高效便捷的實施呢?
    的頭像 發(fā)表于 12-06 16:52 ?3000次閱讀

    華為云中什么是云原生服務(wù)中心

    、統(tǒng)一存儲、全域分發(fā),幫助您簡化云原生服務(wù)的生命周期管理。 UCS深度集成云原生服務(wù)中心的功能,可真正實現(xiàn)服務(wù)的開箱即用,有效提升云原生服務(wù)能力與質(zhì)量,支持服務(wù)的訂閱、部署、升級、更新
    發(fā)表于 07-27 15:44 ?904次閱讀
    華為云中什么是<b class='flag-5'>云原生</b>服務(wù)中心

    什么是分布式云原生

    體驗,讓客戶在使用云原生應(yīng)用時,感受不到地域、跨云、流量的限制,把云原生的能力帶入到企業(yè)的每一個業(yè)務(wù)場景,加速千行百業(yè)擁抱云原生。 分布式
    發(fā)表于 07-27 15:52 ?1776次閱讀

    云原生應(yīng)用加速 數(shù)字化+降本增效成為共識

    云原生應(yīng)用的概念由云和原生兩個部分組成,云在這里指的是云平臺,也就是平臺即服務(wù)(Platform as a Service,PaaS);原生應(yīng)用指的是專門針對云平臺而設(shè)計和實現(xiàn)的,充分
    發(fā)表于 07-27 16:30 ?719次閱讀

    Java與云原生的矛盾原因

    前陣子在 B 站刷到了周志明博士的視頻,主題是云原生時代 Java,主要內(nèi)容是云原生時代的挑戰(zhàn)與 Java 社區(qū)的對策。
    的頭像 發(fā)表于 10-31 11:15 ?1588次閱讀

    KubeOS:面向云原生場景的容器操作系統(tǒng)

    云原生場景,容器和 Kubernetes 在開發(fā)、測試、生產(chǎn)中的應(yīng)用越來越廣泛,傳統(tǒng)的操作系統(tǒng)往往會帶來安全性、運維開銷、OS 版本等方面的問題,容器操作系統(tǒng)即容器 OS 是針對云原生
    的頭像 發(fā)表于 11-01 17:03 ?2752次閱讀

    云原生和非云原生哪個好?六大區(qū)別詳細對比

    云原生和非云原生各有優(yōu)劣,具體選擇取決于應(yīng)用場景。云原生利用云計算的優(yōu)勢,通過微服務(wù)、容器化和自動化運維等技術(shù),提高了應(yīng)用的可擴展性、更新速度和成本效益。非
    的頭像 發(fā)表于 09-13 09:53 ?780次閱讀

    云原生AI服務(wù)怎么樣

    云原生AI服務(wù),是指采用云原生的原則和技術(shù)來構(gòu)建、部署和管理人工智能應(yīng)用及工作負(fù)載的方法和模式。那么,云原生AI服務(wù)怎么樣呢?下面,AI部落小編帶您了解。
    的頭像 發(fā)表于 01-23 10:47 ?468次閱讀