导读:百度直播定位成直播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 的常见故障分析和应对方法
百度买卖中台之钱包体系架构浅析
依据宽表的数据建模应用
百度谈论中台的规划与探究
依据模板装备的数据可视化渠道
如何正确的评测视频画质