写点什么

历时 1 年,上百万行代码!首次揭秘手淘全链路性能优化(二)

  • 2019-12-23
  • 本文字数:1180 字

    阅读完需:约 4 分钟

历时1年,上百万行代码!首次揭秘手淘全链路性能优化(二)

▐ 阶段划分


什么阶段做什么事情,前面打基础,只有夯实了基础,后期才能顺理成章。我们把手淘的启动阶段做了以下细分:



启动流程如下:



可以看到:整个流程很清晰,分阶段、多任务并发执行,不存在老框架下几条初始化链路交错在一起的情况,首页那一块位置不受干扰。


▐ 任务编排


无锁化,得益于“有向无环图”,通过构建任务间的依赖,启动框架严格按照图的顺序执行各项 SDK 的初始化,真正做到时序可预期,原本需要靠锁来保证状态同步的,现在转变成了“无锁化”。


开箱即用,对一项启动任务而言,极致的体验应该是:无论我身处何处,所依赖的基础库、中间件们都应该“开箱即用”。


多任务并发,早期任务少、业务简单,基础尚未成型,单流水线作业就够了;但随着业务日益膨胀,基础只会越来越厚,就必须多流水线齐头并进,协同作业,提高吞吐率。


无锁化的好处:


  • 代码执行效率高,SDK 的初始化基本上都需要考虑多线程安全问题,如果从时序上能保证顺序,也即不存在竞争,等同于“无锁”;

  • 减少 ANR,降低卡顿故障,比如我们之前查的网络库在 vivo y85a 上启动长时卡顿达 1s 以上的问题,如果我们能正确梳理各项 SDK 之间的依赖,类似的问题就可以避免了;

  • 任务编排是重中之重,是决定成败的重要因素:依赖梳理不当,执行效率上不去。


▐ 任务调度


要支持多任务并发,那肯定绕不开线程池,既然要用到线程池,那线程池大小需要一个比较合理的设置。


★ 核心思想


阶段(Stage)+ 线程池(ThreadPool Executor)


★ 线程池大小


因为我们的 SDK 大多涉及到 so 的加载、文件的读写,线程等待时间占比比较高,所以我采用了一个通用的估算方法:2N + 1,N 是 CPU 个数。


★ 线程优先级


把先于首页(落地页)的阶段的线程优先级都调高一些,以求得到优先调度,尽快执行;进入 idle 阶段后,性质原因,慢任务居多,调整线程池大小,同时把优先级调低,做到尽量不干扰 UI 主线程,在后台慢慢跑。



实际运行的 DAG 图


优化效果:



启动环境是应用中最为复杂环节,任务多,负载重,资源争抢下,不管是 CPU ,内存,网络,IO 都有可能成为瓶颈,启动框架的引入,让我们在面对这些挑战时,有了一个明确的方向,给出一个稍微系统化的解。当然,系统资源调度优化是个非常深刻的课题,加上手机各种硬件配置多样性,我们在这个领域仍然面临更大的挑战,当前只是一个开始。

网络的链路优化

▐ 问题定义




可以看到,手淘首次安装冷启动 30s 内,网络请求数达到 400 上下。非首次冷启动 30s 内,请求数相比首装冷启减少,但依然在 100+。启动场景下,存在着以下几个问题:


  • 请求过多:重复请求、请求滥发情况严重。

  • 数据量过大:资源文件的下载占流量的 80%以上。

  • 业务方请求时机不合理:非首页 &启动必要请求需延后。


过量的请求集中在启动阶段导致原本就有限的网络带宽和端上处理能力更加严峻。


本文转载自淘系技术公众号。


原文链接:https://mp.weixin.qq.com/s/PiqnHezWKWUU0byEhrboRg


2019-12-23 18:18985

评论

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

智维数据加入信创工委会,助力国产化智能运维自主创新

智维数据

信创 国产化 智能运维 网络运维 智维数据

高性能、高稳定、高扩展:解读ByteHouse实时导入技术演进

Openlab_cosmoplat

云原生 开源社区 大数据‘’

graphpad prism基础使用教程

互联网搬砖工作者

LeetCode题解:137. 只出现一次的数字 II,排序后搜索,JavaScript,详细注释

Lee Chen

JavaScript LeetCode

易观:正视GPT-4功能缺陷与能力局限可更好探索大模型应用

易观分析

科技

最强阿里及大厂350道面试大全:框架+数据库+并发+开源+微服务

Java你猿哥

Java 数据库 架构 微服务 面经

分布式存储中建立高效回收站的设计思考

焱融科技

文件存储 分布式文件存储 回收站 高性能存储 全闪存储

阿里P8架构师都在卷的《23种设计模式加强版》宝典

程序知音

Java 架构 编程语言 设计模式 后端技术

无需二次开发,SOAP-to-REST 简化企业用户的业务迁移和整合

API7.ai 技术团队

屡试不爽!一份阿里Java程序性能实战笔记,啃完让你程序快上200%

Java你猿哥

Java ssm 面经

直播 | StarRocks 实战系列第四期--查询性能优化

StarRocks

数据库

获得华为技术认证,智维数据携手华为云初创生态再添新坐标!

智维数据

华为云 智能运维 网络运维 智维数据 技术认证

带你全方面了解字节A/B实验的文化与工具

字节跳动数据平台

大数据 AB testing实战 实验 A/B测试 企业号 3 月 PK 榜

远程桌面工具:Microsoft Remote Desktop激活版

真大的脸盆

Mac 远程办公 Mac 软件 远程工具

如何让人形机器人“行稳致远”?这篇顶级期刊的论文提出了新方法

优必选科技

机器人

为什么 APISIX Ingress 是比 Emissary-ingress 更好的选择?

API7.ai 技术团队

带你掌握如何查看并读懂昇腾平台的应用日志

华为云开发者联盟

人工智能 华为云 昇腾 华为云开发者联盟 企业号 3 月 PK 榜

你关切的Code Review三大问题,我以业务实践作答

极狐GitLab

DevOps Code Review 代码质量 代码规范 代码评审

让 API 管理效率更进一步的 API7 DevPortal

API7.ai 技术团队

api 网关 API7

复旦邱锡鹏:深度剖析 ChatGPT 类大语言模型的关键技术

NLP资深玩家

人工智能 ChatGPT

《2022年IT行业项目管理调查报告》重磅发布!

禅道项目管理

专业HTML文本编辑器:BBEdit 激活版

真大的脸盆

Mac Mac 软件 文本编辑器 文本编辑

GifGun for Mac(快速输出GIF动图格式AE插件)

互联网搬砖工作者

阿里云Elasticsearch让搜索上云像使用“水电”一样简单

阿里云大数据AI技术

阿里云 搜索 Elasticearch

微帧自研|客观评价模型与主观DMOS分数拟合的分享与实用性探讨

微帧Visionular

计算机视觉 视频编解码

InstructPix2Pix: 动动嘴皮子,超越PS

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 3 月 PK 榜 文本编辑图像

PS磨皮插件DR5白金版:支持ps 2022

互联网搬砖工作者

干货,在差分对信号的应用中需要注意些什么?

华秋PCB

电路 PCB PCB设计 共模

Apache Flink X Apache Doris 构建极速易用的实时数仓架构

Apache Flink

大数据 flink 实时计算

字节跳动DataLeap数据血缘实践

Openlab_cosmoplat

数据 开源社区 数据血缘

关于文件传输协议,你不知道的事

镭速

历时1年,上百万行代码!首次揭秘手淘全链路性能优化(二)_语言 & 开发_淘系技术_InfoQ精选文章