第九周作业
设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
问题:
1、高并发,秒杀系统第一个要面对的问题。瞬时的高并发访问量,有可能直接击垮整个系统。
2、负卖,原本只有 100 个的库存,由于漏洞直接负卖 200 个,商家亏死。
3、恶意访问,由于商业利益驱动,不法访问者使用模拟器访问你的页面,为的就是要抢你的库存。
4、地址暴露,你的页面包含了后台 API 请求地址,懂行的亲就会利用这个 API 直接访问你的后台,从而跳过页面上面你自己设置的步骤。
5、数据库瓶颈,数据库所能承受的访问量,绝对是不能和你的秒杀活动带来的访问量比的,如何优化和使用数据库,也是一个需要重点考虑的问题。
思路:
1、服务单一职责原则,秒杀系统与业务系统彻底解耦,秒杀系统只完成秒杀的事情,完成满足促销活动的事情,业务系统负责自己的业务,比如订单,发货,客诉等。
2、使用【令牌桶】控制你的库存,有多少库存就生成多少令牌,有令牌的访问请求,才允许进行访问。没有令牌的访问,直接返回【请稍后】。这也可以控制整个促销活动的节奏。这也对【令牌桶】算法和对应的服务提出更高的要求。
3、动态页面静态化,讲动态页面进行静态处理,这样就能减少对后台服务的依赖程度,静态页面访问速度非常快的,提高客户体验。
4、【限流】,针对恶意访问,特别的模拟器访问,可以针对单 IP 的访问请求数进行【限流】,算法判断出是模拟器的话,直接【拒绝】请求。
5、隐藏后台 API 的 url,对 url 进行加盐处理,校验不通过的访问直接拒绝。
6、缓存集群,缓存其他业务数据,能够静态化的数据直接静态化。
总结
偷懒了
评论