双十一天猫的“中国规模”负载
今年是双十一购物狂欢节的第五个年头,每一年这个时刻对于技术团队而言都是一次真刀实枪的数字战争。
一方面,我们会提前在产品和业务层面努力创新,力争在当天为消费者留下更优质的购物体验。
另一方面,全国人民的热情也是技术架构和细节不断优化的动力。
下面我就简单介绍下,今年双十一的准备过程中技术上的一些突破和亮点。
全链路压测
压力测试对于评估网站性能的重要性是不言而喻的,但是,无论是线下模拟的单一集群的压测,还是线上引流压测,都只是能够暴露一些基本的单点问题。对于双十一当天高峰期的真实压力模拟,这两种传统的压力测试方式还存在着巨大偏差。首先是业务处理链路的复杂性,对于像天猫这样的一个分布式处理平台,一笔交易的创建会涉及多个应用集群的处理,在能力评估时也应该考虑的是一个处理链路而不仅仅是单一应用集群的处理能力。其次是应用之外的风险点,像网络、DB等等,很难在传统压测中体现出来。
为了解决这些问题,今年阿里几个技术团队联合在一起,通过线上真实用户数据与人为测试数据相结合的方式,首次成功地在生产环境中模拟出相对真实的超大规模的访问流量,将前端系统、网络、DB等一整个系统环境完整地纳入压测范围,贴近实际的应用场景,为评估淘宝和天猫交易核心链路的实际承载能力提供有说服力的数据依据。一方面可以验证交易核心链路上各种限流和预案的准确性,另一方面也充分暴露了全链路上的各种瓶颈和隐藏风险点,让压力测试的工作真正落实到了确定性的层面上。
CDN 静态化
很多浏览型业务,例如天猫详情页、店铺等,是典型的静态数据偏多,动态数据偏少的应用。对于这种类型的应用集群,去年我们在架构上的主要工作就是通过静态化实现了动静分离,静态数据缓存在本地缓存,动态数据异步进行加载。改造前后单机QPS提升了10倍。
今年上半年我们在这个基础上,将本地cache改造成了统一的集中式缓存,这样,一方面降低了各个应用接入和维护cache的成本,另一方面加强了失效机制实时性和监控的自动化,更重要的是大大提升了缓存的命中率。
除此之外,为了进一步解决主站容量瓶颈,在统一cache层之上,我们把静态HTML内容直接缓存在CDN上。这样,静态数据的访问完全不用回流到主站机房,在离用户最近的CDN节点就能完成,用户端的响应速度自然得到了大大的提升。当然这个实现的过程远没有说起来这么简单,中间很多技术的难点,例如商品信息变更如何实现秒级的主动失效,如何保证节点到主站之间的网络稳定等等,这里先卖个关子,大家可以期待下双十一之后阿里技术团队的详细分享。
个性化算法
个性化技术已经逐渐被证明可以有效提高电商网站的流量分配效率,让消费者更容易找到自己想要的商品和品牌,让长尾商品和商家有机会获得精准的流量。
今年双11是天猫第一次在大促中脚踏实地的实行个性化,从PC 到无线,从“会场”到“我的双11”,都可以看到个性化在无形中提升天猫的消费者购物体验,让有潜在需求的买家更容易找到心仪的宝贝。
对个性化引擎而言,由于要进行复杂的算法运算:用户实时意图计算、相关商品检索、CTR 预估、“推荐解释”等等,活动当天系统承担的技术挑战更大,为了解决系统方面的压力,我们一方面优化了算法,将更多的算法移植到离线平台计算,另一方面,通过CDN,将大部分Item Based 算法结果做了静态化处理,目前cache 比例可以达到90%左右,整个天猫个性化引擎的集群已经可以在当天负载近百万QPS的推荐服务。
同时,双11用户行为与平常差异性较大,使得基于机器学习的用户行为偏好,需要针对双11增加品牌折扣度等特有的特征修正训练目标,避免产生偏差(bias)。
另外,一般来说,算法调优都通过线上测试来进行效果评估,通常需要数天到数周的时间,但是双11只有一天的机会,为了充分保证算法的线上效果,我们设计了离线评估系统,离线模拟线上效果,减少了对线上真实流量的依赖,降低了线上风险。
从这几天预热期的效果来看,对比运营人员制作的活动页面,个性化技术已经将加入收藏夹和购物车的转化率提升30%以上。
讲了这么多,不知道大家是否对双十一当天更加期待了呢?
2012年的双十一,淘宝总交易金额191亿,订单1亿零580万笔,其中无线支付近900万笔,生成15TB日志,核心MySQL集群一天支持了20亿个事务。
今年,让我们拭目以待,新的技术记录的诞生!
天猫产品技术部总监:庄卓然
参考推荐:
Web网页性能压测工具 ApacheBench 和 WebBench
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2019-12-15 23:06:54
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: 双十一天猫的“中国规模”负载 (米扑博客)