写点什么

双 11 后续报道:“中国规模”负载背后的技术支撑

2013 年 1 月 04 日

在 24 小时之内实现 30 亿美元的销售额,中国的电商巨头阿里巴巴最近做到了这一壮举。天猫和淘宝在处理这种规模的负载时遇到了哪些挑战,又是如何应对这些挑战的呢?InfoQ 有机会就此向天猫和淘宝的架构师庄卓然和优昙请教了一些问题。

天猫是中国领先的 B2C 电子商务网站,而淘宝是中国最大的 C2C 在线购物平台,二者都是阿里巴巴集团的子公司,总共有超过 5 亿的注册用户。双 11 大促活动今年已经是第 4 年,UV 数总计达 1.47 亿,实现总商品价值量(Gross Merchandise Volume)191 亿元人民币(大约 30 亿美元)。

面对“中国规模”电子商务的挑战:

在 2012 年 11 月 11 日双 11 大促当天,天猫和淘宝迎接了 1.47 亿的用户访问,3000 万人的购买,产生了近 1 亿笔支付订单。在零点的一瞬间,并发在线的用户数超过了 1000 万。除了满足双 11 的各种功能需求之外,如何在前期准备过程中对系统有一个完整准确的评估,如何有效推进各种优化和容灾预案,如何在活动当天各种紧急情况下正确决策,以及如何保证在顶级流量的冲击下整个网站的稳定、性能和用户体验,这是对技术团队的极大考验。

双 11 当天,天猫交易系统的峰值发生在第 1 个小时,当时系统每秒成功处理了 1.3 万的下单请求。系统峰值 QPS(每秒查询数)为 4 万 / 秒,系统的平均响应时间在 200 毫秒。天猫的商品详情页面当天的系统访问数高达 16 亿次,峰值吞吐率达到了 6.9 万次访问 / 秒,并且在峰值时还保持了 12 毫秒的高响应能力。天猫搜索双 11 当天 PV 高达 5.9 亿,峰值吞吐率达到了 1.4 万次访问 / 秒。

庄卓然解释到,从应用层面上讲,天猫和淘宝的应用都构建于自主研发的服务化架构以及 MVC 框架和 Spring 之上。这是由分布式文件系统、分布式缓存、消息中间件和 CDN 网络带宽支持的。核心数据库可以通过自主研发的数据访问中间件访问,底层数据库的水平拆分和数据搬运对应用是完全透明的。

基于这种水平扩容架构,面对促销活动引起的流量压力,天猫和淘宝的系统可以灵活地添加机器来应对。

前期我们花了很多时间进行容量计算,对于网站所有应用之间的依赖关系、流量分配比例和应用内部的调用链路做了深入的分析,通过在线的压力测试对各个应用单机的 QPS 进行准确评估,从而达到对网站目前集群处理能力的客观判断。这个过程操作起来实际上是非常有挑战的,因为天猫和淘宝本质上不是一个耦合性很弱的系统,通过单一系统的压测不能很好地反映系统的瓶颈。同时,我们也不可能完全照搬线上的环境和配置一套完整的压力测试环境。所以会更多地依赖线上的压力测试,真实地反映系统的短板。

最后,则是根据网站的自然增长趋势和双 11 的历史数据,评估当天有可能达到的业务指标,再从这些业务指标对各个系统扩容目标进行准确地计算。

当然,仅仅依靠水平扩容方式,对于大促高峰过后的机器利用率是存在弊端的,同时也会大量依赖运维人员的灵活调配能力。因此,今年我们在以聚石塔( http://cloud.tmall.com )为代表的一些应用中也尝试了大量的弹性计算框架,在塔中很多商家的不同应用共用一个集群的系统资源。双 11 当天弹性升级带宽、VM 和存储资源。同时,我们的很多内部应用也采用了这样的机制。这也是今年在双 11 准备过程中我们在技术上的一个突破。

在双 11 大促的准备过程中,淘宝和天猫的团队对系统进行了针对性的优化,包括 SQL 和缓存命中率的优化、数据库连接和应用服务器参数的调整、JVM 参数的配置、代码的复审和梳理等等。此外,大量固态硬盘(SSD)的使用也提高了数据库存储的整体性能。

为了在负载超过预期时关闭非核心操作,团队也准备了业务降级和限流预案。

所谓业务降级,就是牺牲非核心的业务功能,保证核心功能的稳定运行。简单来说,要实现优雅的业务降级,需要将功能实现拆分到相对独立的不同代码单元,分优先级进行隔离。在后台通过开关控制,降级部分非主流程的业务功能,减轻系统依赖和性能损耗,从而提升集群的整体吞吐率。

当出现了降级还无法缓解的大流量时,就要通过限流的方式来应付。首先从最前端的 Web 应用进行排队,控制流入应用的流量,也就是通过 Web 服务器的定制模块来实现 QPS 限流功能。根据被保护的 Web 服务器所能承受的最大压力做强制的 QPS 流控,超出 QPS 上限的用户进入排队等待页面。另外,为了避免前端某个 Web 应用出现大规模流量激增时造成后端服务无法承载的雪崩效应,后端的服务会针对低优先级的业务进行限流,以确保不同来源的业务压力不会压垮后端服务,保障核心业务的访问。

针对 2012 年的双 11,天猫和淘宝总共准备了 400 多个系统降级预案。 为了保证所有降级和限流预案的准确执行,我们在前期做过了大量的预案演习,所有的应急预案虽然原则上我们一个都不希望使用,但是必须确保每个预案执行的准确性和便捷性。

应急决策过程:

双 11 当天,我们有近 400 多位工程师集中办公,确保整个活动的顺利进行。整体流程上我们的目标是希望实现决策的最短路径,并且保证信息传达的简单有效。那么怎么实现呢?首先我们会有一个战地情报分拣中心,负责从客服、运营、安全、产品和商家等不同的信息来源收集和汇总各种用户反馈,剔除重复和无效的反馈,确保不会出现技术团队的信息爆炸。

其次,虽然我们会有一个战地指挥部,但是应急决策的决定权大多数还是交由一线开发工程师的。所有集中办公的工程师分工明确,每个应用都有 1-2 个核心负责人,他们会根据监控中心的各种系统指标变化情况,快速做出应急决策,确保响应的及时性。只有当涉及到对业务影响较大或是对用户体验伤害较大的时候,才会升级到指挥部来进行判断。

淘宝和天猫也有一个有效的开源策略,大量代码都在 http://code.taobao.org 开源了。包括远程通信框架 HSF、消息中间件 Notify 和数据访问中间件 TDDL 在内的一些框架已经开源。

参考英文原文: How Alibaba Catered To $3 Billion Sales In A Day

2013 年 1 月 04 日 23:169220
用户头像
臧秀涛 极客邦科技技术会议负责人

发布了 300 篇内容, 共 114.2 次阅读, 收获喜欢 21 次。

关注

评论

发布
暂无评论
  • 高可用架构案例(一):如何实现 O2O 平台日订单 500 万?

    今天,我会通过一个实际的O2O点餐平台架构改造案例,告诉你具体如何落地一个高可用的架构。

    2020 年 3 月 20 日

  • 开篇词 | 秒杀系统架构设计都有哪些关键点?

    如何才能更好地理解秒杀系统呢?本文将从程序员和架构师两个角度给你带来一些启发。

    2018 年 9 月 25 日

  • 面试题:教你如何吃透 RocketMQ

    最近公司急招架构师,形形色色的人面了很多,但真正懂得设计思维的真的是少之又少。印象最深刻的一个同学,面对我提问的这个问题的时候,回答真的是让我佩服的五体投地!

    2020 年 6 月 2 日

  • 架构师(2015 年 12 月)

    本期主要内容:微信斑马系统:微信朋友圈广告背后的利器,Spark和Hadoop孰优孰劣,通过大量测试来构建测试系统,实施微服务需要哪些基础框架,重建还是重构,Medium开发团队谈架构设计,被误解的MVC和被神化的MVVM,深入了解IAM和访问控制

  • 蘑菇街 11.11:流量超过预期,系统曾被冲垮

    据官方数据显示,蘑菇街双十一交易额已突破一亿元,并提前完成了此前的预定目标。蘑菇街今年第一次自己做交易,虽说总的交易量只有天猫几分钟的量,但峰值时期系统的压力同样不小,并且他们也才刚刚开始。那蘑菇街是怎么准备这场战争的?相应做了哪些预案?带着这些问题,InfoQ专门采访了蘑菇街的CTO岳旭强。

  • 贝壳找房移动端监控体系建设实践

    演讲嘉宾吉大计算机硕士毕业后,一直从事移动端开发,先后做过MTK、iOS、Android等平台,已经11年有余,2011年加入阿里巴巴担任技术专家,在阿里一干就是7年,积攒了大量的移动端架构和开发经验,2018年加入贝壳,担任移动端架构负责人,B端APP开发负责人。内容介绍移动端上的Crash、自定义事件/错误、网络等多维度监控和报警功能,实现了线上问题主动发现、主动预警、聚合统计、全方位还原现场等,对于质量优化帮助很大。本次演讲将详细介绍如何构建一个完整的监控体系,如何进行异常上报、分析、处理及报警,分享Native、Flutter和JS等不同场景数据收集方案。

    2019 年 7 月 24 日

  • 网站的性能

    对于网站来说,除了当前系统的功能需求外,我们还需要关注性能、可用性、伸缩性、扩展性和安全性。在架构设计中,我们需要平衡这5个要素以实现需求和架构目标,也可以通过考虑这些要素来衡量一个软件架构设计的优劣,判断是否满足了期望。

    2020 年 7 月 22 日

  • 直接赋值, 深拷贝和浅拷贝

    直接赋值: 对象的引用,也就是给对象起别名

    2020 年 7 月 9 日

  • 唯品会 11.11:频繁黑匣架构背景下,看唯品会的革命性重构

    在充分考虑未来系统发展基础上,大模块进行划分,模块内部则着眼于现实,先确定大系统间交互逻辑,未来模块内部可以进一步重构而不影响其它业务模块。在实施策略上,采取渐进的策略,分阶段实施。

  • 弹力设计篇之“认识故障和弹力设计”

    在确保系统正确性的前提下,系统的可用性是弹力设计保障的重点。

    2018 年 2 月 20 日

  • 作业一:

    请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?

    2020 年 10 月 31 日

  • 天猫双十一架构优化及应急预案

    每年的双十一,在整体架构上最依仗的是过去几年持续建设的稳定的服务化技术体系和去IOE带来整体的扩展性和成本的控制能力。本文总结了天猫在系统架构改造、应急预案经验等。

  • 黄晶谈人人网架构

    在2010年的QCon北京大会上,InfoQ的编辑对人人网产品技术高级总监黄晶进行了采访,其中他谈到了关于人人网从校内到现在所做的架构上的转变,还谈到了人人网创建并使用的两个开源项目。

  • 第三周 - 总结

    几个重要设计模式的总结

    2020 年 6 月 23 日

  • 架构师(1 月刊)

    InfoQ中文站的电子杂志《架构师》(2013年1月刊)出炉了。本期的主编是InfoQ中文站主编贾国清。1月份《架构师》杂志的主题是" 电商很忙",在2011年11月刊《架构师》上,InfoQ组织了题为“光棍节狂欢的背后——电商系统初探”的专题内容,主要从电商系统演进、购物袋实现和API设计等内容展开。时隔一年,电商系统究竟在技术支撑乃至运维上又有哪些提升和突破呢?

  • 唇亡齿寒,运维与安全

    今天我们来分享运维安全的内容,简要介绍一下我们的安全体系,以及每个系统与运维系统之间的关系。

    2018 年 3 月 23 日

  • 架构师训练营 - 第 2 周命题作业

    1.请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?

    2020 年 6 月 20 日

  • 春节特别策划 | 我们如何准备抵抗流量峰值?

    如果你是后端技术团队的负责人,在日常工作中,除了要完成产品提出的功能需求点之外,还要思考如何让系统平稳度过流量的高峰期。

    2020 年 1 月 24 日

发现更多内容

架构师训练营第八周作业

Geek_2dfa9a

第八周作业

李白

缓存思想在算法设计中的应用梳理

che-ri-sh

缓存

信创舆情一线--工信部开展APP侵害用户权益专项整治行动

统小信uos

从 1.9 到 1.11,聊聊 PyFlink 的核心功能演进(附 Demo 代码)

Apache Flink

flink

作业:链表交叉点

考尔菲德

TNFE-Weekly[第六十六周已更新]

莹姐🙈

小程序 前端 周报

架构师第八周

Tulane

总结

李朋

架构师训练营第八周总结

Geek_2dfa9a

第八周总结

李白

第八周课程总结

考尔菲德

如何让你的Nginx 提升10倍性能?

老大哥

Java

架构师训练营 - 第八周 - 作业

韩挺

架构师培训 -08 数据结构算法,网络通信协议,非阻塞网络I/O,数据库原理

刘敏

架构师训练营 - 第八周 - 学习总结

韩挺

查找两个单向链表合并元素

张磊

链表查找算法,HDFS数据节点宕机处理

dony.zhang

第八周课后作业

晨光

架构师训练营——第8周作业

jiangnanage

Java十大常用框架介绍(spring系+dubbo+RabbitMQ+Ehcache+redis)

BUZHIDAO

套娃成功!在《我的世界》里运行Win95、玩游戏,软件和教程现已公开!

程序员生活志

游戏 我的世界

第八周课后总结

晨光

第八周作业

Geek_a327d3

第8周

李朋

躬履艰难,其节乃见:华为陈黎芳眼中的全球责任

脑极体

六大自动化测试技巧

陈琦

自动化 测试

网络通讯

陈皮

架构师课作业 - 第八周

Tulane

Hadoop 中的 Namenode 和 Datanode

dongge

架构师课程第八周总结

dongge

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

双11后续报道:“中国规模”负载背后的技术支撑-InfoQ