共计 2508 个字符,预计需要花费 7 分钟才能阅读完成。
导读:百度直播定位成直播 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 的常见故障剖析和应答办法
百度交易中台之钱包零碎架构浅析
基于宽表的数据建模利用
百度评论中台的设计与摸索
基于模板配置的数据可视化平台
如何正确的评测视频画质