导读:百度直播定位成直播SDK,赋能百度厂内APP应用,随着业务规模疾速扩充、代码体量收缩、宿主接入定制诉求强烈,在不影响业务迭代和业务规模扩张的前提下,直播工程架构也在不停优化。
全文2496字,预计浏览工夫7分钟。
一、背景
百度直播定位成直播SDK, 赋能百度厂内APP应用, 随着业务规模疾速扩充、代码体量收缩, 直播原有工程结构限制了直播的疾速倒退, 随着垂类APP数量接入, 宿主接入流程中定制艰难/配置调试耗时/须要实现的协定多等问题制约了SDK对外的输入, 总结起来就是以下两个大类问题:
- 工程层面问题: 原生工程构造影响开发效率/业务代码耦合重大/宿主绑定的性能宏定义造成SDK差异化输入艰难
- 接入流程层面问题: 定制艰难/配置调试耗时/协定泛滥等问题
在不影响业务迭代和业务规模扩张的前提下, 直播团团队有针对性的逐渐进行了革新, 实现最终SDK灵便高效的平台化输入。
二、工程层面革新
工程层面革新分为三步走, 首先是工程接入EasyBox, 其次是业务维度组件化多仓库拆分, 在前两步根底上最初欠缺SDK差异化输入能力, 整体实现了工程架构革新迁徙。
1.工程革新
直播最晚期工程是基于Xcode原生工程, 多project嵌套连编实现工程构件, 这种形式在弊病太多, 基于手百自研EasyBox工具链, 直播进行了工程化的革新, EasyBox工具链对于工程是标准化的模版式革新
首先是对于liveBoxAPP工程的壳化, 其次对于原有的业务工程规范分层, 直播工程从新划分了逻辑层级:
- 壳工程, 直播SDK编译运行构建环境
- MixTure构建层, 管制SDK差异化构建,通过EasyBox反对变体(variant)组件的实现差异化, 通过link\_dependency管制产物SDK的自由组合生成
- 业务层, 直播外围业务
- 根底库层
- 宿主平台库依赖层/三方依赖库
基于以上革新, 使直播工程依赖关系更加清晰, Easybox分层使层级之间的依赖不会裂化, 以上革新只是基于直播原用工程构造的降级革新, 业务仓库自身还是有问题, 因而针对业务仓库做了多仓多组件模版拆分。
2.多仓多组件模版拆分
业务仓库的问题次要是业务耦合重大/权限无隔离, 直播晚期仓库管理机制是Monorepo, 随着业务规模收缩, 团队扩充, 直播依照模版业务唯独拆分了多仓库, 仓库治理降级到Multirepo, easyBox自身也反对Multirepo模式. 直播间业务VC是由一套slotPage框架来治理布局和服务, slotPage简略来说就是把直播间的UI和能力划分为(直播间内)组件/插件/服务, 提供组件的布局治理/事件散发/根底状态治理的一套页面管理机制, 直播针对business层仓库组件进行了模版维度的拆分, 具体分为已下几步:
- Business层拆分出service层, 将通用能力对立下沉到service层仓库组件
- 拆分根底外围直播容器组件, 提供直播间外围能力
- 拆分直播间性能积淀为通用组件插件池
- 依照模版维度拆分Business层仓库组件, 归属业务模版特有的(直播间内)组件/插件
3. 反对SDK差异化输入
不同宿主对SDK定制需要差异化很大, 因而SDK要灵便反对裁剪, EasyBox尽管能通过变体(variant)和link\_dependency能实现差异化构建, 然而对于直播间内小组件性能裁剪定制不太实用, ,因而直播提供小组件编译时注入能力, 直播组件都蕴含一个注册module, module散发直播外围的Module Event, 在event适合的机会, 注册组件的服务到Pyramid, 采纳实现impl和interface拆散的形式来实现真正的须要差异化输入组件的编译隔离, 差异化组件横向禁止依赖, impl组件只能依赖interface的接口组件。
基于以上革新, 灵便实现了直播性能小组件的差异化组装构建。
三、接入效率优化
工程层面问题革新实现后, 为了实现可能宿主主动接入/疾速调试, 直播团队也做了很多辅助工具, 可能实现业务方自动化接入。
1. 自动化接入平台
因为SDK性能简单而且可选,上下游依赖泛滥, 每接入一个宿主波及泛滥业务,造成接入老本特地高, 因而直播开发了可视化出包平台, 宿主接入在用接入文档+自主出包平台的计划, 升高接入老本, 以下是流程图:
在接入平台上, 申请SDK接入, 填写相应的信息, 依据直播提供的性能清单抉择性能, 审核通过后, 会触发对应的SDK构建, 能够疾速获取SDK产物, 依据直播提供的接入文档, 即可实现主动接入。
2.疾速源码调试/映射
直播是一个超大工程, 在宿主源码调试依照EasyBox配置形式须要引入直播所有仓库, 配置繁琐且容易出编译问题, 基于EasyBox工具, 直播开发了直播本人的源码调试插件, 能够在反对一键配置直播源码调试到宿主, 并且为了不便调试问题, 扩大了插件能力, 在EasyBox二进制源码映射机制开发了直播本人的小组件力度的映射, 原理图如下:
3.接入协定优化
SDK疾速迭代, 对外裸露的协定也比拟多, 每个宿主状况各异,每一个协定都实现对于业务接入老本也是很高, 直播提供一系列小组件二进制, 提供通用实现协定实现, 宿主依据本身状况自在引入, 升高接入老本。
四、收益
基于以上几步的革新, 收益比拟显著, 次要是效率的晋升:
- 借助EasyBox和mgit , 工程复杂度升高, 直播业务同学开发成本升高
- 基于直播差异化构建方案设计,垂类产品性能定制无需侵入直播外围业务,实现灵便可定制, 性能组件自在裁剪
- 借助于主动接入平台, 大大降低沟通对接老本, 实现接入应用SDK的自动化,标准化
- 开发EasyBox源码调试插件, 不便对接同学疾速调试
五、结语
直播工程化是站在厂内EasyBox工具链的根底上, 联合直播特定的诉求, 演化成直播本人的工程开发模式, 无论是工程化革新还是接入效率优化,回归实质, 最终目标就是晋升开发效率, 助力产品疾速迭。
——————————END————————————
举荐浏览:
百度APP 基于Pipeline as Code的继续集成实际
Go 语言应用 MySQL 的常见故障剖析和应答办法
百度交易中台之钱包零碎架构浅析
基于宽表的数据建模利用
百度评论中台的设计与摸索
基于模板配置的数据可视化平台
如何正确的评测视频画质