短链系统的设计
- 本质上是生成映射关系,一个长链对应到一个短链,那就看短链的生成方式是什么
- hash,存在hash碰撞的问题,解决方法一般是重复hash,找到一个不碰撞的值,查库的话总是存在瓶颈啊,可以用布隆过滤器优化,查看生成的短链是否在数据库表记录中,用布隆过滤器的好处占用内存少
- 可以使用生成id的方式,一般都是用分布式id生成
简单的自增主键
redis
snowflake- 时钟回退问题,生成id有毫秒时间戳,所以可能导致某个生成的id会重复
- 进程重启+时间回拨 加入时钟版本号,进程重启的时候
- 引入zk,解决workid和时间戳
- 非技术手段,一般硬件支持NTP,但也会造成秒级回退,一般是运维场景解决
uuid
- 非技术手段,一般硬件支持NTP,但也会造成秒级回退,一般是运维场景解决
怎么设计一个红包系统?春晚抢红包和日常抢红包
redis hotkey是什么?有哪些影响?怎么解决
slot 模式,热key集中在某几台机器
监控 - 热key发现
优化 - 一般是二级缓存(本地缓存)
多级key -
大key是什么?有哪些影响?怎么解决
大文件断点续传?
mysql 半同步复制退化到异步复制?
ack超时的时候,强一致场景不能容忍,解决办法,调大半同步的超时时间
写扩散读扩散是什么?
一般用于feed流项目,比如朋友圈,好友关系关注之类的,数据写一份还是写多份
腾讯抽奖系统学习
抽奖系统作为 QQ 红包的核心系统,在承接用户抽奖请求,按设计合理的几率完成抽奖操作,将抽奖结果安全落地保存,并顺利发货等过程中,起到了关键作用。面对海量抽奖请求,如何及时作出响应,是抽奖系统面临的难题。
1)在接入层采用一致性 Hash 算法:同一用户的抽奖请求只会转发到相同的抽奖系统处理 ;
2)抽奖系统采用缓存机制:在加快抽奖过程的同时也减少了对存储层的访问压力;
3)奖品配额机制:平滑抽奖过程,各类奖品按比例有序抽中;
4)流水和对账机制:保证抽奖数据最终无差错发放到用户账户中。
缓存,很重要,如何提升缓存命中率,一般使用一致性hash算法
流水系统 记账对账
双buffer 无锁切换
一写一读的场景,可以实现目标,属于空间换时间