博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
阿里价值“千万”的秒杀场景参数优化
阅读量:7251 次
发布时间:2019-06-29

本文共 1453 字,大约阅读时间需要 4 分钟。

秒杀最早来自天猫双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来保护数据库,让你的数据库平稳过渡。下面我们来看一则生产案例。

 

20160601105927665.png

 

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

 

20160601105942995.jpg

 

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

 

20160601110040626.png

 

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

 

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

20160601110108535.png

 

20160601110101831.png

 

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

 

20160601110121635.png

20160601110129415.png

 

作者介绍  罗龙九

  • 玄惭,阿里云资深DBA专家;

  • 有着丰厚的DBA经验,经历阿里历年双11考验,保持着“无一丢单”的优异纪录。同时积累了6年对阿里云数据库用户的运维、调优、诊断等丰富的经验。

本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2016-06-01

转载地址:http://daebm.baihongyu.com/

你可能感兴趣的文章
POJ 1151 Atlantis (线段树)
查看>>
在sqlserver中如何根据字段名查找字段所在的表
查看>>
quality center 11备份最佳方案测试通过可用
查看>>
一本比较简单易懂的中文python入门教程
查看>>
CDN和双线机房相比有何优势
查看>>
soapui not supported the auto complete
查看>>
Tomcat配置并启用HTTPS
查看>>
javascript调用WebService - Hello World
查看>>
【Tomcat】Servlet 工作原理解析
查看>>
C#设计模式(19)——状态者模式(State Pattern)
查看>>
UVA 10173 Smallest Bounding Rectangle(最小外接矩形)
查看>>
Top 126 Ajax Tutorials
查看>>
艾伟:.NET : 如何保护内存中的敏感数据?
查看>>
艾伟_转载:[原创]再谈IIS与ASP.NET管道
查看>>
一起谈.NET技术,实战ASP.NET大规模网站架构:Web加速器
查看>>
微软等厂商高管谈安全云面临的挑战
查看>>
RSA大会主角 云安全
查看>>
微软BI 之SSAS 系列 - 多维数据集维度用法之三 多对多维度 Many to Many
查看>>
C#Winform程序如何发布并自动升级(图解)
查看>>
Linux环境下VI/VIM编辑文件时无权限保存的解决方法
查看>>