写点什么

架构师训练营 1 期 -- 第九周作业

用户头像
曾彪彪
关注
发布于: 2020 年 11 月 20 日
  • 设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?

答:设计一个秒杀系统,主要的挑战有如下几点:

  1. 瞬间高并发用户的访问,这可能带来如下问题:

  • 网络带宽被耗尽

  • 服务器负载过高,停止响应

  • 数据库出现性能瓶颈,响应缓慢甚至宕机

  1. 安全问题

  • 如果用户提前知道了秒杀地址,可以提前下单。


对于不同的问题,可能需要有不同的解决方案。

首先,秒杀系统作为一个并发极高的系统,最好与其它系统隔离开来,单独开发和部署,即使秒杀系统出现问题,也不会影响现有系统。

其次,现有的一下老系统的服务,有些可以重用的,比如支付服务。

对于高并发带来的问题,可以从一下方面进行优化:

  • 部署单独的文件服务器,并使用 CDN,将流量分摊到各地区的 CDN 服务器,秒杀系统中,其实文件占的流量是非常大的,反而实时交互的数据较少。这能极大降低服务器的带宽负载。

  • 对文件,包括图片以及 JS,CSS 等进行合并,减少 HTTP 请求。

  • 动态页面静态化,对于静态化的页面,又可以使用 CDN,进一步降低服务器负载。

  • 简化流程,减少对数据库的操作。这样降低了服务器以及数据库的访问压力。

  • 设置访问阀门,只让最先访问的部分用户(比如前 1000 用户)访问秒杀页面。进一步降低秒杀页面的访问压力。甚至涉及二级阀门,只让访问秒杀页面中的部分用户(如前 100 用户)下单,进一步降低服务器访问压力。


对于安全问题,为了防止用户通过访问秒杀 URL 提前下单,秒杀 URL 需要动态生成,只在秒杀前 2S 生成。


另外,需要在系统上线之前做充分测试,还要想好一些应急预案,活动结束后进行复盘。


老师讲的案例真的很妙,以前以为秒杀系统有超高并发,设计很难,但是通过分析下来,其实也就几十单或者几百单,而我们要做的,就是通过大量的缓存,降低对服务器的访问压力,并把大量的排在后面的用户挡在门外,只放那些有机会秒杀到商品的用户进来,这是合理的。


用户头像

曾彪彪

关注

还未添加个人签名 2019.03.23 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 1 期 -- 第九周作业