logo头像
Snippet 博客主题

一个社交网站的设计

短信防刷的设计

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 延时队列 和 幂等操作

注意点:更新的时候需要验证订单是未支付状态。因为有可能中途支付。