中心化决议管理——云端分析

科技资讯 投稿 29200 0 评论

中心化决议管理——云端分析

前言

CocoaPods 云端分析能力是字节跳动的终端技术团队(Client Infrastructure 下 Developer Tools 部门提供的一系列云化基础设施之一,Developer Tools 团队致力于建设下一代移动端云化基础设施,团队通过云 IDE 技术、分布式构建、编译链接等技术,优化公司各业务的研发和交付过程中的质量、成本、安全、效率和体验。

一、背景

二、什么是云端依赖分析

云端分析的接入方式也极其容易,不需要增加配置文件,也不需要修改原有研发模式,以无侵入、无接入成本、不影响研发流程的方式接入到工程项目中。唯一需要做的,仅仅是在 CocoaPods 工具链中加入云端分析的 RubyGem 插件,并在 pod install 命令中增加一个开启优化功能的控制开关参数。

三、如何加速决议

3.1 制品库 (全量组件索引信息)

3.2 缓存机制

3.2.1 排序 Version 缓存

为了更快得获取到有序的版本列表,由制品库服务维护了所有 pod 组件从大到小排序的版本文件;每增加一个新的 pod 版本,制品库都会向文件中插入一个新版本;删除时,则会删除相应的版本字段。

Version 缓存可以让依赖管理过程提速大约10-12秒左右

3.2.2 Spec 对象缓存

一万个 podspec 文件读取就需要花费 30 秒左右(据不同磁盘而定)

同时,为了确保 Spec 的正确性,防止 Spec 在不改变版本而更改内容的情况出现。Spec 对象缓存是以一个多维数组的形式存在,通过判断 podspec 文件的修改时间,来更新缓存中的 podspec 内容为最新提交的,确保 checksum 计算与本地拉仓依赖分析的计算值相同,实现云端依赖分析的正确性。后续,也会增加 Spec 缓存命中次数,Spec 对象过期时间等,实现 Spec 缓存的清理策略。

3.2.3 缓存复用

完整的分析结果和分析结果图 Graph。针对下一次分析任务,如果是完全相同的物料可以直接返回一个可用的完整分析结果;如果未匹配,会通过一些 target,platform 等信息计算出一级平台信息 key,来确定具体 app 信息;再对所有target 下的组件依赖逐个计算 hash 值,获得二级 hash 数组 key,并对应一个分析结果图 Graph value;通过模糊匹配的方式对 hash 数组 key 进行匹配,匹配到依赖个数相同最多的相近图,来替换物料中的 locked_dependencies,来加速分析。当然,模糊匹配能力也有一定的局限性,无法对原本上传 lockfile 物料的分析任务进行加速。

3.3 物料剪枝

1. 上传物料

2. 结果返回

传输内容大小可以减少大约10MB以上。

3.4 决议策略兼容

秒级返回。

四、总结

依赖分析阶段耗时加速60%以上。后续,对于 CocoaPods 的下载优化,工程缓存服务也已经在技术探索中,相关技术文章将陆续分享,敬请期待!

编程笔记 » 中心化决议管理——云端分析

赞同 (24) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽