最新要闻
- 完胜iPhone 14 Pro Max!一加Ace 2连续滑动10万次:没有1次断触
- 天天快资讯丨河北90后小伙做叶雕月入过万 一张“树叶”售价120元
- 天天微头条丨米哈游起诉《原神》内鬼泄密 获赔15000元
- 世界观天下!小米汽车设计文件意外泄密被疯传!小米通报:供应商被罚100万
- 批判主义的观点是什么?批判主义的代表人物有哪些?
- 什么是平稳序列?平稳序列的三个条件是什么?
- imovie怎么添加音乐?imovie怎么调整视频画面大小?
- 怎么制作电子图章?图章制作软件有哪些?
- 罹难怎么读?罹难是什么意思?
- 全球快看:38999元 雷蛇灵刃18游戏本上架:13代i9+RTX 4090
- 世界球精选!《雷霆沙赞:众神之怒》国内定档3月17日:与北美同步上映
- 李书福是懂借壳上市的 吉利旗下跑车“路特斯”赴美上市
- 女子手机不慎落入西湖 “打捞神器”只用30秒捞出
- 可惜了!《泰坦陨落》还有未公布的单机版游戏 现已被EA砍掉
- 全球热讯:真爱粉!网友凌晨4点花1万多下单三星Galaxy S23 Ultra:直言“早买早享受”
- 【当前独家】比亚迪元PLUS夺得极寒续航达率成第一 城市高达74.2%
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
当前视点!云原生场景下实现编译加速
作者:京东零售 王雷
背景
云原生下的流水线是通过启动容器来运行具体的功能步骤,每次运行流水线可能会被调度到不同的计算节点上。这会导致一个问题:容器运行完是不会保存数据的,每当流水线重新运行时,又会重新拉取代码、编译代码、下载依赖包
等等。在云原生场景下,不存在本地宿主机编译代码、构建镜像时缓存的作用
,大大延长了流水线运行时间,浪费很多不必要的时间、网络和计算成本。
(相关资料图)
在许多流水线场景中,同一条流水线的多次执行之间是有关联的。如果能够用到上一次的执行结果,则可以大幅缩短执行时间。为了提高用户使用流水线的体验,我们加入支持缓存的功能,挂接远程储存管理构建缓存,可以实现同一个项目的编译依赖复用,在同一条流水线的多次运行中,共享同一份缓存。
目标
通过实现云原生流水线的缓存技术,实现代码编译的缓存复用,平均加速流水线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的支持。
常见的压缩算法性能对比:
压缩包大小对比:
依赖包的大小 | 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的挂载目录下
依赖包的大小 | 465M |
---|---|
tar压缩 | 423M |
zstd压缩 | 205M |
缓存的使用限制和回收策略
使用限制
目前存储缓存数没有限制,存储库中所有缓存的总大小限制是根据申请的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缓存:保存缓存
在编译之前,添加Restore缓存原子
在编译之后,添加Save缓存原子
使用举例
在maven编译原子中,默认开启了maven编译的缓存;同时还有nodejs的编译构建,所以我们增加了restore原子和save原子
BASE执行 | |
---|---|
无缓存 | 平均时间:21min57s 其中maven: 17min83s nodejs: 4min19s |
有缓存 | 平均时间:4min20s 其中maven: 1min10s nodejs: 2min36s |
缓存效率提升 | maven: 93.7% nodejs:39.8%(nodejs编译中有包含单元测试) |
缓存命中率 | 接近100% |
未来规划
•不同编译原子,向用户开放配置,如是否开启缓存,设置缓存key
•实现不同语言编译原子增量push缓存功能
-
全球速看:kubernetes 污点(Taint)和容忍度(Toleration)研究
1 文档官方文档https: kubernetes io zh-cn docs concepts scheduling-eviction taint-and-toleration 2 知识点2
来源: 当前视点!云原生场景下实现编译加速
【北斗七星】北斗卫星授时之星解读与应用
全球速看:kubernetes 污点(Taint)和容忍度(Toleration)研究
完胜iPhone 14 Pro Max!一加Ace 2连续滑动10万次:没有1次断触
天天快资讯丨河北90后小伙做叶雕月入过万 一张“树叶”售价120元
天天微头条丨米哈游起诉《原神》内鬼泄密 获赔15000元
世界观天下!小米汽车设计文件意外泄密被疯传!小米通报:供应商被罚100万
批判主义的观点是什么?批判主义的代表人物有哪些?
什么是平稳序列?平稳序列的三个条件是什么?
imovie怎么添加音乐?imovie怎么调整视频画面大小?
怎么制作电子图章?图章制作软件有哪些?
罹难怎么读?罹难是什么意思?
平板电视和液晶电视有什么区别?平板电视哪个牌子质量好?
ctrl键无响应是什么原因?ctrl键无响应怎么办?
怎么用电脑打电话?电脑打电话没声音是怎么回事?
手机进水了怎么处理比较好?手机进水了放什么歌可以把水震出来?
csv文件用什么打开?csv文件打开乱码的解决方法
环球快消息!将Windows系统设置为NTP服务器
全球快看:38999元 雷蛇灵刃18游戏本上架:13代i9+RTX 4090
世界球精选!《雷霆沙赞:众神之怒》国内定档3月17日:与北美同步上映
李书福是懂借壳上市的 吉利旗下跑车“路特斯”赴美上市
女子手机不慎落入西湖 “打捞神器”只用30秒捞出
可惜了!《泰坦陨落》还有未公布的单机版游戏 现已被EA砍掉
vmware时间不同步问题
全球热讯:真爱粉!网友凌晨4点花1万多下单三星Galaxy S23 Ultra:直言“早买早享受”
【当前独家】比亚迪元PLUS夺得极寒续航达率成第一 城市高达74.2%
当前短讯!鱼跃血氧仪涨价131%被罚270万!消费者能退差价?客服回应
实时焦点:连点五次才能关:微软全屏通知强推Win11
3D模型 | 回旋火箭弹乐园教程之火箭 有手就会的火箭弹教程,超详细>>
环球快讯:读Java8函数式编程笔记08_测试、调试和重构
世界滚动:18英寸大屏+RTX 40系显卡!ROG枪神7 Plus超竞版图赏
车主注意!明天油价又要调整 加满一箱油可能多花11元
天天新消息丨万元机皇!三星Galaxy S23 Ultra真机图赏
一度濒临破产倒闭!李书福4亿救活的跑车公司:作价364亿上市
Meta搞元宇宙太烧钱 一年亏掉900多亿 CEO被炮轰搞垮公司
三星Galaxy S23/S23+/S23 Ultra有何区别?一文了解
韩国1500年历史的木简刻有生僻汉字引围观:画面让国内网友看尬
世界快资讯丨iPhone 15 Ultra/16 Ultra独占潜望长焦:Pro版本也不香了
环球微动态丨QPython实例02-调用其他app实例
精彩看点:[数据结构] 哈夫曼树
当前最新:路由react-router-dom的使用
ASP.NET Core+Element+SQL Server开发校园图书管理系统(三)
Blazor入门100天 : 身份验证和授权 (3) - DB改Sqlite
天天资讯:卖爆了!特斯拉拟提高上海工厂产量:新一轮大降价要来?
【世界新视野】独占高频版骁龙8 Gen2!三星Galaxy S23/S23+发布:5699元起
世界今热点:顶配1.32万元!三星Galaxy S23 Ultra正式发布:2亿像素无敌
“九转大肠”原综艺:比吃答辩还要抽象10倍
144MB缓存秒所有!AMD锐龙7000X3D上市时间、价格公布
天天热资讯!关于STM32CubeIDE无法正常启动GDB服务端的解决办法
世界要闻:【算法训练营day36】LeetCode435. 无重叠区间 LeetCode763. 划分字母区间 LeetCode56. 合并区间
环球信息:小米年货节终极战报出炉:全渠道支付金额破178亿!
今日快讯:Intel Arc显卡驱动DX9游戏性能累计提升43%!性价比秒杀RTX 3060
每日看点!路虎在中国混不下去了
环球新消息丨【缓存】有关HTTP缓存的总结
如何使用单纯的`WebAssembly`
世界新消息丨国美电器董事长发文“反思”国美失势了:核心要务是活下去
1岁萌娃躺地耍赖父母转身离开 这招对90后不管用:网友点赞
天天速递!谁最靠谱?四大品牌23万块硬盘最新故障率报告公布:希捷让人看不懂
Blazor入门100天 : 身份验证和授权 (1)
2023牛客寒假算法基础集训营5
Spring:AOP
世界观察:试用ChatGPT
骁龙8+性能被榨干了!一加Ace 2散热拉满:极致流畅
【时快讯】《狂飙》大结局!高启强手机穿帮:提前两年用上iPhone 8 Plus
《狂飙》的艺术总监是张译:本人主演电影票房破200亿
环球关注:国内第一大加速器里程碑诞生!面积约合20余个足球场
环球视讯!《流浪地球2》导演郭帆:希望能为科幻电影蹚一条路
玩《原神》最爽的手机!一加Ace 2超10万人预约
环球今日报丨宏碁推出TravelMate B系列笔记本:Intel N系列超低功耗U
游客偷带食物喂兔子致大批死亡:还喂发烂叶子 遭网友疯狂谴责
全球速递!海尔发布博越G43系列笔记本:搭载国产X86 CPU
今日精选:尴尬一幕:近年来论文数量激增 但科技界没有创新 3大原因
环球微资讯!300人研发三年!腾讯自研开放世界生存手游《黎明觉醒:生机》定档
今日聚焦!女子价值近20万元的钻戒丢失在高铁站 后续来了
VS Winform程序制作安装包
【世界聚看点】FluentReader 高颜值的rss阅读器
全球热头条丨易基因|细菌全基因组甲基化纳米孔测序(ONT):技术推介
每日简讯:我在京东做研发 | 揭秘支撑京东万人规模技术人员协作的行云DevOps平台
环球热推荐:再探前端低代码的“野路子”
美国一公司计划复活灭绝的渡渡鸟:还有猛犸象
PC最坏的日子快过去了 苏妈放言:AMD即将触底反弹
环球快讯:500块的产品只要10元 小米商城BUG价遭爆单 后续来了:退单返券
全球微动态丨256G不够了!博主买的小米12S Pro 512G已用掉300多G:光微信就70G
快讯:官方回应小爱下线山东话等方言识别 :无需专门设置也能听懂
记录--原生 canvas 如何实现大屏?
环球关注:鲁大师1月新机性能/流畅榜发布:一加11无悬念夺冠
全球资讯:剧毒可致死!澳大利亚失踪放射性胶囊被寻回:“大海捞针”式搜寻
【报资讯】女子宝娟嗓20年疑似癔症:16岁突然变哑、嗓子却没问题
《流浪地球3》粮食稳了?中科院合成淀粉蛋白新突破
环球今热点:动物园猴子打架输了逃到狮子园:结果好险
Java多线程:Future和FutureTask
【全球时快讯】MySQL-JDBC反序列化分析
快报:市监局回应12.4万保时捷遭抢购后下架:规模较大 正加紧调查
每日快讯!下饭神器:乌江榨菜30袋19.9元大促
快消息!魅族20就快来了!已有魅友抢先体验:称“感觉不错”
焦点快看:故障率惊人!三星昔日旗舰SSD 980 Pro严重翻车 用户投诉多到爆官方出手修复
世界快播:雷军对日本任天堂公司欣赏至极:推崇其为“世界的主宰”
全球新动态:如何将使用中的域名平滑迁移到京东云?(以原域名注册、域名解析都在万网为例)
环球简讯:最新最常用的Windows/office激活工具
世界今热点:HTTP学习笔记3-HTTP报文