
在一瞬间服务出现大量请求,发秒服务可能会崩溃。杀系
在秒杀商品时候,统架可能出现超卖。发秒
秒杀的商品有热点商品和非热点商品,热点商品可能流量占整个的统架90%.
后台商品管理可以将商品加入到秒杀商品,根据商品访问量分位热点商品和非热点商品。发秒
用户抢到商品支付,杀系发货商品。统架超时不付款,发秒订单取消。杀系

秒杀系统架构图
我们Java项目时用tomcat部署的统架。nginx的发秒并发量能达到五万,tomcat最优能支持1千。杀系所以首要问题就是统架让tomcat直接处理请求,减少tomcat处理请求。由于商品的详情页除了数量其他基本不改变。因此可以采用详情页放到nginx缓存中。还有就是考虑热点商品的抢购能直接经过nginx处理不到服务端,这样就完美解决了问题了。用户请求到达nginx,用lua脚本进行jwt校验,减少非法请求对服务器的访问。从而减少服务器压力。亿华云
用户访问商品详情,首先请求经过nginx,然后使用nginx和lua脚本对请求商品详情路径进行拦截,然后将请求商品数据发送到kafka。数据库接受到kafka数据,完成商品浏览数据收集。
Apache Druid订阅Kafka从而获取商品的访问日志,druid能实时获取商品访问记录。druid支持sql,对数据进行分析。找出热点数据。
# lua脚本发送给kafka日志格式 { "actime": "2020‐4‐10 9:50:30", "uri": "http://192.168.211.137/items/S1235433012716498944.html", "ip": "119.123.33.231", "token": "Bearer ITHEIMAOOPJAVAITCAST" }可以采用定时任务(elastic-job)实时查询Druid,把近期访问量最多的商品放入redis缓存中。缓存中数据如下:商品库存,b2b信息网价格,名称等。
备注:
用户进行下单时候,在redis中就是热点商品,走热点下单。不在redis中不是热点商品,走服务直接下单。
在将热点商品放到redis中,需要根据商品的锁定字段,将商品锁定。然后再将商品信息放到redis中。用户抢购商品和热点商品放到redis中同时进行,导致库存混乱。
需要判断当前用户对当前商品24小时内是否抢过。判断抢购商品是冷商品还是热门商品。判断库存是否充足。
在秒杀项目中需要集成Sentinel进行限流操作。在秒杀过程中冷门商品变为热门商品时候,访问服务流量瞬间激增,需要采用Sentinel进行限流,保护服务的稳定性。
相关文章: