一个社交网站的设计
短信防刷的设计
1. 设备id的设计
如果通过ip限制,局域网的情况下,容易误伤他人,手机号的限制,防不住那种使用多批量号码的人。
2. 风控系统的设计,
设备指纹、行为序列分析,鼠标轨迹获取、风险评分,如果不符合正常人的操作,直接弹出一个滑块验证码,或者拼图。
3. 短信通道
对虚拟号的限制,增加刷短信的成本。
4. 异步清洗
对超过n天没有登陆的账户作出标记,重新登陆的时候重新发短信验证码,或者其它的验证。
秒杀场景
1. 流量控制
当库存里面只有100个库存,可以设置通过200个流量进来。
2. redis lua 原子扣库存。
3. 异步同步到数据库。
无竞争修改数据库,减少数据库锁竞争。
评论系统设计
1.冗余root_id,按照根评论一次性查询
如果只设计parent_id的话,查询的时候会涉及层级查询。
删除的时候也会涉及 层级删除。
2.冷热分离
top n 设计:点赞数,点赞的操作放在redis缓存里面,通过mq或者定时刷新到数据库。
大V直播间打赏
出现的问题
热点行锁
用户扣钱,主播加钱,主播的数据会出现热点行锁
用户扣钱,可以实时扣除,使用乐观锁保证不透支,主播加钱可以异步,然后把多次加钱合并成一次。减少主播数据的行锁压力。
广播风暴
解决的办法
分桶同步
合并发布,
订单超时设计
定时器扫描
缺点:全表扫描问题,会导致表压力增大,数据库io飙升。
优点:简单,直接。
redis 发布订阅
缺点: 不稳定
mq 延时队列 和 幂等操作
注意点:更新的时候需要验证订单是未支付状态。因为有可能中途支付。