场景
1元秒杀iphone 100台,会有一百万人在线抢购。
秒杀系统流程
- 有一个秒杀页,页面上面有倒计时的按钮
- 一旦倒计时时间到了,按钮就会被点亮,让你可以点击开始下单
- 下单时候需要填验证码,反之机器刷单
- 倒计时的时间是和后端校准的,前端页面不断像后端请求“开始没,开始没”
- 每次后端都会返回一下校准时间
- 一旦后端返回可以开始了,后端会给前端返回一个下单url
- 这个url被赋值到按钮上,就可以点击里
- 点击后如果抢到库存,就计入到支付页面,如果没有返回秒杀结束
一百万请求在不断询问开始了没,开始了没,后台可能会扛不住
秒杀技术挑战
100万个tps,带宽问题
所有请求都集中在一条热点数据上,所有的分开分表,还是分布式事务都无济于事。
解决方案
- 引入CDN,一百万个用户被几十个或者上百个CDN分担
- 在CDN上做一下小文章,部署一个小服务。小服务主要是告诉前端页面开始没开始,还可以统计在线人数,定期将在线人数回传给数据中心,这样数据中心就知道在线预约共有多少人。
- 假设线上有一百万人,在快开始时候数据中心回传给CDN上的小服务一个概率值0.02%
- 于是当秒杀开始时候100万人点击按钮进行下单,所有请求都 会先到CDN,小服务按照0.02%概率把用户放到数据中心,也就是一万个人放过两个人,其他9998都返回秒杀结束。
- 于是100万按照0.02%放过200左右人,这200人同时在数据中心进行强100个iphone,也就是200tps,这个并发量应该能很好解决了。
相关文章:
家用热水器噪声的具体原因01-10
不同品牌的机油有差别吗?更换品牌对发动机有无影响?01-10
电视线被剪断了还可以修好吗?01-10
电视自动跳台不受控制该怎么办?01-10
防水漏水怎么办?01-10
空调主板与风机板、与模块板的通讯故障以及怎样确定是否通讯故障01-10