秒杀系统架构优化思路
1. 秒杀主要面对的问题是瞬间流量和并发、双抢或多抢问题,前者主要靠精简计算逻辑、异步处理、消息队列等,后者主要靠数据库锁机制或者内存资源锁。在整体逻辑上可以设置流量闸和降级机制。
2. 秒杀系统两大特性:排队和限流;不可能完全实时,排队是关键。如果发现即将过载,限流可以保证大部分业务正常
3. case: 对应抽奖的算法,如1分钟内有10个奖品,把1分钟分成10个段,让每个段都能有奖品送出
sol: 因为抽奖,一般来说都是限制了参与用户上限的。没有限制的,一般也限制了多少人之类必须抽完。这种普遍的做法,都是讲奖品队列先生成好的。打个比方,我预计这次活动,大概有100个奖品,大约1w个人参与。
我会生成一个1w个奖品队列,其中一部分是没有奖金,将100个奖品随机打散在这个队列里面。然后1w个队列领取完了,后面进来的都返回固定的没有抽中的数据。队列可以直接用redis。大队列可以拆分小队列的。
这样前端可以随意做代理。不影响数据,也不影响算法。而且开发实现简单,性能高,基本上一台机器,同时开几百个万人活动都没问题。不要在用户请求的时候去算,很容易出现并发问题。上锁会有性能问题。
每次去算会有数据一致性问题,你需要将所有的请求分配到同一台机器上面, 而且每次都需要根据剩余奖品个数去动态调整你的系数,奖品越少,中的概率越底。奖品剩余个数会有一致性问题,很容易就出现奖品超了。
而且每次去算,请求量大了,随机数是不靠谱的,原生的随机数哪怕是加种子, 也容易出现重复,导致某一个时段,奖品被刷完了,需要做的技术手段限制太多。
最新内容
- Linux系统下systemctl常用命令以及service文件配置
- CI PHP7 session 不能读取的问题
- centos 7.4 基本配置
- mysqldump导入导出数据库总结
- Linux下的tar压缩解压缩常用命令
- 查看 SELinux状态、临时关闭SELinux、永久关闭SELinux
- centos6.8 yum安装mysql 5.6
- CentOS之7与6的区别2
- CentOS之7与6的区别1
- Mysql 忘记root密码的完美解决方法
- 输入密码登录,Linux scp (rsync)设置nohup后台运行
- ubantu zabbix部署——安装配置zabbix agent详解
- Zabbix客户端(agent端口)安装配置
- CentOS 7添加开机启动服务/脚本
- 阿里云机器配置 centos 6.8