一个价值“千万”的秒杀场景参数优化

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS Agent(兼容OpenClaw),2核4GB
简介:        秒杀最早来自天猫双11各种商品的促销活动中,现在已经有很多业务场景在使用,比如抢红包,抢票等。其特点有三高:瞬时并发高,数据一致性高,热点更新频度高。这样三高的场景下往往给数据库造成极大的压力,大量更新数据库中的同一行,这样必然会产生锁等待,导致数据库的性能急剧下降的问题,很容易容易.
       秒杀最早来自天猫双11各种商品的促销活动中,现在已经有很多业务场景在使用,比如抢红包,抢票等。其特点有三高:瞬时并发高,数据一致性高,热点更新频度高。这样三高的场景下往往给数据库造成极大的压力,大量更新数据库中的同一行,这样必然会产生锁等待,导致数据库的性能急剧下降的问题,很容出现雪崩效应。笔者记得有一年春节,一个电视台定时在整点发放红包,结果由于压力太高,导致更新数据库红包数额的请求全部堆积,业务全部挂掉,面对这样的情况我们当时也束手无策。
      面对秒杀业务的场景,数据库成为了底层系统中最重要的瓶颈点,阿里经过几年的沉淀也诞生了很多的技术手段来进行优化,这里我们就重点讲一下底层数据所做的优化。当大量的并发更新同一条记录时,使用排队的方式来保证高并发下热点记录更新依然能保持较好的性能,为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来保护数据库,让你的数据库平稳过渡。下面我们来看一则生产案例。
screenshot
从上图中看到该数据库的活跃连接数最高的时候到达了1W,通过show processlist可以看到大量的并发更新
screenshot
我们来看一下数据库并发更新的TPS有多大:

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


screenshot

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

使用阿里云RDS就可以获得阿里的秒杀优化技术,还可获得阿里云DBA的技术服务,赶快来使用吧。
https://www.aliyun.com/product/rds/?spm=5176.7960203.237031.32.YoWkko
加入我们:
http://duang.alicdn.com/html/HJutlATe

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
运维 负载均衡 算法
MySQL MGR模式介绍
MGR是Mysql Group Replication(组复制)的缩写,Mysql5.7之后是以一个Mysql插件的形式集成在Mysql中,用于创建可伸缩、高可用、可容错的复制架构,是Mysql集群的一种形式
2897 0
MySQL MGR模式介绍
|
弹性计算 运维 监控
阿里云服务诊断评测报告
阿里云服务诊断评测报告
250 9
|
存储 SQL 分布式计算
搭建Mysql Cluster集群实现高可用
搭建Mysql Cluster集群实现高可用
506 0
|
NoSQL 安全 Redis
解决秒杀系统库存超卖问题:乐观锁与Redis分布式锁的应用
解决秒杀系统库存超卖问题:乐观锁与Redis分布式锁的应用
3322 0
|
Java Android开发
vscode+java开发环境中文乱码问题~
vscode+java开发环境中文乱码问题~
1375 0
|
缓存 供应链 监控
商品系统架构设计与实践
商品系统架构设计与实践
1016 0
|
消息中间件 存储 算法
RocketMQ 消息集成:多类型业务消息——定时消息
本篇将继续业务消息集成的场景,从使用场景、应用案例、功能原理以及最佳实践等角度介绍 RocketMQ 的定时消息功能。
RocketMQ 消息集成:多类型业务消息——定时消息
|
Prometheus 监控 Cloud Native
生产环境使用二进制安装Prometheus+Grafana监控系统
生产环境使用二进制安装Prometheus+Grafana监控系统
978 0
|
Oracle JavaScript 安全
MySQL 8.0 OCP (1Z0-908)有中文考试了
注册vue和oracle帐号,现在vue和oracle改版了,注册出来的帐号是同一个帐号和密码,请按下面步骤操作
647 0
|
SQL 关系型数据库 MySQL
阿里云慢SQL优化挑战大赛分析
阿里云慢SQL优化挑战赛,本次慢SQL优化挑战赛的题目全部来自于生产案例,将众多考察点揉合到一条SQL中,主要考虑了以下方面:表设计,索引优化,执行计划等优化知识,同时将历年生产中遇到的SQL优化案例进行总结分析,希望能够帮助到更多的开发者。
15066 1