指南:百度直播定位为直播SDK,赋能百度厂内APP使用。在业务迭代和业务规模扩张的前提下,直播工程架构也在不断优化。一、后台百度直播定位为直播SDK,为百度工厂APP的使用赋能。随着业务规模的快速扩张和代码量的膨胀,直播原有的工程架构制约着直播的快速发展。随着垂直APP接入数量的增加,定制难度大/配置调试耗时/主机接入过程中要实现的协议多,制约了SDK的对外输出,归纳起来有以下两类:工程级问题:原生工程结构影响开发效率/业务代码耦合严重/宿主绑定函数宏定义导致SDK差异化输出困难业务规模扩大,直播团队分步进行针对性改造,实现最终SDK灵活高效的平台输出。2.项目级改造项目级改造分为三个步骤。首先是项目对接EasyBox,然后是业务维度的组件化多仓拆分。在前两步的基础上,最终完善了SDK差分输出能力,项目整体完成。架构转换和迁移。1、工程改造直播最早的项目是基于Xcode原生项目,嵌套编译多个项目,实现工程化组件。这种方法有太多缺点。直播基于自主研发的EasyBox工具链进行了工程化改造,EasyBox工具链针对该项目进行了标准化。模板改造首先是liveBoxAPP项目的脱壳,其次是针对原有的业务工程标准分层,live项目重新划分了逻辑层级:shell项目,liveSDK编译运行构建环境MixTure构建层,控制差分SDK构建,通过EasyBox支持变体组件差异化,通过link_dependency控制产品SDK自由组合生成业务层,广播核心业务基础库层主机平台库依赖层/三方依赖库基于以上改造使得直播项目的依赖关系更加清晰,Easybox分层使得层与层之间的依赖关系不被破解。以上改造只是在直播原有项目结构基础上的升级改造。业务仓库本身还有问题,所以我们做了一个Multi-warehouse和multi-componenttemplatesplitting。2.多仓多组件模板拆分业务仓的问题主要是业务耦合严重/权限没有隔离。直播早期的仓库管理机制是Monorepo。随着业务规模扩大,团队扩大,直播只根据模板业务拆分Multi-warehouse,仓库管理升级为Multirepo,easyBox本身也支持Multirepo模式。直播间业务的VC由一套布局和服务的slotPage框架管理。slotPage简单地将直播间的UI和capabilities分为(在直播间)组件/插件/服务,提供了一套组件布局管理/事件分发/基础状态管理的页面管理机制。直播拆分业务层仓库组件的模板维度,分为以下几个步骤:业务层拆分出服务层,将通用能力下沉到服务层仓库组件,拆分基础核心直播容器组件,并提供直播间的核心能力。将直播间功能拆分成通用组件插件池。根据模板维度拆分业务层仓库组件。,属于业务模板独有的(直播间内)组件/插件3.支持SDK差异化输出不同主机对SDK定制的要求有很大差异,所以SDK要灵活支持裁剪,虽然EasyBox可以通过variants(变体)和link_dependency实现差异化构建,但是不适合widget功能的裁剪定制直播间,所以直播提供了在编译时注入widgets的能力。直播组件包括注册模块,该模块分发直播核心的ModuleEvent。在事件合适的时候,将组件的服务注册到Pyramid中,采用impl和interface分离的方式,实现差异化输出组件真正的编译隔离。差异化组件禁止水平依赖。impl组件只能依赖接口的interface组件。基于上述改造,灵活实现了直播功能微件的差异化组装构建。3.接入效率优化工程级问题转化完成后,为了实现主播的自动接入/快速调试,直播团队也做了很多辅助工具来实现业务方的自动化接入。1.自动接入平台由于SDK功能复杂可选,上下游依赖较多。每次访问主机都涉及很多服务,导致访问成本特别高。因此,直播开发了视觉包输出平台。导入文件+独立外包平台的方案,降低准入成本。流程如下:在接入平台申请SDK接入,填写相应信息,根据直播提供的功能列表选择功能。审核通过后,触发相应的SDK构建,即可快速获取SDK产品,根据直播提供的接入文档,即可实现自动接入。2、快速源码调试/映射直播是一项浩大的工程。在主播源码调试中,需要按照EasyBox配置方式导入直播的所有仓库。配置繁琐,容易出现编译问题。直播基于EasyBox工具开发了自己的源码调试插件,可以支持一键配置直播源码调试到主播,为了方便调试问题,该插件扩展了能力,在EasyBox二进制源码映射机制中开发了直播自身小组件的映射机制。示意图如下:3.接入协议优化SDK迭代快,对外暴露的协议较多。每个主机的情况不一样,每个协议的实现对于业务接入来说也是非常昂贵的。直播提供了一系列的小组件二进制,并提供了一个通用的实现协议实现。楼主可以根据自己的情况使用免费介绍,降低接入成本。4.收益基于以上步骤的改造,收益比较明显,主要是效率的提升:借助EasyBox和mgit,降低了工程复杂度,直播业务同学的开发成本是减少。基于直播差异化搭建方案设计,垂直产品功能定制无需侵入直播核心业务,实现灵活定制,借助自动化接入平台自由裁剪功能组件,大幅降低沟通对接成本,实现SDK接入和使用的自动化,规范EasyBox源码调试插件开发,方便对接同学快速调试5.结论直播工程基于工厂内EasyBox工具链,结合随着直播的具体诉求,演变成直播自己的工程开发模式,无论是工程改造还是接入效率优化,回归本质,最终目的是提高开发效率,帮助产品快速换代.
