`
cfyme
  • 浏览: 263224 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

mysql如何解决热点数据更新问题

 
阅读更多

原文地址:http://blog.itpub.net/22664653/viewspace-1269948

 

一  背景

     某个业务线 商品开放开用户申请免费试用,当某个商品特别吸引人时,比如iPhone6 。肯定有一大波人为了少卖一个肾 疯狂去抢申请资格。有甚者利用机器人申请注册,于是简单的申请操作变成了秒杀行为. 大量请求同时更新数据库中的同一个商品的申请次数,update 操作给表加上行锁,导致后面的请求全部排队等待前面一个update完成,释放行锁后才能处理下一个请求。大量后来请求等待,占用了数据库的连接。一旦数据库连接数被占满,就会导致后来的全部请求因拿不到连接而超时,业务请求出现无法及时处理的情况,数据库系统的RT会异常飙高,业务层由于等待出现超时,app 层的连接耗尽,一系列的雪崩效应!

 

二 解决方案

     从上面的背景分析,解决热点数据并发更新需要注意核心问题: 减少直接对db层数据热点的并发更新,本文从业务和数据库的设计层面来规划.同时也希望大家提更好的解决思路。

1 前端层面

   前端是整个流量的入口, 正常业务访问时系统表现平稳,但是当有人恶意请求时,需要加上流控措施,比如常见的

   a 需要用户回答问题,填写验证码,移动图像等等,防止或者减少有机器人来恶意请求。 

   b 页面上采用防止机器人的判断 两秒以内的成功请求一律拒绝。

   c 通过设置nginx ,对同一个ip源的请求次数做限制,防止机器人来申请。 

  优点 有效减少或者防止有人利用机器人恶意请求

  缺点 存在一定的误杀率,错杀了正常的请求。 

 

2  应用层

    应用程序接收前端前端请求,进行一系列的数据库操作,在我们规避了恶意请求之后如果还是有大量的数据库写访问请求,我们需要

    a 对业务做降级

 

限制接口的调用次数,降低对数据库的请求压力。

 

选择不更新请求次数,弱化该商品申请次数的展现。类似于阅读次数,申请次数 ,与金额,库存无关的功能点。

    b 通过异步更新来避免直接写数据库 。

      应用使用分布式缓存(比如tair)来存储某项商品的申请次数或者某人的申请次数,以商品id/user_id 或者将where 条件作为key,申请试用人数为value/符合某项具体条件的 count结果为value, 有用户申请成功则更新申请试用人数。不需要查询和实时写数据库,每隔一定时间/次数将结果写入数据库。

      优点:该方法完全依赖于缓存,读写速度快,不需要实时更新数据库,减轻数据库并发写的压力;

      缺点:缓存不是100%稳定,很容易丢,即使采用持久化的缓存,在高并发下有时也可能会出现异常,穿透缓存到db ,导致前端业务展现问题。

    

3 数据库层

    a 将热点数据拆分,分在不同的库不同的表中,分散热点数据,减轻数据库并发更新热点带来的RT升高和应用连接等待时能保证业务能够正常访问其他商品表,损失局部可用性。 

    优点:实时读写数据库,前端展示数据的准确性。

    缺点:业务逻辑稍显复杂。

   b 限流补丁

     针对某些特定的sql语句 从MySQL 层面加以限制,当系统thread_running达到一定值或者某个sql执行时间超过一定阈值则拒绝该sql的执行。(阿里内部已经实现限流版本)

   c 使用MySQL的 thread pool 功能。在并发较大时,one to one的模式会引起Innodb的mutex锁争用。当前解决方法是通过innodb_thread_concurrency参数,但是该参数自身也存在锁争用,同样影响了MySQL的性能。

优点:thread pool主要从四个方面考虑:减少SQL并发,使得有足够的资源:使用线程组,独立管理:使用优先级队列,限制并发执行的事务:避免死锁。

缺点:在测试过程中发现,会有大量的连接等待kernel mutex锁,但是持续的压力会导致MySQL的thread running飙高,最终导致MySQL不可用。

三 小结

     在电商类业务中数据库的热点/单点更新 一直是DBA和业务方比较关心的问题,它最直观的影响用户体验,比如商品的超卖,系统的可用性。需要不断的细化解决思路和具体实现比如 热点商品的属性是否实时更新 ,库存数量需要实时展示,访问次数,请求次数可以异步延迟展示。本文只是简单阐述了 对热点更新的解决思路,还有不完善的地方,欢迎给位提供更好的建议。

 

 

分享到:
评论

相关推荐

    JAVA毕业设计之医疗挂号管理系统(springboot+mysql)完整源码.zip

    Redis:一款高性能的键值对缓存数据库,用于缓存系统中的热点数据,提高系统性能。 Bootstrap:一款前端UI框架,用于构建响应式的用户界面,提高用户体验。 jQuery:一款轻量级的JavaScript库,用于简化前端开发,...

    Java知识点之Redis篇.pdf

    1.3 MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据 1.4 Memcache 与 Redis 的区别都有哪些? 1.5 Redis 常见的性能问题都有哪些?如何解决? 1.6 redis 最适合的场景 1.7 ...

    2020 DTC 数据技术嘉年华演讲PPT汇总.zip

    大规模多种数据库热点SQL质量分析 AnalyticDB,金融级云原生数据仓库及最佳实践 OceanBase分布式数据库的新征程 TiDB数据驱动的企业智能化转型新方向 检验国产分布式事务数据库技术架构与核心算法的方法论--热璞...

    数据分页程序完全解决方案(含普通分页/分段分页/原始分页/since_id分页)

    7) 在没有快照系统的时候, 我们可以用since_id的方式限定数据范围, 模拟快照系统, 可以解决大多数问题 8) 要使用since_id方式模拟快照, 其数据集排序规则必须有能够唯一标识其每一个数据的字段(可能是复合的) 4. ...

    Redis面试题50道(含答案)_.pdf

    如何保证 Redis 中的数据都是热点数据? 13、Redis 有哪些适合的场景? 14、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个? 15、Redis 和 Redisson 有什么关系? 16、Jedis 与 Redisson 对比有什么优缺点? 17...

    03开源NewSql数据库TiDB-Deep Dive into TiDB

    支持手动 Split Region,可用于处理单 Region 热点的问题 支持打散指定 Region,用于某些情况下手动调整热点 Region 分布 增加配置参数检查规则,完善配置项的合法性较验 5.调试接口 增加 `Drop Region` 调试接口...

    轻开电子商务系统(企业入门级B2C网站)20150617更新

    积分方式、如何购买、定购流程、配送方式、退换货政策、常见热点问题、投诉与建议、公司简介、诚聘英才、客户服务等均可更新成您的信息 3 硬件需求 3.1 基本配置 配件 数量 CPU 2核 内存 4G 硬盘 100G 3.2 最低...

    基于JavaEE的旅游网站-基于SpringBoot的旅游管理系统论文参考

    现代科技不断发展,人们生活水平不断的提高,解决温饱问题已经不再是人们关注的重点,现在更多关注的是精神满足的问题。近几个年来,不论是在寒暑假期、还是国庆假期,出游人数都在不断的增加,从这些数据也证明着...

    毕设之springboot微信小程序的点餐系统(源码+部署说明+SpringBoot+微信小程序+vue).zip

    数据缓存:使用Redis缓存热点数据,提高系统性能 部署说明: 后端:将后端代码部署到服务器上,配置好数据库、Redis、RabbitMQ等环境,启动项目即可 前端:将前端代码部署到服务器上,配置好Nginx反向代理,启动...

    weixin027校园二手平台的设计与实现+ssm--论文pf.rar

    Redis:作为缓存数据库,用于存储热点数据,提高系统的响应速度。 Bootstrap:作为前端框架,提供了丰富的界面组件,使得平台具有良好的用户体验。 在功能方面,本平台主要包括以下几个模块: 用户模块:包括用户...

    数据库设计文档(样例).doc

    现在,随着企业对数据可用性认识的加深,关键业务不允许出现哪怕是1%的灾难威胁 ,因而,异地数据备份已成为数据可用性解决方案的重要组成部分。异地容灾系统提供 一个远程的应用备份现场,能有效地防止因本地毁灭...

    基于Hadoop实现大数据可视化分析的Web系统源码+项目说明+sql数据库.zip

    解决用户时空行为相似问题 一种行为的所有用户(学号) -> 分词处理后一段语言文字 每个用户(学号)-> 每个关键词 用户之间的亲密程度 -> 关键词相近概率 可视化web端项目 特点: 1.实现了在自己指定的地图...

    Hadoop实现高校无线定位大数据,有效地将位置信息应用于学生时空行为模式挖掘+源代码+文档说明+数据库

    解决用户时空行为相似问题 一种行为的所有用户(学号) -> 分词处理后一段语言文字 每个用户(学号)-> 每个关键词 用户之间的亲密程度 -> 关键词相近概率 特点: 1.实现了在自己指定的地图范围上使用...

    ASP.NET3.5从入门到精通

    9.3.1 SQL UPDATE 数据更新语句 9.3.2 使用Command 对象更新记录 9.3.3 使用DataSet 数据集更新记录 9.4 ASP.NET 删除数据 9.4.1 SQL DELETE 数据删除语句 9.4.2 使用Command 对象删除记录 9.4.3 使用DataSet 数据集...

    ASP.NET 3.5 开发大全11-15

    9.3.1 SQL UPDATE数据更新语句 9.3.2 使用Command对象更新记录 9.3.3 使用DataSet数据集更新记录 9.4 ASP.NET删除数据 9.4.1 SQL DELETE数据删除语句 9.4.2 使用Command对象删除记录 9.4.3 使用DataSet数据集删除...

    ASP.NET 3.5 开发大全

    9.3.1 SQL UPDATE数据更新语句 9.3.2 使用Command对象更新记录 9.3.3 使用DataSet数据集更新记录 9.4 ASP.NET删除数据 9.4.1 SQL DELETE数据删除语句 9.4.2 使用Command对象删除记录 9.4.3 使用DataSet数据集删除...

    ASP.NET 3.5 开发大全1-5

    9.3.1 SQL UPDATE数据更新语句 9.3.2 使用Command对象更新记录 9.3.3 使用DataSet数据集更新记录 9.4 ASP.NET删除数据 9.4.1 SQL DELETE数据删除语句 9.4.2 使用Command对象删除记录 9.4.3 使用DataSet数据集删除...

    ASP.NET 3.5 开发大全word课件

    9.3.1 SQL UPDATE数据更新语句 9.3.2 使用Command对象更新记录 9.3.3 使用DataSet数据集更新记录 9.4 ASP.NET删除数据 9.4.1 SQL DELETE数据删除语句 9.4.2 使用Command对象删除记录 9.4.3 使用DataSet数据集删除...

    ASPNET35开发大全第一章

    9.3.1 SQL UPDATE数据更新语句 9.3.2 使用Command对象更新记录 9.3.3 使用DataSet数据集更新记录 9.4 ASP.NET删除数据 9.4.1 SQL DELETE数据删除语句 9.4.2 使用Command对象删除记录 9.4.3 使用DataSet数据集删除...

    FCat企业级基础功能框架-其他

    存储热点数据 7、Session redis存储热点、共享会话数据 8、Security 提供声明式的安全访问控制解决方案的安全框架 9、OAuth2 一种授权框架,提供了一套详细的授权机制。用户或应用可以通过公开的或私有的设置,授权...

Global site tag (gtag.js) - Google Analytics