怎样设计一个秒杀系统

如何设计一个秒杀系统,其实我思考了很久,今天就把我想到了写下来记录一下:

所谓秒杀操作就是同一时间段内很多用户抢购有限的商品,因此秒杀的并发量是很高的。

用户点击秒杀的时候,会异步的取服务端的时间,然后在执行秒杀,如果执行秒杀的时间小于服务端设定的时间,

那么提示用户秒杀尚未开启,如果时间在秒杀的范围内,服务端会返回秒杀接口地址,一般url的某个字段是加密值,用户点击后可以执行秒杀。

如果秒杀后

前端:

1.通过动静分离 把静态页面部署到CDN上,这样可以降低我们系统的压力,用户的体验也会提高

2.因为秒杀的时候用户可能会一直的刷新,前端可以做一些控制

3.然后通过前端web服务器用nginx 做负载均衡和反向代理

后端:

后端一般都是一个集群

1.在redis集群中维护一个原子计数器(Atomic counter),数量提前设定好,用户请求到来的时候直接对这个原子计数器

进行操作,如果原子计数器大于0那么,减去1,然后插入一条用户秒杀的消息到rabbitmq中(或者其他消息队列),然后又消费者来消费这个rabbitmq产生的消息,把对应的记录写到数据库中;如果原子计数器小与等于0,那么返回秒杀已经结束。

2.如果数据库压力很大,那么对数据库可以进行分库,分表

3.数据库端也可以使用存储过程,减少服务器端到数据库的传输时延,以及服务端GC造成的延迟


前一段时间在面试的时候,面试过跟我分享了一个新的思路,比如1000W个人抢10个商品,那么我只让10条流量进来不就可以了?其他的都到不了我的后台的应用程序,我觉得这是一个很好的一个思路,或许有点不公平,但是对于流量的随机选取 只抽取10条算是比较公平的了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值