公司:字节跳动
北京字节跳动科技有限公司,简称字节跳动,是一家位于中国北京的跨国互联网技术公司,成立于2012年3月,旗下有产品媒体聚合服务今日头条和短影音抖音(及其海外版本TikTok)、西瓜视频、社交平台Lemon8等,也有一些加入人工智能技术的专业生产力软件,例如剪映、办公套装拉客(lark,中国版本称飞书)等业务。
至2018年,字节跳动的移动应用月度用户超过十亿人,估值750亿美元,超越Uber成为全球最有价值的创业公司。截至2019年7月,字节跳动的产品和服务已覆盖全球150个国家和地区、75个语种,曾在40多个国家和地区位居应用商店总榜前列。
在中国互联网企业中,字节跳动是第一家没有向阿里巴巴、腾讯或百度寻求商业保护或融资的创业公司;相反地,字节跳动被认为与百度、腾讯两大巨头有强烈的竞争关系,因字节跳动资金主要来源于抖音和今日头条的广告收入。
至2020年3月,字节跳动已经有六万员工,并计划再增员一万人。投资人和内部消息将字节跳动2019年的营收定在1,040亿元至1,400亿元人民币,超过了Uber、Snapchat和推特的总和。在中国,其广告收入也超越了腾讯、仅次于阿里巴巴。抖音的全球下载量达1.15亿次,固定用户近10亿。
大型系统存储层迁移实践
作为一个以新闻、资讯为主的 App,今日头条上的主要内容都是由文章组成,文章服务自然伴随着今日头条 App 的产生就已出现,之后又逐步扩展为目前的内容云,为头条、西瓜、小说、懂车帝等多个 App 服务的业务内容中台。截止 2021 年底,内容云接入子业务已经达到数百个,高峰期主要读服务 QPS 数百万,维护超过 2200 个属性,存量数据达到百亿条级别。然而由于历史悠久,经手人众多,加上历史上一些环境或周边系统的特殊性,业务模式发生转变等,使得内容云成为一个标准的大型遗留系统,早期的一些存储、架构上的设计已经逐渐无法满足当前的业务场景,并给维护者带来了较大维护和迭代成本。
因此我们启动了内容云存储层的迁移项目,随着调研和与其他业务的讨论的不断深入,发现各业务对存储层的痛点及需求基本一致,存储模型和实现方案逐渐趋同,因此决定基于 ByteKV 开发一个宽表数据服务(本文主要聚焦在遗留系统存储层迁移的过程,暂不涉及新存储层的设计与实现细节),下沉存储层通用逻辑,供其他业务接入,并替换内容云原有的存储层。最终历时将近 1 年时间将在线流量切换至新的存储层。
迁移一个系统的存储能有多复杂?无非是双写、迁移数据、切读、停写罢了,为何内容云存储层的迁移竟花费将近一年时间?本文主要分享内容云存储层迁移的血泪史,过程中的一些坑和经验,望能给其他大型系统迁移存储或做重构带来一些流程上的参考。
火山引擎 A/B 测试私有化实践
作为一款面向 ToB 市场的产品——火山引擎 A/B 测试(DataTester)为了满足客户对数据安全、合规问题等需求,探索私有化部署是产品无法绕开的一条路。
在面向 ToB 客户私有化的实际落地中,火山引擎 A/B 测试(DataTester)也遇到了字节内部服务和企业 SaaS 服务都不容易遇到的问题。在解决这些问题的落地实践中,火山引擎 A/B 测试团队沉淀了一些流程管理、性能优化等方面的经验。
本文主要分享火山引擎 A/B 测试当前的私有化架构,遇到的主要问题以及从业务角度出发的解决思路。
深入浅出 Gradle Sync 优化
本文分析了 Android Studio Sync 在 Gradle 层面的底层逻辑,并且从原理出发介绍了 DevOps - Build 团队 Gradle Sync 优化框架的实现细节以及在飞书项目中进行 Sync 优化的实战经验。
字节跳动自研高性能微服务框架 Kitex 的演进之旅
字节跳动 Golang RPC 框架的演进。
从 Turborepo 看 Monorepo 工具的任务编排能力
Turborepo 是一个用于 JavaScript 和 TypeScript 代码库的高性能构建系统。通过增量构建、智能远程缓存和优化的任务调度,Turborepo 可以将构建速度提高 85% 或更多,使各种规模的团队都能够维护一个快速有效的构建系统,该系统可以随着代码库和团队的成长而扩展。
Tree shaking问题排查指南来啦!
在自研打包工具的过程中,发现有时会碰到不同的编译工具处理相同的代码,其大小差距可能很大,追查下来大部分是和不同工具对代码优化的处理方式不同所致。目前大部分js打包工具都支持的一种优化即tree shaking,但是不幸的是tree shaking没有比较标准的定义,各个打包工具的tree shaking实现又不尽相同。
西瓜视频 iOS Voice Over 无障碍适配实践
为了解决老年人、残疾人等群体在使用互联网等智能技术时遇到的困难,自 2021 年春季开始,西瓜视频开展了无障碍与适老化改造专项行动。陆续完成了无障碍影院、色弱模式、护眼模式、大字号模式、外挂字幕等多个改造需求,充分满足了视力障碍、听力障碍以及老年人等特殊群体的需求。
本文从研发的视角出发,讲述了如何使用 Voice Over、如何适配 Voice Over 以及适配过程中如果遇到问题应该如何解决。
一文了解字节跳动如何解决 SLA 治理难题
基于字节跳动分布式治理的理念,数据平台数据治理团队自研了 SLA 保障平台,目前已在字节内部得到广泛使用,并支持了绝大部分数据团队的 SLA 治理需求,每天保障的 SLA 链路数量过千,解决了数据 SLA 难对齐、难保障、难管理的问题。
MachO文件编译链接常见的三大认知误区
《iOS15动态链接fixup chain原理详解》[1]对 iOS15+ 动态链接过程性能优化的深度解析,引发了字节跳动APM团队对MachO文件的编译链接过程探索的兴趣。在学习的过程中,初学者常常会因为对该领域的不熟悉而陷入误区。本文整理了初学者比较容易犯的三大认知误区,避免大家重蹈覆辙。
OOP 思想在 TCC/APIX/GORM 源码中的应用
大力智能学习灯于 2019 年 10 月份上线,截止 2021 年底,台灯出货量已超过 100w 台,完成了从 0 到 1 的探索。在成立之初,很多方向的产品为了尽早拿到用户反馈,要求快速迭代,研发在代码实现上相对快糙猛,早期阶段这无可厚非,但慢慢地,自习室、系统工具、知识宇宙等应用已经变成灯上核心基建,如果还按之前的野蛮生长的方式将会为台灯的成长埋下隐患。
在这样的背景下,大力智能服务端推动 OOP 技术专项的落地,希望能够:提升团队成员自身的编码水平;统一团队内部编程风格;支撑业务快速迭代。
TCC、APIX、GORM 都是日常项目中经常会依赖到的外部包,本文从这些项目的源码出发,在学习的过程中,解读良好的代码设计在其中的应用,希望能帮忙大家更好的理解和应用 OOP 思想,写出更优秀的代码。
前端性能优化4大环节最佳实践与研发流程
大型项目发展到一个阶段都绕不开性能优化,高性能是高品质产品的重要特征。如何你是研发同学,你会关心如何入手优化,优化的链路都有哪些环节;如何你是Team Leader,你一定很关心用什么易于执行,易于验证的研发流程,来指导前端团队交付高性能的产品,并确保产品的性能始终是健康的、可持续的。
本文我们将介绍前端优化链路的全景图和可持续的性能优先研发流程。
深入剖析 split locks,i++ 可能导致的灾难
Split lock 是 CPU 为了支持跨 cache line 进行原子内存访问而支持的内存总线锁。
有些处理器比如 ARM、RISC-V 不允许未对齐的内存访问,不会产生跨 cache line 的原子访问,所以不会产生 split lock,而 X86 是支持的。
split lock 对开发者来说是很方便的,因为不需要考虑内存不对齐访问的问题,但是这同时也是有代价的:一个产生 split lock 的指令会独占内存总线大约 1000 个时钟周期,对比正常情况下的 ADD 指令约只需要小于 10 个时钟周期,锁住内存总线导致其他 CPU 无法访问内存会严重影响系统性能。
因此 split lock 的检测与处理就非常重要,现在的 CPU 支持检测能力,检测到如果在内核态会直接 panic,在用户态则会尝试主动 sleep 来降低 split lock 产生的频率,或者 kill 用户态进程,进而缓解对内存总线的争抢。
在引入了虚拟化后,会尝试在 Host 侧处理,KVM 通知 QEMU 的 vCPU 线程主动 sleep 降低 split lock 产生的频率,甚至 kill 虚拟机。以上的结论也只是截止目前 2022/4/19(下同)的情况,近 2 年社区仍对 split lock 的处理有不同的看法,处理方式也是改变了多次,所以以下的分析仅讨论目前的情况。
广告素材优选算法在内容营销中的应用实践
近年来,基于 feed 流推荐的短视频业务带来了巨大的广告商业价值,例如,抖音推出的「游戏发行人计划」就是一个鼓励达人发布游戏相关短视频,从而为游戏推广带量并实现流量变现的有效工具。相比于专业的广告素材(PGC),这些由达人自主创作的原生广告素材(UGC)往往具有显著的成本优势,而且风格多样、素材量大。但是,在发行人计划产生的大量 UGC 短视频中,有许多优质素材由于作者热度等原因无法得到足够的曝光,导致这些素材的价值无法得到充分利用。因此,我们通过挑选「游戏发行人计划」中有广告价值的素材进行素材加热(dou+投放),并借助智能投放、人群定向等其他技术,更精准有效地为游戏获量,最大限度挖掘游戏达人素材的潜在价值,更好地实现内容营销。所谓素材优选,即是从海量的短视频素材中,寻找出广告投放效果最好的素材。
抖音 Android 包体积优化探索:资源二进制格式的极致精简
目前,安卓端对于包体积的优化方案已经多如过江之鲫,我们系列的上一篇文章介绍了 Class 字节码的优化,本期我们将关注点聚焦到资源文件上,从资源二进制文件的全新角度,拓展出包体积优化的新思路。
在资源文件优化方面,通常的优化手段多集中在图片/文件压缩、资源文件名称混淆、离线下载资源文件等方面,而我们的新思路基于对于常规思路的深度分析及思考。
火山引擎推出基于全新视角的 Web 端性能监控方案
“异常感知——发现根因——解决问题”,基于该理念,火山引擎APM团队设计了高可用易扩展的SDK和消费平台,形成了一种面向Web监控的解决方案,该方案紧密关联了各个功能,足以支撑复杂场景下的性能、异常数据消费和分析的需求。目前,字节内部已有超过3000+个项目接入,在进行不断迭代、打磨后,决定把它融合入火山引擎全链路监控,为广大外部的应用开发者提供服务。
iOS StoreKit 2 新特性解析
2021 年 WWDC,在 iOS 15 系统上推出了一个新的 StoreKit 2 库,该库采用了完全新的 API 来解决应用内购买问题。