2月5-7日QCon全球软件开发大会携手100+位大咖讲师落定北京,点击查看完整日程>> 了解详情
写点什么

字节跳动现象级 App 十年成长史,移动端基础建设与组织演进之路 | 卓越技术团队访谈录

  • 2022-09-26
    北京
  • 本文字数:6972 字

    阅读完需:约 23 分钟

字节跳动现象级 App 十年成长史,移动端基础建设与组织演进之路 | 卓越技术团队访谈录

采访嘉宾 | 孙念、杨萍

采访 | Tina、闫园园

编辑 | 闫园园


2012 年,字节跳动成立,到今年,正好是它的第十个年头。虽然在年龄上,这家公司还非常年轻,但从影响力上来看,它早已成长为移动互联网时代的新兴势力。


现在外界给它贴上了很多标签,其中令人印象深刻的无外乎:庞大、低调。的确,字节跳动鲜有发声,这也使得它与一众互联网巨头相比,多了几分神秘的色彩。不过,如果要探寻字节成功的原因,创始人张一鸣的一句话或许能成为答案:


字节跳动的核心竞争力,直接来说是我们的产品,产品背后是我们的技术系统,技术系统背后是我们的团队和文化。


如今,再过多去渲染字节的产品稍显多余,毕竟对于开发者群体来说,目光也更多的聚焦在后半句——持续、丰富的 App 研发的背后究竟有着怎样的技术支撑。在本期访谈中,InfoQ 有幸采访到了字节 AppInfra 团队。他们是移动端基础技术的全球化研发团队,支持的产品包括但不限于抖音、今日头条、西瓜视频、飞书等,在性能优化、前沿技术探索等方向上都有深入的研究。


在与他们的交谈过程中,我们沿着团队的成长轨迹探寻到了字节跳动移动端基础设施的构建之路,以及支撑如此冗杂的工作背后的团队精神和文化,现整理此文,希望能对读者有所启迪。


现象级 App 爆红带来团队成长


2018 年,抖音日活破 2 亿,一跃成为中国头部 App 之一。这一年,媒体将之报道为“字节跳动成为巨头,与 BAT 们正面交锋的一年”,自那时候起,字节业务开始触及多个领域,扩大旗下 App 矩阵,其中,多款 App 获得了成功。在外界看来,这是字节的高光时刻,但人们看不到的是,彼时字节的内部也需要开始做出转变来应对业务的高速发展。


以本文的主角 AppInfra 团队举例,其前身可追溯到字节跳动的基础技术部门。2017 年之前,基础技术部门大约只有十几个人规模,其他都是纯客户端安卓、iOS;2019 年之后,整个字节包括抖音的业务都起来了,需要支持的业务越来越多,“于是我们吸纳了不少领域内的专家,包含 Flutter 社区的关键专家,一方面帮助团队支撑起平台职能;另一方面也开始投入做一些技术研究”,杨萍谈到。在此过程中,基础技术部门逐渐孵化出现在的 AppInfra 团队。


业务多,场景也随之多样化,对于技术团队来说,堆人头、拼时间势必不是长久之计。这种情况下,整个公司开始更加注重技术复用。对于 AppInfra 来说,他们的主要职责,正是将场景中的通用技术能力抽象出来,加以建设,沉淀出通用工具再落地到业务中去。AppInfra 的应用基建过程覆盖了整个开发周期中的各个环节,涉及到应用开发的整个环境,包括需求管理、代码审核、测试、打包部署、性能优化等。另外,团队还需要判断和引入新技术,比如由于业务扩张需要更好的跨平台技术方案,AppInfra 团队就促进了 Flutter 在字节跳动新业务上的落地。


发展至今,整个 AppInfra 团队的规模已经逐步扩大,并且进一步细化为了四个子团队——AppHealth 团队、Research Center 团队、端智能团队以及 DevOps 团队。AppInfra 团队也有了自己的使命:提升移动端效能、性能质量、产品核心指标和智能化水平,并关注新技术研究与落地。


那么为什么要分化出这四个方向呢?对此,另一位受访嘉宾孙念总结为团队的定位是为支持业务而生。他表示,与其说团队的架构是自顶而上规划而出,倒不如说是随着业务的需求慢慢生长出自己的形状来的贴切。“拿 AppHealth 团队来说,当应用达到一定量级,性能、稳定性等指标会直接影响用户产品体验。随着业务规模持续增长,这部分问题一旦开始凸显,团队也会加大这些方面的投入。”由此也可见,组织架构的演变其实是和技术、业务息息相关的。当业务改进时,新技术就会通过架构的分支与原有技术连接在一起,共同工作,更高效率的解决业务需求。


如果把组织架构的成长分为支持业务而生、赋能业务中去、引领业务发展三个阶段的话,目前看来,AppInfra 团队已经同时迈入了第二阶段与第三阶段。但也有很多人好奇在字节跳动里,这样一支通用技术建设团队是如何与业务团队进行有效协作的,对于这个问题,杨萍是这样回答 InfoQ 的:


第一,明确职责是前提。在字节内部,双方团队的职责是比较明确的:业务团队主要是以需求迭代和业务交付为目标,他们的侧重点在于保障需求侧的交付;而 Infra 团队主要是以技术方向为目标,侧重点在于技术的实现情况以及解决技术难点。


第二,保持紧密的协作关系。在业务团队提出需求后,背后的技术或者中台团队会迅速调整去做支撑,同时技术团队还充当业务团队的智囊团角色,以应对业务团队可能会面临的各种突发技术状况。另一方面,业务团队在长期需求迭代过程中也会有比较多的业务视角经验,他们会将这种经验传导到技术团队中,从而沉淀出典型的解决方案或者技术上的经验,赋能给更多业务。“过去两三年,我们主要是解决业务的痛点,后面的思路是走在业务前面,提前布局好技术方案。”


性能优化已成移动端重要议题


从 2007 年兴起,移动端已经经历了十几年的发展。目前来看,移动端的技术栈,可以用百家争鸣来形容:


  • 原生 App 技术栈:安卓平台的 Java 技术栈,iOS 平台的 Object-C 技术栈或 Swift 技术栈。

  • 混合 App 技术栈:典型代表有 PhoneGap、Cordova、Ionic 等框架。

  • 跨平台 App 技术栈:典型代表有 React Native、Xamarin、Flutter 等。


对于字节来说,移动端的主要技术栈也无外乎如此,“我认为,近几年来看移动端开发的架构或者框架演进过程并没有发生质的变化,技术栈的出现也属于渐进式变化,包括底层编程语言以及 UI 层面。”杨萍介绍道。同时她也谈到一个新的趋势,相较现如今比较成熟的技术栈来说,大家开始更关注 App 体验和性能的优化。对于拥有旗下多款 App 的字节来说,这一趋势显然更需要提起重视。也因此,其中一部分重担落到了 AppInfra 子团队 AppHealth 团队身上,团队需要提升全产品线的性能、稳定性和工程效率。


作为 AppHealth 团队的负责人,孙念毕业后的第一份工作是在高通集团,“当时主要是做安卓底层和芯片比较紧密的系统软件的优化”。后来随着手机厂商的快速发展,他转而加入手机厂商做安卓系统的相关优化。如今,再总结这两段工作经历,孙念感触颇深,他认为自己的工作层面从偏底层转而到应用层面,明显对自己的技术视野和深度上有相当大的帮助。


2019 年,孙念加入字节跳动,他回忆当时摆在自己面前的第一个任务就是组建团队。最开始,团队成员中拥有做监控能力的开发者比较多,“所以,当时的我们主要是做性能监控,一方面是加强线上的归因能力,另一方面是加强线下深入分析的相关工具建设。”


他进一步介绍,对于线上和线下来说,其实想要监控的指标和发现的问题其实是一致的,但更希望能把问题在线下就处理掉,以避免线上造成更大范围的损失。因此,线上层面,团队着重制订更好、更合理的指标,同时,建立整套问题的报警、响应、解决流程,来及时发现、解决问题。


线下层面,则从性能角度建立了较为精细的防劣化机制。所谓劣化,是指在业务迭代和架构优化过程中,遇到了很多不符合架构设计的代码,而导致架构出现劣化。“比如,我们会去定制 Android 手机 ROM,通过固定 ROM 里面的参数控制硬件的波动,来减小数据测量的误差,来达到更加精准防劣化,”通过建立精细化防劣化机制及时发现问题,并进行拦截和消费,来保持项目整体架构持续正向演进。


在解决性能监控问题的同时,AppHealth 团队也开始在全球各地吸纳更多单点技术领域和方向的人才,开启更多通用技术能力的探索。其中,“编译器成为我们重要发力点之一”,孙念介绍,团队在链接器上也做了一些特化工作。


对于工具链的探索主要有两个原因:第一,工具链的改造能直接缩小包体积或者提升应用性能,但对于开发者来说只需要替换工具链,而没有其他感知;第二,移动端工具链的潜力挖掘的还不够充分,可做的事情比较多。


目前,AppInfra 团队在包体积方面也已经得到了初步效果。孙念举例,团队通过定制自己的链接器替换苹果默认链接器,可以做到消除全局重复代码,从而将 iOS 二进制文件优化百分之十几左右。“这块目前业内还是做的比较少的,之后我们也会将实践做更详细的分享。”


自动化测试技术探索


如果说性能优化是目前大厂们做产品势在必行的大事之一,那么与此相对,四个子团队中的 Research Center 团队的工作似乎与业务相去甚远,毕竟从介绍来看,Research Center 主要负责前沿技术创新,以及与一些学术机构的合作。然而在实际中情况却恰恰相反,对于字节来说,Research Center 团队的存在不仅不是“可有可无”,甚至已经成为 AppInfra 团队更好地去服务业务发展的重要一棋。


“我们的理念并不是做一个单纯的学术研究部门,我们做的是技术研究,终归还是要讲究去落地的。字节提供了非常多的有挑战的技术场景,而真正解决实际的技术难题,是互联网企业里的研究性部门的使命和初衷。”杨萍谈道。


与孙念的经历相似,Research Center 团队的负责人杨萍同样有着丰富工作经验。研究生毕业后,她选择供职于英特尔,工作内容主要涉及与手机摄像头相关的软件,且以应用层为主。2018 年,杨萍加入字节,最初在 AILab 字节跳动人工智能实验室工作负责 QA 技术团队的搭建。2020 年,杨萍所在的团队开始转型技术方向探索,更名为 Quality Lab,Quality Lab 的主要职责是探索一些前沿技术以进一步提升测试能力。“这个过程基本上延续到今年年初,我们的研究方向以质量测试技术、效率和自动化为主。”


同时她也坦言,在这个过程中,团队面临了不少挑战,也做了很多变化去应对:第一,组织架构角度,除了算法工程师以外,加入更多客户端、服务端的工程师来做产品化支撑;第二,拓展与高校、机构等深度的交流和学术合作。


“未来,组织定位也会发生一些变化,变化主要在于 DevOps 或者极致的性能与体验的优化。”随着组织定位的进一步清晰,在公司战略调整下, AppInfra 正式成立了 Research Center 团队。“Research Center 会持续跟进加深一些学术合作,继续前沿技术的探索;另外,我们也会继续在自动化测试上的投资;最后,我们还尝试将主攻方向从端延伸到整个代码,去做针对程序方面的探索。”


那么对于 Research Center 来说,为什么会选择从自动化测试入手开展现有工作呢?杨萍介绍,这主要在于测试技术在开发过程中属于比较关键的节点,能够在研发、QA 甚至其他决策方等多个方面为项目带来明显的优化效果。


越是在项目、业务众多的情况下,开发者团队越能体会到代码审查的必要性,可以说不做代码审查基本相当于背着定时炸弹前进,时刻有爆炸的危险。而在代码审查中,测试是关键的一环。一般来讲,单元测试成本最少,代价也最小,“但对于开发者来说,需要面对快节奏的迭代任务,多半情况下可能并没有多余的精力去维护好单测。”因此,自动化测试的重新定义及探索也显得尤为迫切。


“2018 年时,字节并没有所谓的测试平台的概念”,杨萍回顾了字节整个自动化测试平台建设,“那时候主要是执行一些 UI 自动化测试任务,并且早期服务端测试还是空白的,主要依靠客户端测试同学去兼顾。”随着业务规模的扩大,字节设置了专门的服务端 QA 的角色,来填补相应技术层面的空白。接口测试则利用对应的平台去提供编写、执行,以及测试报告的生成等功能。


同时,性能稳定逐渐被重视,字节也随之设置了单独的性能测试平台来提供相应支撑。另外,底层测试技术也一直在探索的过程中。发展到今天,字节的整体自动化测试平台发,既具有了从客户端到服务端广度,又具有从功能到性能的深度,能够从更加全面的维度为项目及业务做支撑。


当然,建设自动化测试平台中,Research Center 团队也在做观察及调研,他们发现市面上针对客户端测试的自动化测试工具有很多,比较典型的有 Facebook 研发的 Sapienz 以及 Android 自带的随机测试工具 Monkey 等,但其中对 iOS 系统的软件测试工具基本上没有。“2019 年我们调研了市面上能搜到的相关工具,但是字节的业务类型多,不止有头条、抖音,还有飞书等一些其它类型的应用。市面的测试工具,不足以支撑我们所有的业务。整体评估过后,我们决定自己探索这部分问题。”杨萍介绍。


因此,2019 年,字节在自动测试方面加大投入,研发了智能化测试服务 Fastbot。杨萍进一步谈道,Fastbot 最核心的技术本质上是如何在海量的数据中更好、更快的遍历完整个测试地图,“当我们抽象出来这个问题之后,就可以在低层去做多端或者 OS 层面的兼容。”这也意味着  Fastbot 不仅可以支持安卓,还能支持 iOS,甚至做到了支持跨端框架。


当然,对于新技术的探索,点滴成功的背后无疑是多次的失败,Research Center 团队也并不例外,“自动化的工具,过程中会有非常多的技术探索,也会面临很多失败,但这些失败其实并不足以改变我们的初衷,我们希望用更多的新技术去解决业务中的实际测试问题。”


团队建设,人才是根本性问题


本次访谈中,InfoQ 照例与两位团队的负责人聊到了他们眼中团队亟需解决的问题。令人印象深刻的是,除了谈及技术以及业务上的规划,本次两位负责人还不约而同谈到了他们对于“人”的问题的理解。


对 AppInfra 团队来说,目前还需要进一步建设好人才梯队。“最开始,我们只有聚焦有性能监控技术的人才上,后来逐渐补齐了一些做深入分析,以及通用优化能力的人员。还包括安卓系统,甚至在 Linux 内核上有经验的人才,他们可以给我们提供更具有广度和深度的技术视野,同时我们也增加了一些在单点的技术上积累非常深厚的程序员,比如安卓 Hook。2020 年左右,我们也开始去找一些合适的编译器领域的人才,并逐步建立起来了这样一支队伍。”


孙念认为团队需要支撑全球化的业务,那么需要更多不同技术领域的、很出色的工程师,“我们还会持续再补充一些优秀同学进来。”同时他也谈到,虽然字节在海外的知名度已大有提高,但与 Google、Facebook 等国际巨头的影响力差距仍然存在,这是需要承认,并不断努力提高的一点。


而对于 Research Center 团队来说,杨萍谈到,他们目前最需要的则是正视目前潜在的人才结构化的风险。展开来讲,作为前沿技术探索领域的先行者,一方面,团队需要引进更多优秀的青年学者,去做更多技术探索,但也应该注意到,研究型人才的加入可能会削弱团队本身的工程和业务视角。因此,另一方面,她直言接下来团队引入更多来自业务领域的技术专家角色,使团队更好地传承以技术研究落地为主的使命和愿景。


写在最后


互联网大厂们缔造了不少 App 神话,字节跳动里的类似头条、抖音这种超大型项目也是其中之一。不同类型的企业,其产品差异很大,都需要根据各自的业务情况决定自己的实现和演进方案。


在字节跳动里打造 App,一开始技术方案和框架选择并不是靠就精心设计出来的,而是在实践的过程中随业务的发展和业务类型的改变不断调整出来的。随着公司的发展,字节跳动逐渐强调靠数据说话,一些架构上面的选择,随后也有不少是由数据来支撑的。


结合这几年移动端技术发展趋势,虽然基础架构不会有特别大的调整,性能和体验上却在不断地优化。跟其他大厂一样,字节跳动的架构优化也经历了组件化、插件化的典型过程,这些优化的实施都是跟业务状态紧密相关的。比如为了更好的触达用户,像头条的极速版就会使用比较多的插件化,对初始的包体积更小。


总结来说,架构演进是跟业务强相关的,但作为移动端基础技术架构团队,保持对未来技术的关注也是必要的。


这其中包括应用框架和编程语言。AppInfra 团队有关注一些开发框架,比如谷歌推出的 Jetpack Compose ,以及苹果推出的 SwiftUI 响应式编程框架。


同时,一些编程语言已成为趋势,比如安卓里的 Kotlin,一方面在开发者中的占比越来越高,另一方面在做编译器优化中其产物、性能开销都是需要关注的点。另外是 Swift,比 Kotlin 更新的开发语言,孙念解释道,“我们需要关注开发者对它的关注程度,业务对它是否有计划。如果业务有比较明确的采用 Swift 的计划,我们也要为团队新建配套的基础设施,要及时跟上,以适应现在的开发趋势。”甚至是安卓系统里的 Rust,AppInfra 团队也需要考虑移动端的开发里 Rust 会不会成为一个可选项。


嘉宾介绍:


孙念,字节跳动基础架构 AppInfra 部门 AppHealth 团队负责人,专注于 App 性能、稳定性方向,带领团队通过对操作系统资源利用、虚拟机、编译器工具链,高性能基础库等方向的深度优化和建设各个核心指标全链路的监控体系和分析调试工具,协助字节各业务提升产品质量和体验。


杨萍,字节跳动基础架构 AppInfra 部门 Research Center 团队负责人,负责端架构基础研究与智能化能力建设,带领团队孵化并落地多个行业领先的端质量产品(Fastbot,精准测试),也对目前 AI 技术在大前端研发体系的应用有较多了解。


内容推荐


本文选自《中国卓越技术团队访谈录》(2022 年第三季),本期精选了阿里达摩院数据库、得物、华润云、民生保险、众安保险、字节跳动 AppInfra 等技术团队在技术落地、团队建设方面的实践经验及心得体会。


《中国卓越技术团队访谈录》是 InfoQ 打造的重磅内容产品,以各个国内优秀企业的 IT 技术团队为线索策划系列采访,希望向外界传递杰出技术团队的做事方法 / 技术实践,让开发者了解他们的知识积累、技术演进、产品锤炼与团队文化等,并从中获得有价值的见解。


访谈录现开放长期报名通道,如果你身处传统企业经历了数字化转型变革,或者正在互联网公司进行创新技术的研发,并希望 InfoQ 可以关注和采访你所在的技术团队,可以添加微信:caifangfang_wechat,请注明来意及公司名称。



2022-09-26 20:345901

评论

发布
暂无评论
发现更多内容

Java中二进制转换的多种方法

秋名山码民

Java’ 7月月更

TiFlash 源码解读(四) | TiFlash DDL 模块设计及实现分析

TiDB 社区干货传送门

集群管理

架构实战营 模块六作业

挖了蘑菇哩斯

架构实战营

TypeScript学习后续之受挫的经历

为自己带盐

7月月更

聊聊乐观锁 & 悲观锁

Steven

解读《深入理解计算机系统(CSAPP)》第6章存储器层次结构

小明Java问道之路

cpu 内存 存储器 高速缓存 7月月更

成年人的周末 2022.7.10

贾献华

7月月更

继承

Jason199

js 继承 7月月更

Spring IOC II

武师叔

7月月更

TiDB+FLINK 实时计算

TiDB 社区干货传送门

实践案例

价值几十万的 TiDB优化

TiDB 社区干货传送门

实践案例

Electron入门【01】

坚果

7月月更

ArrayBlockingQueue源码分析-新增和获取数据

zarmnosaj

7月月更

Spring&SpringBoot 源码笔记整理 |Bean 的加载流程一

自由

Spring5源码解析 7月月更

排序算法总结

乌龟哥哥

7月月更

TiDB 目录结构分析

TiDB 社区干货传送门

实践案例

设计微博系统中"微博评论"的高性能高可用计算架构

Geek_7a789a

小区搜索过程

柒号华仔

5G 7月月更

常用激活函数

infoQ-LolitaAnn

人工智能 7月月更

记一次TiDB优化

TiDB 社区干货传送门

性能调优

【TiDB 最佳实践系列】如何高效利用 Grafana 监控分析 TiDB 指标?

TiDB 社区干货传送门

监控

leetcode 312. Burst Balloons 戳气球(困难)

okokabcd

LeetCode 动态规划 分治 数据结构与算法

拆分电商系统为微服务

Geek_7a789a

Qt | 播放音频文件 QMediaplayer

YOLO.

音视频 qt 多媒体 播放 7月月更

冻结JS对象方法技术详解

猪痞恶霸

js 7月月更

Python Asyncio 二探:使用和用途

宇宙之一粟

Python asyncio 7月月更

PD 关于ID分配的源码分析

TiDB 社区干货传送门

TiDB 底层架构

机器学习-回归分析

AIWeker

机器学习 回归分析 7月月更

项目研发流程规范

源字节1号

SpringBoot核心应用第一弹

Java学术趴

7月月更

前端食堂技术周刊第 44 期:Bun、Vue.js 挑战、React 状态管理的新浪潮、Can I DevTools、函数式编程

童欧巴

Vue React Bun

字节跳动现象级 App 十年成长史,移动端基础建设与组织演进之路 | 卓越技术团队访谈录_前端_闫园园_InfoQ精选文章