最后的作业 - 秒杀设计
估算
•日活是 100 万个用户,假设有 10%的用户参与了秒杀。
•看商品在 1s 内有 10 万人,其 tps 有 10w /s
•且秒杀在 10s 内结束。那么其买 tps 在 1W /s 左右。
•看商品 10 w/s
•买商品 1 w/ s
存储架构选择逻辑
•单机可以存放所有数据
•单机也可以支撑读写性能
•需要自动切换实现灾备 =》 主备切换
•Redis sentinel 商品的存放数据结构设计
•Key 商品,value 商品数
•Java 使用 redis Atomic 用于控制并发。
计算架构
•可以使用 app 端缓存来存储 10 秒内商品的信息。
•计算架构,假设单台机器可以支撑 1000 tps 那么 10 台机器就够了。
•这个时候可以使用两台 nginx 作为负载均衡。
•使用了 app 可以把把秒杀的页面提前加载,所以需要客户端缓存。
•为了防止意外的情况发生可以采取限流的策略。每台机器最大的请求量为 1000 tps 超过了采取限流措施
流程
•客户发起购买请求
•Nginx 分发到服务器上
•服务器负责客户筛选和控制并发
•如果抢购成功,那么就来到下单页面。
•告诉老板这是单机房,有风险。如果有钱,可以双机房或者上云。
图
演进
•秒杀的目的是为了吸引新的用户。不是真的谁先抢到谁先拿。
•如果客户量真的比较大。可以先通过客筛对 app 端客户进行打标,然后通过 nginx 对客户标签进行拦截。
•这样可以应对 10 以上的流量。
评论