秒杀最早来自天猫双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来保护数据库,让数据库平稳过渡。

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

从上图中看到该数据库的活跃连接数最高的时候到达了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。

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

限流、异步是必要是技术手段,而我们也看到,缓存技术的发展给秒杀业务的响应带来质的突变,随着缓存技术的逐步完善和发展,缓存技术将会在互联网应用场景中扮演越来越重要的角色。

资源下载

关注公众号:数据和云(OraNews)回复关键字获取

‘2017DTC’,2017DTC大会PPT

‘DBALIFE’,“DBA的一天”海报

‘DBA04’,DBA手记4经典篇章电子书

‘RACV1’, RAC系列课程视频及ppt

‘122ARCH’,Oracle 12.2体系结构图

‘2017OOW’,Oracle OpenWorld资料

‘PRELECTION’,大讲堂讲师课程资料

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

  1. 阿里云 MSE 云原生网关助力斯凯奇轻松应对双 11 大促

    客户简介 斯凯奇(SKECHERS)1992 年诞生于美国加州,如今已遍布全球 170 多个国家地区.在美国是仅次于耐克的第二大鞋类品牌.2020 年 11 月斯凯奇宣布与阿里云达成合作,加速数字化升 ...

  2. 蚂蚁金服天街:蚂蚁双11大促OceanBase核心技术全解析

    演讲嘉宾简介:田启杰(花名:天街) 现任蚂蚁金服高级技术专家,2012年加入OceanBase 团队,曾五次作为OceanBase负责人承担双11大促保障工作,致力于OceanBase 提供高可用/高 ...

  3. Lazada双11大促玩法规则解读,2022备战清单来袭!

    双11大促商家自检清单 01.营销工具 (1)代金券 Voucher [11.03-11.10发放]发送大促优惠券,大额优惠券冲击力更强 [分析]当领取率超过80%,及时增加库存数量;当领取率低于20 ...

  4. 阿里达摩盘:双11大促人群诊断、DEEPLINK洞察、大促标签定制

    作者介绍 画像数据产品@草帽小子 <大数据实践之路:中台+分析+应用>核心作者 著有用户画像.标签体系.广告投放等系列文章 人人都是产品经理专栏作家 "数据人创作者联盟" ...

  5. 转转集团二手双11大促:长沙用户“秒杀”99新iPhone12成首单

    11月11日消息,昨晚八点后,双11迎来高潮时刻.转转集团数据显示,11月10日晚8时该集团二手双11盛典大促开始后,卖出的首单商品为一部99新iPhone12,由长沙用户一秒下单从转转卖场入手. 据 ...

  6. 京东双 11 大促价疑遭提前泄露;库克:iPhone 11 中国定价策略成功;GitLab 重大安全版本更新 | 极客头条...

    整理 | 屠敏 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友 ...

  7. 唯品会2017年双11大促技术保障实践,全域提供25万QPS服务能力

    作者简介: 刘惊惊,唯品会业务架构部高级架构师,负责唯品会电商平台的用户系统,营销系统和库存系统的架构设计工作.2016年加入唯品会,参与了唯品会电商系统的大重构,负责多个核心系统的梳理和大促准备.  ...

  8. 蚂蚁金服双 11 大促全面揭秘:百万支付、容器化和平台智能化

    你们都很关心的 "OB双11大促实战分享" 专题来啦!本文将为你系统性地介绍OceanBase支撑蚂蚁双11背后的技术原理和实战分享. 从平台到架构,再到实现,一起来探索蚂蚁双11 ...

  9. 《程序员》:唯品会双11大促技术保障实践

    作者简介: 刘惊惊,唯品会业务架构部高级架构师,负责唯品会电商平台的用户系统,营销系统和库存系统的架构设计工作.2016年加入唯品会,参与了唯品会电商系统的大重构,负责多个核心系统的梳理和大促准备. ...

最新文章

  1. BTC 再陷横荒之力,BCH 或成破局良器
  2. oss导出数据为空时怎么处理_数据库导出时有空表导不出的解决方法
  3. conflicting types for xx错误
  4. J.U.C系列(六)ForkJoin的使用
  5. GitHub Actions,卧槽!牛批!
  6. 李争——一个骨子里是极客的程序员
  7. 55 MM配置-评估和科目设置-定义账户分类参考
  8. 蓝桥杯 ALGO-160 算法训练 P0104
  9. java类加载器ClassLoader浅析
  10. linux运行blast,Linux下BLAST的使用
  11. [朝气蓬勃][22H2]Win11.0.22622.450专工-微创-优化
  12. 阿尔法编程python答案_C语言程序设计-阿尔法编程(编程答案)
  13. 【c++】——函数的堆栈调用详细过程
  14. 第三章 半导体中载流子的统计分布
  15. springboot配置打印日志文件
  16. 02- pandas 数据库 (数据库)
  17. Linux 学习--一篇就学懂Linux(万字长文)
  18. 计算机专业职业生涯规划书word,计算机专业职业生涯规划书word文档
  19. 简述区块链架构设计,通俗易懂
  20. vue页面转docx下载

热门文章

  1. 涉足荒野script_为什么社区经理必须涉足(而不是潜入)社区
  2. 开源创新的理念_开源如何解决创新问题
  3. Java 8 API Stream让List操作更便捷
  4. 网页嵌入对象(图片、视频、网页)
  5. 二.激光SLAM框架学习之A-LOAM框架---介绍及其演示
  6. 基于matlab的电子时钟,基于LCD1602电子时钟毕业设计报告.doc
  7. ipython vim_python 之ubuntu开发环境vim 和 ipython
  8. java参数值注入_在springboot中使用注解将值注入参数的操作
  9. 图像处理---《Canny 边缘检测》
  10. 03 Java 修饰符