阿里双11大促秒杀活动下的缓存技术与高水位限流实现

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 秒杀最早来自天猫双11各种商品的促销活动中,现在已经有很多业务场景在使用,比如抢红包,抢票等。其特点有三高:瞬时并发高,数据一致性高,热点更新频度高。这样三高的场景下往往给数据库造成极大的压力,大量更新数据库中的同一行,这样必然会产生锁等待,导致数据库的性能急剧下降的问题,很容出现雪崩效应。

秒杀最早来自天猫双11各种商品的促销活动中,现在已经有很多业务场景在使用,比如抢红包,抢票等。其特点有三高:瞬时并发高,数据一致性高,热点更新频度高。这样三高的场景下往往给数据库造成极大的压力,大量更新数据库中的同一行,这样必然会产生锁等待,导致数据库的性能急剧下降的问题,很容出现雪崩效应。

记得有一年春节,一个电视台定时在整点发放红包,结果由于压力太高,导致更新数据库红包数额的请求全部堆积,业务全部挂掉,面对这样的情况我们当时也束手无策。

面对秒杀业务的场景,数据库成为了底层系统中最重要的瓶颈点,阿里经过几年的沉淀也诞生了很多的技术手段来进行优化。主要包括以下几个方面:

. 业务流程优化
. 访问来源优化
. 流量控制

业务流程优化

以淘宝的交易订单为例,在共享服务平台模式下,订单创建流程需要调用超过200个服务,如果以严格的顺序调用的方式,哪怕每一个服务调用都控制在20ms以内,那么完成一个订单也需要4s的时间,远远超过了用户的忍耐极限。

另外,顺序调用会导致对系统资源的过度占用,给服务器整体的吞吐量产生巨大影响。

因此,对于有严格先后顺序的服务保持顺序调用,对于能够同步执行的服务均采用异步化的方式处理。

从数据库层面,实现的核心技术就是采用数据库事务的异步化。也就是将大事务拆分成小事务,同样根据以上原则,进行相对异步化处理。(在该过程中,最重要的是要控制程序或者业务异常时,不会导致结果不一致,或支持有效的回滚和重试机制。)

访问来源优化

在传统的数据库访问中,一次SSD盘数据访问在几十微秒,一次SATA盘数据访问在几十毫秒,而内存数据库的操作时间是纳秒级的,因此通过缓存技术改变业务访问的数据来源从而提高系统性能和吞吐量的技术被各大企业的互联网应用广泛使用。

淘宝在业务的发展过程中,也不断通过缓存技术的研究和应用的改进高性能。

早期通过缓存实现应用分布式session,以避免应用实例间会话的复制,后来发展为将缓存用于业务去重判断、交易快照、图片索引等场景,最后 替换数据库在业务交易处理中的职能。缓存在业务中扮演越来越重要的角色。

流量控制

接下来我们重点讲一下底层数据所做的优化。当大量的并发更新同一条记录时,使用排队的方式来保证高并发下热点记录更新依然能保持较好的性能,为threads_running设置一个硬上线,当并发超过此值是,拒绝执行sql,保护MySQL,我们将这个称之为高水位限流,这样就给数据库加上了一层限流的功能,使得数据库不被瞬间的高爆发请求打爆。

高水位限流实现:

监控系统status变量threads_running,当满足拒绝条件,拒绝执行sql,返回用户:MySQL Server is too busy,判断逻辑在dispatch_command中,sql解析之后。

增加的系统variables:

1 threads_running_ctl_mode: 限流的sql类型,有两个取值:[ALL | SELECTS],默认SELECTS,设置为ALL需谨慎。
2 threads_running_high_watermark: 限流水位值,只有threads_running超过此值才会触发,默认值为max_connections,当set global threads_running_high_watermark=0时自动设置为max_connections。

拒绝必要条件:

1 .threads_running超过threads_running_high_watermark。
2 .threads_running_ctl_mode与sql类型相符。


以下情况不拒绝:

1 用户具有super权限。
2 sql所在事务已经开启。
3 sql为commit/rollback。

阿里云的RDS已经集成了阿里秒杀场景下的参数优化,所以如果你的应用场景中具有大量并发更新同一行记录的场景,可以打开数据库的限流参数:threads_running_ctl_mode和threads_running_high_watermark来保护数据库,让数据库平稳过渡。

下面我们来看一则生产案例。

b11202a509b7731f788a05f6cca0a48f85b2064b

从上图中看到该数据库的活跃连接数最高的时候到达了1W,通过show processlist可以看到大量的并发更新

cfe12d9116ca498b571d3835da6d19f28e8bdae4

我们来看一下数据库并发更新的TPS有多大:

a2aaec3288cc3bc4a7cc020b7b1dbd1d1ab38eb5

可以看到数据库中的活跃连接数非常高,每秒的update非常不稳定。

我们在把限流开关打开后看一下性能表现:

mysql> set global  rds_threads_running_high_watermark=300;

Query OK, 0 rows affected (0.00 sec)

mysql> set global  rds_threads_running_ctl_mode='all';

Query OK, 0 rows affected (0.00 sec)
faa45de2f4fafc0eb96ab16abe7c8b800a1f4c5b

从上图可以明显的观察到,通过打开数据库的限流开关,数据库的活跃连接数在300左右,同时数据库的TPS也没有再出现很大的波动,这样很好的保护住了DB。

3a7e63d80c6c1688cba7e61a52680561cf6b5c69

双11至今为止发展为中国乃至全球最成功的大型促销活动。用户对系统性能的极致追求业务的巨大压力给整个系统的建设和运维管控都提出了很高的要求。而阿里正是在这样的大促秒杀活动中,积累了相当丰富的架构设计经验和平台开发能力。


原文发布时间为:2018-02-5

本文作者:Alibaba

本文来自云栖社区合作伙伴“数据和云”,了解相关信息可以关注“数据和云”微信公众号

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
监控 Java 双11
Sentinel底层如何计算京东双十一线上系统实时QPS
【10月更文挑战第19天】随着电子商务行业的快速发展,双十一已成为全球最大的购物狂欢节。京东作为中国领先的电商平台,每年的双十一活动都会迎来巨大的流量高峰。为了保障系统在高并发情况下的稳定运行,京东采用了多种技术手段来应对。
38 0
|
7月前
|
人工智能 监控 安全
百万并发,API 网关抗住了亚运会流量高峰
本文主要介绍作为亚运会所有核心流量的入口,阿里云推出了一款百万并发规格的 API 网关,抗住了亚运会流量高峰,为亚运会提供强大的技术支持。
|
7月前
|
消息中间件 Java 程序员
阿里巴巴高并发架构到底多牛逼?是如何抗住淘宝双11亿级并发量?
众所周知,在Java的知识体系中,并发编程是非常重要的一环,也是面试的必问题,一个好的Java程序员是必须对并发编程这块有所了解的。
|
消息中间件 负载均衡 Serverless
「5分钟打造应对流量洪峰的商城交易系统」清理及后续
【重要】体验完成后,如果您无需使用云消息队列RocketMQ 版、SAE和SLB,请按照如下操作及时清理和释放资源。
314 0
|
消息中间件 缓存 监控
小记 | 一周上线百万级高并发系统
本文是鱼皮在腾讯实习期间,从零开始一周紧急上线百万高并发系统的相关经验、思路及感悟,分享给大家。花 5 分钟阅读本文,你将收获:1. 加深对实际工作环境、工作状态的了解2. 学习高并发系...
651 0
|
Web App开发 SQL 监控
年度大促将至,企业如何进行性能压测
随着无线设备的普及和 5G 的大力建设,越来越多的线上系统、小程序成为了人们生活中必不可少的工具。与此同时,年底各类大促活动接踵而至,对于这些电商软件而言,都会面对一个问题:系统能承受多少用户同时访问,面对突发的流量洪峰,能否保证系统无故障稳定运行?下文将为你带来解答~
年度大促将至,企业如何进行性能压测
|
存储 缓存 数据库
百万QPS系统的缓存实践
标题有些吸引眼球了,但并不浮夸,甚至还会远远超过百万,现在的平均响应时间在1ms内,0.08ms左右 如此高的QPS,如此低的AVG,为什么会有如此效果,关键点可能就在多级缓存上 在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流
666 0
百万QPS系统的缓存实践
|
运维 监控 Java
日均千万级消息规模,深捷旅使用函数计算释放运维压力
函数计算可以监听多种数据源,通过监控处理业务量的变化,快速进行自适应的扩缩容操作, 通过毫秒级的扩容,可以获得线性增长的业务处理能力。
1799 7
日均千万级消息规模,深捷旅使用函数计算释放运维压力
|
缓存 NoSQL JavaScript
每秒100W请求,12306秒杀业务,架构如何优化?
12306类业务,并发量很高,几乎所有的读写锁冲突都集中在少量数据上,难度最大
2611 0
每秒100W请求,12306秒杀业务,架构如何优化?
|
存储 运维 架构师
在线教育流量暴涨 阿里云PolarDB分钟级扩容保障教育平台不“卡顿”
疫情期间,停课不停学,在线课堂成为首选模式,由此带来流量洪峰。2月17日,开学第一天,包括学习通、慕课网等在内的多家在线教育平台出现“卡顿”和“死机”,而阿里云数据库通过分钟级扩容,保障了沪江教育、猿辅导、VIPKID、洋葱学院等多家教育平台的平稳。
357 0
在线教育流量暴涨 阿里云PolarDB分钟级扩容保障教育平台不“卡顿”