本文主要是介绍【面试】秒杀设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我们衡量一个web系统的吞吐率的指标就是QPS,也就是每秒处理请求数,假设一下,处理一个业务的请求平均响应时间为100ms,同时系统内是20台服务器集群,同时配置为MaxClients为500个,那么我们的QPS值为20*500/0.1=100000,实际情况是这样的简单吗?可以支持这样高的GPS吗?
秒杀业务的特点就是多个人读一个数据,难点就是读写冲突,锁情况特别的严重。 所以我们尽量不要让请求落在数据库上去,让请求拦截在系统的上游。
1、比如查询的按钮,很多情况下会出现点击好几次,假如系统很慢,很可能一下子点击好多下。针对这种情况下,我们可以让查询的按钮变灰,或者是页面重新转向另一个页面。
同时在JS中,我们可以限制用户在多长时间内仅仅只能提交一次。
2、假如一些人员用程序来频繁的访问网站呢?比如一个程序员写一个for循环一万次来请求这个接口,该怎么办?我们可以用uid作为限制,来进行请求的去重,同时用用户的ip来做限制,实现请求的去重。但是又有问题出现,5秒请求了100次,我们进行了去重,实际上的提交却是2次,用户在页面上面得不到反馈,会不会是不好的用户体验?我们可以进行页面缓冲,这样就可以提高用户体验。
3、静态资源用CDN来部署,压力是不是会减少很多?用Nginx来部署?是不是页面的缓冲速度提高了很多?
4、分段分时,
5、后端服务上的粒度进行优化,同时采用异步的形式,加大并发量的支持。比如将下单业务和支持业务的分离
6、服务器上的垂直扩展和水平扩展,各种集群
7、多线程、乐观锁和悲观锁、队列
这篇关于【面试】秒杀设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!