架构师训练营 1 期 -- 第九周作业
设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
答:设计一个秒杀系统,主要的挑战有如下几点:
瞬间高并发用户的访问,这可能带来如下问题:
网络带宽被耗尽
服务器负载过高,停止响应
数据库出现性能瓶颈,响应缓慢甚至宕机
安全问题
如果用户提前知道了秒杀地址,可以提前下单。
对于不同的问题,可能需要有不同的解决方案。
首先,秒杀系统作为一个并发极高的系统,最好与其它系统隔离开来,单独开发和部署,即使秒杀系统出现问题,也不会影响现有系统。
其次,现有的一下老系统的服务,有些可以重用的,比如支付服务。
对于高并发带来的问题,可以从一下方面进行优化:
部署单独的文件服务器,并使用 CDN,将流量分摊到各地区的 CDN 服务器,秒杀系统中,其实文件占的流量是非常大的,反而实时交互的数据较少。这能极大降低服务器的带宽负载。
对文件,包括图片以及 JS,CSS 等进行合并,减少 HTTP 请求。
动态页面静态化,对于静态化的页面,又可以使用 CDN,进一步降低服务器负载。
简化流程,减少对数据库的操作。这样降低了服务器以及数据库的访问压力。
设置访问阀门,只让最先访问的部分用户(比如前 1000 用户)访问秒杀页面。进一步降低秒杀页面的访问压力。甚至涉及二级阀门,只让访问秒杀页面中的部分用户(如前 100 用户)下单,进一步降低服务器访问压力。
对于安全问题,为了防止用户通过访问秒杀 URL 提前下单,秒杀 URL 需要动态生成,只在秒杀前 2S 生成。
另外,需要在系统上线之前做充分测试,还要想好一些应急预案,活动结束后进行复盘。
老师讲的案例真的很妙,以前以为秒杀系统有超高并发,设计很难,但是通过分析下来,其实也就几十单或者几百单,而我们要做的,就是通过大量的缓存,降低对服务器的访问压力,并把大量的排在后面的用户挡在门外,只放那些有机会秒杀到商品的用户进来,这是合理的。
评论