秒杀系统注意点:

  • 严格防止超卖:库存100件你卖了120件,凉凉

  • 事物性: 用户的金额/优惠券,库存要保持一致

  • 防止黑产:防止不怀好意的人群通过各种技术手段把你本该下发给群众的利益全收入了囊中。

  • 保证用户体验:高并发下,别网页打不开了,支付不成功了,购物车进不去了

  1. 抗住并发量,使用CDN节点,减轻前端压力

  2. 尽量把流量控制在上游,因为抢单都是疯狂点击的或者直接爬虫类,这样对系统来说,很多都是重复的请求,徒增系统压力

    对于前端层,界面操作的,前端可以控制下来许多,禁止重点,或者多次点击只发生一次

    对于网关层,对url做去重处理,用一些关键参数(如用户id)做hash,可利用布隆过滤器增加效率; 也可以做页面缓存,对同一个ip段数量多的返回同一个页面; 加上熔断机制,对于严重超额的请求直接拒绝

    对于服务层,请求不直接进入数据层,先经过缓存,确认当前数据,再经过消息队列,一批一批的下放到数据层

    对于数据层, 采用分库分表,对热门区域/热门商品等维度进行拆分

  3. 事物保证, 可以利用redis单线程速度快的特性来控制库存等问题; 可以用消息队列来保证事物的最终一致性