写点什么

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

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

    阅读完需:约 4 分钟

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


导读:自阿里在 11 年提出 All in 无线之后,手淘慢慢成长为承载业务最多,体量巨大的航母级移动端应用。与之相应的,手淘离轻量,快速,敏捷这些关键词却越来越远,启动慢,使用卡逐步成为用户使用过程中的主要体验问题。为此,手淘的技术团队启动了极速版项目,其目标是还给用户一个更加流畅的淘宝。整个项目历时近 1 年,横跨几十个团队,经历了数百次的数据实验,涉及代码上百万行,最终使得手淘的性能有一个质的飞跃。


下面,我们一起来看手淘团队在性能优化过程中的一些思考和实践。

启动框架的思考

▐ 启动框架在手淘的意义


启动性能,是用户在使用 APP 过程中的第一感观,可见是相当重要的。相信很多同学都能说出一些常规的手段,比如只加载必要的模块,延迟加载等。从大的策略上说,是没有问题的,也是手淘做启动性能优化的一个方向,也得了一些效果,但仍存在一些问题。


前面提到,手淘承载的业务非常多,为了更好支撑业务,使用了动态化技术及一些非常复杂的策略,就首页本身依赖的模块和任务就非常多,相互关系也复杂,只加载必要任务,仍然是一笔不小的开销。于是,为了更加极致的优化,我们不得不继续思考性能优化的本质。


通常我们为了更快的达到目标,把与目标无关的事情,提到完成目标之后,通过减少执行代码从而减少执行时间的方式,叫着软优化。相对的,对于提升系统的吞吐效率,对于相同的代码用更少的执行时间完成,叫着硬优化。硬优化是面向硬件资源,包括 CPU,内存,网络,磁盘 IO 等的调度,减少等待时间,最大化利用硬件资源,保持系统负载在合理范围内。


这次优化我们有一个大的原则,要求基本不能影响业务需求,也就是要在不减任何业务代码的情况下进行优化。


对手淘而言,因为启动包含很多基础 SDK,SDK 的初始化有着一定的先后顺序;业务 SDK 又是围绕着多个基础 SDK 建立的。


那么如何保证这些 SDK 在正确的阶段、按照正确的依赖顺序、高效地初始化?怎么合理调度任务,才不至于让系统负载过高?如何最大化利用设备的性能,承接越来越多的业务?


其实启动框架就是一个任务调度系统,是手淘启动的“大管家”。各个业务模块我们称之为启动任务,管家要做的事情就是把它们的关系梳理得明明白白,有条不紊,合理安排位置、调度时间,同时提升硬件资源的利用率。


▐ 启动框架的思路


总结下来无非就是两点:一是 如何保证时序 ;二是 怎么控制拥塞,提高吞吐,充实不瞎忙。我们先看一组实验数据,在并发下面的 IO 性能。


启动任务 高并发 IO 耗时 低并发 IO 耗时



由表上的数据可以看到降低 IO 的并发,整体的执行时间大幅降低。


我们借鉴了很多任务调度系统。比如谷歌新出的 WorkManager,再比如 Spark 的 DAGScheduler。


从 Spark 的 DAGScheduler 中领悟到它的核心思想,面向阶段调度(Stage-Oriented Scheduler):把应用划分成一个个的阶段(Stage),再把任务(Task)安排到各个阶段中去,任务的编排则是通过构建 有向无环图(DAG),把任务依赖通过图的方式梳理得 井井有条。因为它分阶段执行,先集中资源把阶段一搞定,再齐心协力去执行阶段二,这样即能控制拥塞,又能保证时序,还能并发执行,让设备性能尽可能得到发挥,岂不美哉:



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


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


2019-12-23 18:181091

评论

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

一图读懂网易灵动“灵掘”与“机械智心”

网易伏羲

智慧矿山 网易灵动 无人挖掘机 无人装载机 装载机器人

用文心快码Zulu打造太阳系3D模拟器:从需求到落地的全流程实践

Comate编码助手

3D AI辅助编程 AI 编程 文心快码 文心快码Zulu

语音客服公司驯鹿 AI 获数千万 A+轮融资;扎克伯格:眼镜将成为用户与 AI 交互的主要方式丨日报

声网

每日经济新闻专访:押注具身智能模型、不做硬件做“大脑”,网易能否啃下比智驾更复杂的“硬骨头”?

网易伏羲

智慧矿山 网易灵动 工程机械智能化 挖掘机器人 装载机器人

新手教程:用外部 PostgreSQL 和 Zookeeper 启动 Dolphinscheduler

白鲸开源

数据库 postgresql zookeeper 开源 Apache DolphinScheduler

Web前端入门:JavaScript cookie 有大小限制吗?溢出会怎样?

不在线第一只蜗牛

JavaScript 前端 Web

语言模型的后完成学习技术解析

qife122

语言模型 自我评估

中烟创新参编的《数据企业评估规范》标准正式发布

中烟创新

Vidar Stealer:隐藏在Steam游戏中的信息窃取恶意软件分析

qife122

恶意软件 威胁分析

社区新贡献:X2SeaTunnel 助你无缝迁移到 SeaTunnel!

白鲸开源

开源 数据同步 Apache SeaTunnel 数据迁移工具 X2SeaTunnel

中烟创新参编的《软件和信息技术服务行业企业环境社会治理信息披露指南》标准正式发布

中烟创新

奥特斯2025/26财年第一季度呈现增长趋势

财见

从崩溃到稳定:前端开发者必学的 Node.js 守护进程实战指南

量贩潮汐·WholesaleTide

node.js

YashanDB SQLCODE函数

YashanDB

数据库

数据治理之数据质量评估维度及方法

天翼云开发者社区

数据治理

每日经济新闻专访:押注具身智能模型、不做硬件做“大脑”,网易能否啃下比智驾更复杂的“硬骨头”?

网易伏羲

智慧矿山 网易灵动 工程机械智能化 挖掘机器人 装载机器人

e签宝CEO金宏洲受邀出席WAIC世界人工智能大会

科技汇

活动邀请 | 阿里云AI原生应用开发实战营—Serverless AI 专场(北京站)开启报名!

阿里巴巴云原生

阿里云 Serverless AI 云原生

线上问题定位神器:Arthas

量贩潮汐·WholesaleTide

Python

AI Gateway 分析:OpenRouter vs Higress

阿里巴巴云原生

阿里云 云原生 Higress

海外舆情监测为何成为出海企业的必修课?

沃观Wovision

出海企业 海外舆情监控 沃观Wovision 舆情监测系统

昇腾算力赋能视频生成革命 浙江大学团队攻克长时一致性难题

极客天地

圆满闭幕|WAIC2025规模创历史新高,“灵掘”具身智能模型全球首发引全网关注

网易伏羲

智慧矿山 工程机械智能化 工程机器人 挖掘机器人 装载机器人

在多机运维过程中,最容易踩的几个坑

是但求其发

nginx 容器 运维工具 Linux 运维 #程序员

凯睿德制造收购Convanit,推进智能制造中的AI图像分析

财见

Django模型关系:从一对多到多对多全解析

电子尖叫食人鱼

数据库 django

精彩回顾 | 破解跨地域运维难题!Bonree ONE 多地多中心版公有云首发实录

博睿数据

YashanDB SQLERRM函数

YashanDB

数据库

一文教会你基于 Rainbond 部署 DolphinScheduler 高可用集群

白鲸开源

大数据 开源 部署 Apache DolphinScheduler rainbond

ManageEngine卓豪如何助你轻松应对GMP/FDA审计?

ServiceDesk_Plus

ManageEngine卓豪

守护金融核心业务 | 博睿数据《金融业务全景与全链路智能可观测体系建设白皮书》发布!

博睿数据

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