在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

云原生場景下實現編譯加速

OSC開源社區 ? 來源:OSCHINA 社區 ? 2023-02-09 11:08 ? 次閱讀

背景

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

目標

通過實現云原生流水線的緩存技術,實現代碼編譯的緩存復用,平均加速流水線 3~5 倍;

實現方案

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

所用工具 - cfs+zstd

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

1 cfs 遠程掛載

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

2 zstd 壓縮

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

緩存的實現

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

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

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

?pull 緩存

當緩存命中后,根據緩存路徑,找到掛載到 cfs 上的緩存壓縮包,解壓到指定的緩存目錄下

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

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

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

使用限制

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

回收策略

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

不同技術棧的最佳實踐

1 Java

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

2 NodeJs

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

使用舉例

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

3 Golang 編譯

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

4 GCC 編譯

我們使用 ccache 進行緩存實現。ccache(“compilercache” 的縮寫)是一個編譯器緩存,該工具會高速緩存編譯生成的信息,并在編譯的特定部分使用高速緩存的信息。ccache 的緩存目錄:CCACHE_DIR,我們將這個目錄下的文件進行壓縮,push 到 cfs,當第二次運行并且命中緩存,從 cfs 上 pull 并解壓到 CCACHE_DIR 指定的目錄下。

總結

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

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

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

使用舉例

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

未來規劃

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

?實現不同語言編譯原子增量 push 緩存功能

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 流水線
    +關注

    關注

    0

    文章

    121

    瀏覽量

    26010
  • 編譯
    +關注

    關注

    0

    文章

    663

    瀏覽量

    33081
  • 云原生
    +關注

    關注

    0

    文章

    252

    瀏覽量

    7996

原文標題:云原生場景下實現編譯加速

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

收藏 人收藏

    評論

    相關推薦

    性能提升1倍,成本直降50%!基于龍蜥指令加速的下一代云原生網關

    不打折的情況,用戶部署網關的資源成本直降 50%。(圖 8/云原生網關)MSE 云原生網關優勢:網關直連業務 Pod IP,不經過傳統 Cluster IP,RT 更低。支持 HTTPS 硬件
    發表于 08-31 10:46

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

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

    云原生應用中的“云”指的是什么?

    云原生應用是獨立的小規模松散耦合服務的集合,旨在提供備受認可的業務價值,例如快速融合用戶反饋以實現持續改進。簡而言之,通過云原生應用開發,您可以加速構建新應用,優化現有應用并在
    的頭像 發表于 11-27 17:24 ?2264次閱讀

    引領云原生2.0時代,賦能新云原生企業

    十年云計算浪潮,DevOps、容器、微服務等技術飛速發展,云原生成為潮流。Forrester首席分析師戴鯤表示,云原生是企業數字化轉型的基礎,企業需要建立云原生優先的戰略,構建一體化
    的頭像 發表于 12-11 16:04 ?1871次閱讀

    云原生解決了什么問題?

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

    如何更好地構建云原生應用生態,推動業界更好地落地云原生

    信息通信研究院相關調研數據顯示,2019年我國云原生產業市場規模已達350.2億元。數字經濟大潮,傳統行業的數字化轉型成為云原生產業發展的強勁驅動力,“新基建”帶來的萬億級資本投入,也將在未來幾年推動
    的頭像 發表于 12-24 11:13 ?2680次閱讀

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

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

    云原生技術的華為云DevOps實踐之路

    和重視。 同樣,為了應對業務的敏捷發布,應用平臺的彈性訴求,商業環境的變化,云原生時代已到來,云原生技術已經應用到企業核心業務。 云原生與DevOps是什么關系?其技術優勢如何與DevOps結合,才能更加高效便捷的實施呢?
    的頭像 發表于 12-06 16:52 ?2775次閱讀

    華為云中什么是云原生服務中心

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

    什么是分布式云原生

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

    云原生應用加速 數字化+降本增效成為共識

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

    Java與云原生的矛盾原因

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

    KubeOS:面向云原生場景的容器操作系統

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

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

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

    云原生AI服務怎么樣

    云原生AI服務,是指采用云原生的原則和技術來構建、部署和管理人工智能應用及工作負載的方法和模式。那么,云原生AI服務怎么樣呢?下面,AI部落小編帶您了解。
    的頭像 發表于 01-23 10:47 ?137次閱讀
    主站蜘蛛池模板: 窝窝午夜在线观看免费观看 | 亚洲日本久久久午夜精品 | 久久久免费精品 | 欧美资源在线观看 | 午夜伦理片在线观看 | 色丁香六月 | 午夜影院亚洲 | 男生脱美女内裤内衣动态图 | 国产青青草 | 欧美亚洲综合另类成人 | 成人免费淫片95视频观看网站 | 91久久澡人人爽人人添 | 色丁香久久 | 四虎最新在线 | 好爽好紧好大的免费视频国产 | 99一级毛片 | 最新理论三级中文在线观看 | 亚洲人毛茸茸bbxx | japanese色系tube日本护士 | 亚洲艹 | 天堂网在线www | 美女免费毛片 | 亚洲国产人久久久成人精品网站 | 国产青青草 | 午夜影院网页 | 天天舔天天射天天操 | 亚洲人成在线精品 | 日韩卡1卡2卡三卡四卡二卡免 | 亚偷熟乱区视频在线观看 | 欧美成人免费草草影院 | 国产精品伦理久久久久 | 欧美又粗又硬又大久久久 | 狠狠色 综合色区 | 丁香六月婷婷七月激情 | 国产在播放一区 | 1024手机在线观看视频 | 欧美性狂猛bbbbbxxxxx | 三级毛片免费 | 性做久久久久久免费观看 | 久久天天躁狠狠躁夜夜爽蜜月 | 国产亚洲一区二区三区啪 |