一个价值“千万”的秒杀场景参数优化
一个 优化 参数 场景 价值 秒杀 千万
2023-09-14 08:59:39 时间
秒杀最早来自天猫双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来保护数据库,让你的数据库平稳过渡。下面我们来看一则生产案例。
从上图中看到该数据库的活跃连接数最高的时候到达了1W,通过show processlist可以看到大量的并发更新
我们来看一下数据库并发更新的TPS有多大:
可以看到数据库中的活跃连接数非常高,每秒的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)
从上图可以明显的观察到,通过打开数据库的限流开关,数据库的活跃连接数在300左右,同时数据库的TPS也没有再出现很大的波动,这样很好的保护住了DB。
使用阿里云RDS就可以获得阿里的秒杀优化技术,还可获得阿里云DBA的技术服务,赶快来使用吧。 https://www.aliyun.com/product/rds/?spm=5176.7960203.237031.32.YoWkko 加入我们: http://duang.alicdn.com/html/HJutlATe
聊个简单的话题:如何分析性能需求? 一般来说,云服务的可用区,可以理解为同一个机房的不同虚拟机集群。为了避免某个可用区由于网络硬盘等原因损坏导致服务不可用,跨可用区的服务部署是一种常见的容灾手段。
从零开始打造简易秒杀系统(一):防止超卖 本文主要是通过实际代码讲解,帮助你一步步搭建一个简易的秒杀系统。从而快速的了解秒杀系统的主要难点,并且迅速上手实际项目。
【推荐系统】如何解决冷启动问题 角度1:为了准确匹配用户的需求,解决信息超载问题,各大互联网都有个性化的推荐系统,但是在建立该系统初期,没有大量用户数据,或者系统中的商品是新添加的,那应该推荐给哪些用户的问题。
冷启动系统优化与内容潜力预估实践 本专题共8篇内容,包含每平每屋过去一年在召回、排序和冷启动等模块中的一些探索和实践经验,本文为该专题第一篇。
从上图中看到该数据库的活跃连接数最高的时候到达了1W,通过show processlist可以看到大量的并发更新
我们来看一下数据库并发更新的TPS有多大:
可以看到数据库中的活跃连接数非常高,每秒的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)
从上图可以明显的观察到,通过打开数据库的限流开关,数据库的活跃连接数在300左右,同时数据库的TPS也没有再出现很大的波动,这样很好的保护住了DB。
使用阿里云RDS就可以获得阿里的秒杀优化技术,还可获得阿里云DBA的技术服务,赶快来使用吧。 https://www.aliyun.com/product/rds/?spm=5176.7960203.237031.32.YoWkko 加入我们: http://duang.alicdn.com/html/HJutlATe
聊个简单的话题:如何分析性能需求? 一般来说,云服务的可用区,可以理解为同一个机房的不同虚拟机集群。为了避免某个可用区由于网络硬盘等原因损坏导致服务不可用,跨可用区的服务部署是一种常见的容灾手段。
从零开始打造简易秒杀系统(一):防止超卖 本文主要是通过实际代码讲解,帮助你一步步搭建一个简易的秒杀系统。从而快速的了解秒杀系统的主要难点,并且迅速上手实际项目。
【推荐系统】如何解决冷启动问题 角度1:为了准确匹配用户的需求,解决信息超载问题,各大互联网都有个性化的推荐系统,但是在建立该系统初期,没有大量用户数据,或者系统中的商品是新添加的,那应该推荐给哪些用户的问题。
冷启动系统优化与内容潜力预估实践 本专题共8篇内容,包含每平每屋过去一年在召回、排序和冷启动等模块中的一些探索和实践经验,本文为该专题第一篇。
相关文章
- 当科技成为潮流,下一个新十年的未来应该如何畅想?
- 手写 Vue3 响应式系统:核心就一个数据结构
- Vue Loader 篇(下):编写一个单文件 Vue 组件
- 我上线了一个炫酷的项目实战教程网站,可能有的小伙伴还不知道...
- 怎样判断一个关键词的优化难度?
- 2022-12-30:某天小美进入了一个迷宫探险,根据地图所示,这个迷宫里有无数个房间序号分别为1、2、3、...入口房间的序号
- 【ES三周年】实现一个简单的推荐业务
- 一个简化 Java 应用升级的开源项目:EMT4J
- 如何写出高质量的代码 -- 给所有编程学习者的一个建议
- 一个数据库十年老兵的思考与总结
- SQLServer 错误 41349 警告:为包含具有持续性 SCHEMA_AND_DATA 的一个或多个内存优化表的数据库启用了加密。 不会对这些内存优化表中的数据加密。 故障 处理 修复 支持远程
- 一个高并发量网站优化的解决方案详解架构师
- java socket简单写了一个即时通讯工具(代码有待优化。)详解编程语言
- 如何衡量一个开源社区的健康度
- 人工智能需要一个什么样的”帮手”?
- Linux当前目录指引:探寻另一个世界(linux表示当前目录)
- “小米数科”改名“天星数科”,雷军能再造一个“蚂蚁集团”吗?
- PHP的一个基础知识表单提交
- mysqlprompt一个特别好用的命令
- 自己使用jquery写的一个无缝滚动的插件