Skip to content

学技术不能过于专精,需要横向理解,向广度挖掘。

原则

设计原则:架构服务于业务,以提升业务开发效率和体验为目标,配合业务发展齐头并进。 业务原则:稳定性、组织架构配合和成本控制等因素。

业务与架构契合:架构演进能给让业务开发更内聚、协作更顺畅,最终带来业务开发效率和体验带来提升。 成本可控:架构设计不建议憋大招,而应该是一定时间跨度内可落地、可完成的。架构设计应该是可以拆分为多次小的架构演进,然后通过配合业务持续迭代,最终达成设计目标。

架构搭建关注方向

  • 模块 / 组件划分、分层的策略和维度;
  • 模块 / 组件间通信方案;
  • 架构演进中遇到的问题;
  • 架构演进过程中使用的工具;
  • 防劣化机制;
  • 架构演进和业务迭代的合作模式;
  • 架构演进的方向

设计考虑

虽然像高并发、负载均衡和容灾等架构设计的核心点在移动端上不存在,但是移动端还是有它自身的重点:

  • 组件化:移动端往往是多个团队合力完成同一个 App 的开发工作,为了实现多团队协作,会将 App 拆分为不同的模块,由不同的团队负责不同模块的开发维护工作。同时模块会被构建为中间产物,以组件的形式进行集成,从而加速整体工程的编译速度。使得整体架构方向都在以组件化为承载形式,同时不断缩小业务所需要关心的范围、不断扩大代码复用范围;
  • 插件化:随着业务的持续迭代,App 中聚合的功能越来越多,包体积也越变越大,导致用户下载安装体验变差。所以业界也衍生了插件化方案,可以将安装包拆分为宿主和若干插件。用户在应用商店下载时只下载安装宿主部分,其他插件在用户使用到相关功能时再通过网络进行下载,从而解决包大小问题;
  • 多 App 复用:业界很多产品在原有 App 的基础上都有衍生出极速版、特价版、或者专业版,通过不同的 App 来服务不同的用户群体。而这些不同的新衍生的 App 和原 App 在很多功能上都是重合的,如果分开开发维护的话,显然需要投入更多的人力资源。所以往往都会考虑实现多 App 复用,使得相同的部分只用进行一次开发,从而提升研发效率;
  • 动态化:大多数业务中都会有一些业务层级较深、使用用户较少,或者一些周期较短、时效性很强的业务功能(比如节假日活动等)。这些业务功能如果使用原生的开发方式,需要重新发版,时间点和覆盖率可能无法保障,同时也会导致包 size 增大。所以往往会采用动态化的方式进行开发:比如 H5 网页、Hybrid、RN、小程序等,这样可以实现相应功能的快速迭代,而不需要重新发版
  • 多端复用:前面提到了在 Android 或者 iOS 某一平台上的多 App 复用,也提到了动态化能力,往往动态化就是具备同一套代码在 Android 和 iOS 双端实现复用,这样可以极大的提升研发效率。当然除了动态化方案,一些原生方案也可以实现在 Android 和 iOS 双端复用,同时 Flutter 等自建渲染方案可以实现在更多端复用,这也是业界在重点关注的一个方向。

完善与优化

架构优化还是性能优化,都是长周期、持续推进的过程,所以我们也会围绕业务环境去做完善。

  • 多端复用:字节内部的信息流产品有今日头条和今日头条极速版两个产品,现在两个产品的代码复用率还可以做进一步的提升,这是后续架构优化的一个重要发力点。这样可以实现更高的开发效率,使得这两个产品可以更加快速的给用户提供更多优质服务。
  • 架构优化闭环:头条架构一直在持续优化和演进,解决了大量的业务和技术问题。但现阶段的业务和技术问题发现到架构优化还没有完全形成闭环,还有很多问题没有被挖掘出来,问题的解决程度也无法全面评估。后续会从架构度量指标、架构分析工具建设和防劣化机制 3 个方向着力实现架构优化闭环。
    • 架构度量指标:有了架构度量指标后,就可以主动对现有业务和架构进行分析,快速去发现和定位问题,从而进行相应的优化。同时也可以对优化后的结果进行度量,判断问题是否得到了有效解决;
    • 架构分析工具:头条在进行架构优化的过程中,往往需要进行大量的分析来发现问题、定位问题和解决问题,而相应的工具能够极大的提高效率。后续会针对性的建设更多的架构分析工具,更好的服务架构演进和业务发展;
    • 防劣化机制:由于业务的高速迭代和新同学的加入等原因,头条日常开发过程中也遇到了很多不符合架构设计的代码,这些代码会导致架构出现劣化,缩短架构生命周期。后续会建立更多的防劣化机制,及时发现并拦截这些不合理代码,保障架构能持续正向演进。
  • 技术输出:对外输出了大量的技术方案,这一块将会继续加大投入,沉淀和输出更多更优的技术方案,为业界前端技术生态的发展做出贡献。

架构设计注意

技术人还是应该多看看业务,不能只在技术的象牙塔里,同时还要多看看业界的动向,接触业界的专家和经验。

  • 全局视角和思维:以全局的视角和思维去发现和审视业务的需求和问题,从而设计出最适合业务的架构;
  • 架构配合业务同步发展:
    • 架构演进是为了解决业务问题、提升研发质量。因而需要深入业务,了解业务痛点;
    • 好的架构是要不断演变去适应业务的发展,其源于不停地衍变而非一成不变的设计;
    • 架构演进过程中,要做好架构演进和业务迭代的协同工作;
  • 做好防劣化机制: 任何架构都有生命周期,所以会有源源不断的新的架构被设计和演进出来; 没有防劣化机制的话,填坑速度可能永远赶不上挖坑速度。而恰当的防劣化机制,能够延长架构的生命周期,使得架构师可以更关注于新增问题。

image.png