- ∑ 分布式算法
- 缓存
- 分布式缓存(redis)
- 高效原因?执行命令单线程,IO多线程。即单reactor多线程模式改进,将read/send使用IO多线程来处理。redis高性能
- 高可用 redis-持久化
- RDB(全量数据)
- AOF(增量数据,类似顺序写的方式,会进行AOF指令重写,即类似合并指令等操作)
- 数据复制(副本/分片)redis-数据复制
- 主从同步 (主从复制),无法自动恢复,难在线扩容。需人工介入
- Sentinel(哨兵模式)自动版主从复制。副本存储。
- 集群模式,哈希槽进行数据分片。支持在线扩容。
- 数据结构 redis-数据结构
- string: 常用的缓存结构,incr等
- list: 主要用来消息队列
- hset: hash
- geo: 经纬度位置
- json:
- 分布式锁
- redis实现
SET lock_key unique_value NX PX 10000
- lua实现原子性
- 随机值,requestId,避免被其它锁释放
- 需要过期时间,避免客户端发送异常,无释放。
- 主从同步问题,需要考虑未同步之前挂了。采用官方redission方案。
- 业务逻辑执行过长?需续签有效期。
- redisson readlock(官方推荐)
- 守护线程,延迟线程。 大部分redis加解锁成功,才算成功
- zooKeeper
- 临时顺序节点,监听watch。将最小的节点进行加锁。
- 释放锁后,通过watch通知下一个锁。
- 分布式id
- leaf: 双Buffer+DB号段获取。
- twitter的雪花算法
- 美团的lefa 雪花算法
- 时间回拨问题: 采用等待。如果差距过大,启动不了
- workerId分配问题,采用zookeeper的顺序节点。
- 分布式服务框架 § dubbo
- 多副本拷贝?
- 类似mysql的主从模式,通过binlog进行复制。
- 类似redis,每个节点,存储部分solt的。 通过rdb和aof增量数据进行备份。
- kafka类似redis,每个topic存储部分分区数据。 solt数据分片 + 副本
- 限流组件/降级