智能一代云平台(十九):选修课---类似秒杀的高并发业务
强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan
【前言】
选课,考试,评教这三个功能是我们的云平台中的重头戏;并发高是这三个功能的一个共同特点,在解决的过程中充满挑
战,当然含金量也会高很多;今天就和大家一块儿分享一下我们针对高并发的业务的一些实践和解决思路。
【如何做好一个秒杀系统】
一、我们系统中遇到问题
1、基础系统的公共选修课出现的问题:
大家统一来选课时出现负数情况(类似电商中的超卖);
2、原因:
由于判断是否课程选完是在页面做的控制,大家在加载页面的时候还有课程余量,但是实际上课程已被选完;而后
端没有做课程余量的校验;
3、解决办法:
(1)在controller中提交课程方法时先去数据库中查询课程余量是否为0,但是无法防止并发情况,在方法上加
synchronized;
①优点:实现简单;
②缺点:当部署是集群情况下会有问题;效率比较低;
(2)利用乐观锁来控制
①优点:实现简单;
②缺点: 正在做相关实验,做完后会进行完善;
(3)利用MQ来实现
①优点:速度上快;
②缺点:实现相对来说困难;
4、模拟:
用Jemeter通过录制脚本来进行的测试,通过压测接口这样来检查;并监控服务器的系统的性能的消耗。
二、业界秒杀系统的思路
1、大部分流量在cdn层已经拦截,直接返回给用户本次没选上;一般是随机进行筛选;
2、真正能进入后端的流量非常少;
3、针对大流量写入采用异步进行处理,课程余量在开始前已经预热加入到缓存中,每卖出一件缓存减1,为保证并发去
减会设置相应的锁阀值,低于阈值后就会对课程余量操作加锁操作。
【总结】
随着互联网越来越深入;大流量,高并发已经成为很多系统的瓶颈,而如何处理好是一件十分具有挑战的事情;
遇到挑战迎难而上,从而不断的磨砺自己,使自己成长的更快。
智能一代云平台(十九):选修课---类似秒杀的高并发业务相关推荐
- 智能一代云平台(九):EclipseLink返回Object转为实体的分析
[前言] 在ORM框架上我们项目采用的框架是EclipseLink:在使用EclipseLink中遇到一个问题,在底层封装往上返回的时候将Object类型映射成Map,而上层需要实体这样会出问题:下面 ...
- 智能一代云平台(二十九):通用mapper的改造
[前言] 最近研究一下Mybatis的通用mapper,然后对其进行了一些改造以适合我们的系统,接下来为大家分享一下我的研究思路以及研究成果. [研究之路] 一.ORM框架选型: 1.我们最 ...
- 智能一代云平台(三十):逆向工程生成mybatis
[前言] 最近在研究mybatis逆向工程的一些东西:通过研究Mybatis+通用mapper.逆向工程生成mybatis.Hibernate+mybatis:最终综合这些优点实现了一个我们自己的逆向 ...
- 智能一代云平台(三十一):mybatis加入分页
[前言] 在<智能一代云平台(三十):逆向工程生成mybatis>已经将mybatis的逆向工程搞定了:但是美中不足的是mybatis的分页查询:接下来一起来探索一下分页查询. [分页查询 ...
- 智能一代云平台(五):移动开发之环境搭建
[前言] 谣传最近IT领域异常火热,而IT中的移动端领域更是如日中天. 做为一名程序猿的我,也不甘Out:于是雄心勃勃参加一个智能一代云平台移动端项目开发:之前有人做了第一版,现在我们需要重构. [基 ...
- 智能一代云平台(三十五):后端架构再思考
[前言] 针对现在开发用的框架(SSM+Dubbo),自己进行了一些思考:这些问题应该是当系统在大流量,高并发,分布式情况下需要考虑一些问题,自己在对服务拆分的时候一些思考的记录下来,与大家共享: [ ...
- 智能一代云平台(二十一):生产环境Nginx报 502 Bad Gateway 问题复现及解决方案
强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 系统最近出现了一个问题,经过相应的排查解决了:在此记录一下解决的整个过程,如果大家遇到 ...
- 四十九、深入了解两个并发接口Callable和Runnable的区别
@Author:Runsen @Date:2020/6/11 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...
- 智能一代云平台(三十九):不同服务之间数据调用的一些思考
[前言] 我们采用的是Dubbo框架,服务之间的调用是通过dubbo来管理:在开发业务的时候针对于服务间的调用产生了些疑惑:自己查找一些资料并进行思考与比较: [不同服务之间] 1.不同服务之间组装数 ...
最新文章
- python向mysql中添加数据_通过python操控MYSQL添加数据,并将数据添加到EXCEL中-阿里云开发者社区...
- 高级concurrent包
- (3.3)HarmonyOS鸿蒙长按事件
- 高学历就一定代表着高收入么?数据分析来为你揭晓
- mysql 组内排名_【原】MySQL分组排序(包含组内排名、求中位数)
- ActivityManager解析及使用
- 2020算法设计与分析 官方考前模拟卷 参考答案
- Linux学习-man和Info
- 【POJ】2676-Sudoku 【51Nod】1211-数独(DFS)
- JAVA后端面试经-三拳打死老师傅的那些套路问题,开卷你也不会
- RT-Thread实战笔记|LD3320非限定词条语音控制器使用详解
- TCP/IP五层模型详解
- 【大数据处理技术】实验6
- 51实现gsm的发短信收短信的程序
- cocos2d-x 使用Box2d制作的台球游戏
- 机器人系统设计与制作:Python语言实现2.5 用Blender制作机器人的三维模型
- [刷题]leetcode\35_搜索插入位置
- 电子信息工程专业考研选择物联网开发怎么样?
- mysql 表结构差异对比小工具
- 前端性能优化之--DNS预处理
热门文章
- 剖析 AI 和大数据的分布式实践 —— 2018 UCan下午茶·北京站
- Python 对象的身份迷思:从全体公民到万物皆数
- 开奖啦!CSDN 程序员节 1024 中奖名单揭晓!
- 中兴被逼入绝境,或将出售手机业务?
- 22 副为程序员定制的对联,总有一副适合你...流泪
- 003.linux开发环境配置及linux极速入门
- 计算机大学英语融合的课题有什么,【计算机信息论文】计算机信息管理学科交叉融合研究(共3910字)...
- 4键电子手表说明书_飞猪II控制台简体中文说明书
- 火爆全网MySQL路线笔记!java静态变量和实例变量
- 使用 Grafana+collectd+InfluxDB 打造现代监控系统