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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 秒杀最早来自天猫双11各种商品的促销活动中,现在已经有很多业务场景在使用,比如抢红包,抢票等。其特点有三高:瞬时并发高,数据一致性高,热点更新频度高。这样三高的场景下往往给数据库造成极大的压力,大量更新数据库中的同一行,这样必然会产生锁等待,导致数据库的性能急剧下降的问题,很容出现雪崩效应。

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

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

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

1 业务流程优化
2 访问来源优化
3 流量控制

业务流程优化

以淘宝的交易订单为例,在共享服务平台模式下,订单创建流程需要调用超过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来保护数据库,让数据库平稳过渡。

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

f88bb897b1fd39856e2340f5505bc01a94b27bbf

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

3b453927c6b6ed1e80b4e76df22ce62be46ea662

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

fc6e798d2c7f61461b30312b1519c8826f5b6dbb

可以看到数据库中的活跃连接数非常高,每秒的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)

f9cd688de2f5d47aa4969284abf9de4703371535

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

23e8d5a5fb97aa1bdd0f0070aff79276d4e9e8e0

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


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

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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
8月前
|
缓存 负载均衡 网络协议
电商API接口性能优化技术揭秘:缓存策略与负载均衡详解
电商API接口性能优化是提升系统稳定性和用户体验的关键。本文聚焦缓存策略与负载均衡两大核心,详解其在电商业务中的实践。缓存策略涵盖本地、分布式及CDN缓存,通过全量或部分缓存设计和一致性维护,减少后端压力;负载均衡则利用反向代理、DNS轮询等技术,结合动态调整与冗余部署,提高吞吐量与可用性。文中引用大型及跨境电商平台案例,展示优化效果,强调持续监控与迭代的重要性,为电商企业提供了切实可行的性能优化路径。
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
存储 缓存 负载均衡
从零到一:分布式缓存技术初探
分布式缓存通过将数据存储在多个节点上,利用负载均衡算法提高访问速度、降低数据库负载并增强系统可用性。常见产品有Redis、Memcached等。其优势包括性能扩展、高可用性、负载均衡和容错性,适用于页面缓存、应用对象缓存、状态缓存、并行处理、事件处理及极限事务处理等多种场景。
766 1
|
存储 缓存 数据库
缓存技术有哪些应用场景呢
【10月更文挑战第19天】缓存技术有哪些应用场景呢
|
存储 缓存 运维
缓存技术有哪些优缺点呢
【10月更文挑战第19天】缓存技术有哪些优缺点呢
|
存储 缓存 NoSQL
阿里面试题:缓存的一些常见的坑,你遇到过哪些,怎么解决的?
阿里面试题:缓存的一些常见的坑,你遇到过哪些,怎么解决的?
139 1
|
9月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
4月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
|
5月前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
268 1
Redis专题-实战篇二-商户查询缓存