看到了微信公众号(架构师之路)的一篇文章,立即被征服了,里面主要介绍如何来设计秒杀架构。
秒杀程序问题根源在于:海量的请求在争抢有限的资源,秒杀其实和火车票非常像,都是对有限资源的抢占。这一点和微博不一样,微博不需要加锁,是客户端来拉去,资源是不受限的。
首先是要对于架构进行分层,最上面是展示层,其次是站点层,然后是服务层,最后才是数据层。秒杀架构的核心其实:保护数据层,因为在整套秒杀架构中,其实最危险的就是数据层,因为数据层(DB)的并发量在各层中是最小的,所以,要把不必要的操作在数据层之上就Hold住。
首先是展示层,每次查询间隔控制N秒,比如按钮置灰;避免等待过程中用户频繁提交;
但是如果是程序员用户呢?他们可以模拟客户端循环发送请求,这个时候,就需要站点层进行过滤,过滤的规则是uid(session)信息,如果某个session5秒内进行了两次操作,则进行屏蔽;可以通过nginx来进行分流,并根据hash值来将同一个session定位到同一台机器上面。
如果用户是黑客呢?手中掌握了10w肉鸡,呵呵,可能夸张一些,但是如果情况确实是海量用户来访问,那么核心在于服务层,前两层主要过滤非法请求,服务层才是真正过滤合法请求:队列。比如北京大连只有2000张,OK,排队列,数量超过的直接返回请稍后再试,让用户再次刷新页面,看到真实数量。服务层才是真实的和数据库交互,这个时候数据库的压力已经非常小,首先请求一定是合法请求,其次队列已经把访问数量进行控制。
看完了这篇文章顿时感到非常畅快,之前对于秒杀这种高并发一直有些懵懂,现下了解了。