一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

云原生場(chǎng)景下實(shí)現(xiàn)編譯加速

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

掃碼添加小助手

加入工程師交流群

背景

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

目標(biāo)

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

實(shí)現(xiàn)方案

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

所用工具 - cfs+zstd

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

1 cfs 遠(yuǎn)程掛載

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

2 zstd 壓縮

針對(duì)現(xiàn)有的幾種壓縮方式進(jìn)行了性能對(duì)比,最后選用了 zstd 進(jìn)行壓縮。Zstd,全稱 Zstandard,是 Facebook 于 2016 年開源的新無損壓縮算法。Zstd 還可以以壓縮速度為代價(jià)提供更強(qiáng)的壓縮比,速度與壓縮率的比重可通過增量進(jìn)行配置。與 zlib、lz4、xz 等當(dāng)前流行的壓縮算法不同,Zstd 尋求一種壓縮性能與壓縮率通吃的方案,而實(shí)際上它也確實(shí)做到了。在由官方所列出的表格中,可以看到,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)加入了對(duì) zstd 的支持。常見的壓縮算法性能對(duì)比:8b24e664-a813-11ed-bfe3-dac502259ad0.png壓縮包大小對(duì)比:
依賴包的大小 465M 壓縮效率
tar 壓縮 423M 14s 左右
zstd 壓縮 205M 1s 左右

緩存的實(shí)現(xiàn)

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

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

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

?pull 緩存

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

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

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

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

使用限制

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

回收策略

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

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

1 Java

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

2 NodeJs

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

使用舉例

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

3 Golang 編譯

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

4 GCC 編譯

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

總結(jié)

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

自定義鏡像進(jìn)行緩存的最佳實(shí)踐

為了滿足用戶使用自定義鏡像的方式觸發(fā)流水線,我們?cè)黾恿藘蓚€(gè)通用的緩存原子。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 編譯的緩存;同時(shí)還有 nodejs 的編譯構(gòu)建,所以我們?cè)黾恿?restore 原子和 save 原子8bc13744-a813-11ed-bfe3-dac502259ad0.png
? BASE 執(zhí)行
無緩存 平均時(shí)間:21min57s 其中 maven: 17min83s nodejs: 4min19s
有緩存 平均時(shí)間:4min20s 其中 maven: 1min10s nodejs: 2min36s
緩存效率提升 maven:93.7% nodejs:39.8%(nodejs 編譯中有包含單元測(cè)試)
緩存命中率 接近 100%

未來規(guī)劃

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

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

審核編輯 :李倩


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

    關(guān)注

    0

    文章

    124

    瀏覽量

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

    關(guān)注

    0

    文章

    679

    瀏覽量

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

    關(guān)注

    0

    文章

    260

    瀏覽量

    8266

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

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

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

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

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

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

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

    云原生解決了什么問題?

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

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

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

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

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

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

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

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

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

    什么是分布式云原生

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

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

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

    Java與云原生的矛盾原因

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

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

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

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

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

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

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