“热点”场景你真的能驾驭吗?从事电商的朋友必看!

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 阿里P9技术大神胡炜为你解读

作者:阿里云数据库资深技术专家胡炜

做电商业务的朋友一定不会对“热点” 这个数据库的使用场景感到陌生,大卖家、热点商品、热点库存等等都会遇到,即使在阿里这样电商业务相对非常成熟的体系中“热点”也困扰了业务非常久, 原因就在于“热点”是一个对于数据库业务不太友好的场景, 粗放的利用数据库来存取“热点”业务一定会遇到问题。

1、前言

在标准的关系型数据库中,由于需要确保事务的ACID, 因此不同的事务在并发更新同一行记录的时候需要完全的串行化。在乐观并发控制的实现中, 并发的多个更新事务只有一个能成功,其他的全部回滚;在悲观并发控制的实现中,每一个更新要等待前一个持有该行的事务提交或者回滚释放了行锁之后才可以进行更新。

常用的开源MySQL就是悲观的加锁并发控制实现。下图是一个典型的热点事务, 一共包含5条事务,其中Q3即是对热点行的更新。

1.png

经典热点事务场景

在加锁这样的悲观并发控制实现下,数据库理论上只要每时每刻都有一个事务处于更新这一行的过程,那么总的吞吐量能达到最优,吞吐量为:

2.png

但是随着并发请求的数量上升, 线程的上下文切换开销以及锁等待、唤醒的开销都会非常明显,因此在大并发下整体吞吐呈明显的下降趋势:

下面是简单的热点更新测试性能表现,即所有事务对同一行进行更新:
图三.jpg

第一个朴素的想法是消灭锁等待, 因此在过往的AliSQL 以及 官方MySQL-8.0 中都提供了no_wait的功能, 这相当于将热点场景变成了乐观的并发控制, 当事务发现需要等锁的时候直接回滚。

另一个很朴素的优化思路是控制事务的并发请求量,首先可以通过线程池来限制住数据库内部的并发线程数,假设线程池内部总共有128个工作线程, 那么性能基本就能够稳定图2的128并发的吞吐量上。 再其次, 通过对同一行更新的事务进行排队,也可以减少InnoDB锁等待唤醒的开销。 这种优化可以让吞吐无限接近于1s/trxrt。

RDS三节点企业版提供了另一种思路的解决方案,也就是提供新的思路来达到增加“热点”场景吞吐的目的。

RDS企业三节点的针对热点的主要手段包括:

  • 缩短事务持有锁的时间
  • 组提交

2、缩短事务持有锁的时间

事务的持续时间包括数据库内核中各条SQL执行的时间以及客户端与数据库之间的网络交互时间,根据图1的经典热点事务场景模型, 一个热点事务包括5条SQL语句,以及9次客户端以及数据库之间的网络通信(最后commit 返回客户端前事务已经结束)。

3、select from update

Oracle 有returning语法来通过一条DML完成修改数据和返回数据的目的。三节点企业版支持select from update的语法, 支持将某条记录更新,同时返回查询结果, 具体用法如下:

4.png

有了这个特性, 我们很容易将图1中经典热点模型的Q3 和 Q4 进行合并,节约一次数据库内部执行Query的时间,并且节约两次客户端和数据库的网络通信开销。

4、Commit On Success / Rollback On Fail /Target Affect Row

一个非auto commit的连接如果需要提交一个事务,在通常情况下需要客户端额外给数据库发送一个commit请求, 为了减少这一次客户端和数据库的网络开销,RDS企业三节点提供了Commit On Success / Rollback On Fail / Target Affect Row 的hint 语法。

Commit on success / Rollback on fail 非常容易理解, 即热点行更新操作成功即自动commit事务, 如果更新失败则rollback整个事务。

这里如何定义成功/失败是一个需要理解的概念, 这里引入Target Affect Row的概念,即更新语句实际更新了几条数据, 如果Target Affect Row为1,则更新到了一条数据我们认为更新是成功, 如果更新的where条件没有命中任何记录则认为是失败,这样配合Commit on success / Rollback on fail就能够方便的实现业务的逻辑。需要注意的是这几个hint必须是伴随着热点update 语句使用的。

5.png

5、组提交热点事务

通过上一节的缩短事务持有锁的时间,我们能够缩短每个事务的运行时长,从而使得1s/trxrt 尽量增大, 同过这样的方式,我们能将单线程的吞吐增加到接近10000TPS/s的量级, 想让吞吐更进一步则非常困难。RDS企业三节点提供了另外一种组提交的方式,即对并发更新同一行的不同事务打包成一个group, 这个group对这行热点记录做一次合并更新, 这样就能让系统的吞吐再提升好几倍。

为了方便理解这个概念, 举个例子,假设现在同时有10个事务想要更新t1表上id = 3 的记录,这里假设每个事务的更新语句都是:

6.png

通过组提交的技术,RDS三节点企业版内核可以把这样的更新语句进行内部逻辑合并打包,实际上是将id为3这一行的b值更新为b-10.这样实际上对数据库的存储引擎就进行了一次更新就达到了顺序执行10个事务一样的效果,持有锁的时间可以大大缩短,并且对客户端的用户是透明的。产生的binlog也是和原来十个事务串行是一样的效果。启用组更新需要设置系统的变量:

7.png

组更新的效果可以通过全局的status来观测:

8.png

这里的Group_update_leader_count 代表着热点更新组的数量, Group_update_follower_count代表的是组里的事务数目, 两个值相除就能得到平均每组中事务的数目。这个值越大则组更新合并的效果越好。

6、总结

RDS企业三节点提供的热点更新功能能够将关系数据库在热点记录更新这一个场景的吞吐得到大规模提升, 也是在阿里巴巴内部的场景中有着非常广泛应用的特性。它能缩短每个事务持有锁的时间,也能打包一批事务做合并更新。

图二.jpg

当然组更新有启用的限制, 即需要在更新语句中带上commit_on_success的 hint, 也要确定在where语句中带有主键的等值条件,这样的更新语句数据库才会识别为走热点组更新的语句,并按照组提交的逻辑进行处理,一个组的事务或者全部成功,或者全部回滚, 即如果组中有一个事务的用户发起断开连接回滚事务的操作, 那么这个组中的所有事务都会回滚。

总而言之如果用户对热点场景有诉求,并且需要数据库提供高成功率的吞吐保障,可以对SQL稍微加以设计使用RDS企业三节点的高级热点功能。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
缓存 监控 安全
揭秘高并发神话背后:打造坚不可摧的秒杀系统,技术大牛必修课!
【8月更文挑战第29天】在设计高并发、高可用的分布式秒杀系统时,需关注系统架构、数据库设计、缓存策略、并发控制、降级限流及安全防护。采用微服务架构并通过API网关和负载均衡器通信;数据库设计需考虑分库分表与读写分离;利用Redis缓存热点数据;采用限流算法和排队机制控制并发;实施IP限流和验证码验证保障安全。以下为简化代码示例,展示如何在秒杀服务中实现预扣减库存和订单创建逻辑。此外,还需进行性能测试与优化,并设置监控和日志记录机制,确保系统稳定可靠。
84 1
|
5月前
|
小程序 前端开发 JavaScript
【电商新机遇】支付宝小程序如何助你打造爆款电商解决方案?揭秘背后的技术奥秘!
【8月更文挑战第27天】本文详细介绍如何利用支付宝小程序构建电商应用,覆盖从项目初始化、页面设计、功能开发到数据分析的全流程。首先,需注册开发者账号并安装相关工具;随后创建项目,并按示例配置基本页面结构;接着设计商品列表等界面布局;再实现商品展示等功能;最后运用支付宝提供的工具进行数据分析,以优化用户体验及营销策略。跟随本教程,您将能打造出一款完整的电商小程序。
113 1
|
5月前
|
安全 物联网 开发工具
《哇塞!flux.1 loras 竟如此神奇?十个问题带你揭开它的神秘面纱,开启震撼科技之旅!》
【8月更文挑战第20天】flux.1 LoraS 是一种基于LoRa的远距离、低功耗无线通信技术,适用于物联网领域。它利用扩频技术提升抗干扰性和传输距离,可在智能农业、物流等多种场景中部署。具备远距离传输、低能耗、高可靠性的特点,并支持AES-128加密确保安全通信。开发者可通过特定硬件和软件工具进行开发。随着物联网技术的发展,flux.1 LoraS 展现出广阔的应用前景。
103 2
|
8月前
|
缓存 负载均衡 网络协议
作者推荐 | 高并发挑战?试试这些架构优化篇技巧,让你的系统焕发新生!
作者推荐 | 高并发挑战?试试这些架构优化篇技巧,让你的系统焕发新生!
464 1
冰河与你聊聊大厂更加看重哪些能力?(建议收藏)
很多小伙伴问我是如何同时拿到 阿里、字节跳动、腾讯、京东、和美团百万年薪Offer的。今天我们就来简单的聊聊除了技术外,大厂还会看重哪些技能,从本质上说,除了技术,互联网大厂更看重这些基础能力!
188 0
冰河与你聊聊大厂更加看重哪些能力?(建议收藏)
|
存储 消息中间件 缓存
电商那些年,我摸爬打滚出的高并发架构实战干货
高并发是指在同一个时间点,有很多用户同时访问URL地址,比如:淘宝的双11、双12,就会产生高并发。又如贴吧的爆吧,就是恶意的高并发请求,也就是DDOS攻击,再屌丝点的说法就像玩LOL被ADC暴击了一样,那伤害你懂的。
电商那些年,我摸爬打滚出的高并发架构实战干货
|
存储 新零售 云安全
完美日记:一文详解新零售电商定制化安全法则
阿里云作为完美日记选择的安全合作伙伴,从原生数据、场景防护策略到业务风控,为其提供定制化整体安全方案。
1751 0
完美日记:一文详解新零售电商定制化安全法则
|
云安全 分布式计算 安全
划重点,早预习:疫情下的在线教育大考 | 开发者必读(157期)
没有人能预料到,新冠肺炎疫情在这个寒假肆虐,教育部随即下发一纸“停课不停学”倡议,全国范围内学生涌入在线课堂、行业渗透率瞬间暴增十倍,同时一些从未想过的问题摆在了在线教育企业面前:能否为如潮水般涌来的新用户提供优质的服务?如何在高峰值流量下维持系统稳定?怎样处理好团队协作、组织流程与教务管理?在有限的人力之下,技术如何才能发挥更大的作用?
关于微博的几点看法,互联网营销
  微博很热,于是就产生了研究一下的想法,在体验了新浪微博和嘀咕等之后,有了以下几点看法,欢迎大家补充:   1. 微博源于手机短信,这也是为何微博要限制140个字符的原因,正好是两个短信的长度。如果说QQ/OICQ是互联网上的寻呼机,那微博就是互联网上的短信。
1478 0
谈谈互动型网站中垃圾贴的应对方案,互联网营销
  在互动型网站中常常会受到垃圾贴的困扰。我分享一点个人在垃圾贴处理方面的一点心得:   要处理垃圾贴必然需要分析垃圾贴的特征  1. 在内容上垃圾贴通常会带有一个固定域名的外部链接,或者带有QQ号码,手机号码,或者重复内容;  2. 在发帖频率上有可能是某个用户或者某个IP在短时间内发别多个帖子;  3. 在手段上高级一点的垃圾贴可能用发贴机,可能会使用不同ip,并附带破解验证码的程序。
835 0