文章目录
- 1.分布式Id的策略
- 2.雪花算法生成的Id由哪些部分组成
- 3.分布式锁在项目的应用场景
- 4.分布式锁有哪些解决方案
- 5.Redis做分布式锁的话,死锁有哪些情况,如何解决
- 6.Redis如何做分布式锁
- 7.基于zk分布式锁的原理
- 8.zk和redis分布式锁的区别
- 9.mysql如何做分布式锁
- 10.计数器算法是什么
- 11.滑动时间窗口算法是什么
- 12.漏桶限流算法是什么
- 13.令牌桶限流算法是什么
- 14.设计微服务的原则
1.分布式Id的策略
这里的uuid生成策略
1.基于时间生成:Mac地址+时间戳+随机数
2.基于DCE安全的UUID
3.基于namespace的UUID(md5)版本的
4.随机UUID:数论,线性同余
5.基于namespace的UUID(Sha1)版本的
2.雪花算法生成的Id由哪些部分组成
1.符号位 1 2.时间戳 41 3.机器Id 10 4.序列号 12
3.分布式锁在项目的应用场景
1.系统是一个分布式系统或者集群系统,jvm锁已经锁不上了
2.操作共享资源,比如库中的用户数据
3.同步访问,即多个进程同时访问共享资源
4.分布式锁有哪些解决方案
1.redis:
setnx key value ex xx
redission
2.zookeeper
利于临时节点和顺序节点
curator
3.mysql
利于主键或唯一索引的唯一性
4.etcd
其中zk和etce相当于syrchonized,而redis和mysql相当于cas
5.Redis做分布式锁的话,死锁有哪些情况,如何解决
1.加锁,却没有释放锁,需要手动delete key
2.加锁后,但是程序挂了。导致其他程序无法拿到锁,需要利用redis的过期机制
6.Redis如何做分布式锁
7.基于zk分布式锁的原理
8.zk和redis分布式锁的区别
Redis:
1.Redis保证的是最终一致性,副本间的数据复制是异步进行的,主从切换之后可能有部分数据丢失,所以如果是强一致性的话推荐使用zk
2.reids集群各方面的响应时间低,随着并发量和业务数量的提升响应时间有明显上升,但是极限qps可以达到最大且没有异常
zk:
1.使用zk,锁原理为zk的临时顺序节点,临时顺序节点的生命周期在client与集群的session结束时结束。所以如果某个client存在网络问题的话,与zk集群断开连接,Session超时同样会导致锁被错误的释放,所以zk也无法保证完全的一致性
2.zk有较好的稳定性,响应时间抖动小,没有出现异常,但是数据量大的话,qps会下降
zk每次锁操作的时候会创建若干个节点,完成后释放节点,会消耗时间。redis无需考虑时间问题
9.mysql如何做分布式锁
10.计数器算法是什么
指在指定的时间里累加访问量,达到阈值后,触发限流策略,在下一周期访问数量清除
使用redis的incr和key过期
问题:在相邻的一个时间段20s内,请求超过100。
11.滑动时间窗口算法是什么
滑动时间窗口算法是为了解决计数器算法临界值的问题的
可以解决网络阻塞问题
12.漏桶限流算法是什么
13.令牌桶限流算法是什么
14.设计微服务的原则
1.单一职责原则
2.服务自理原则
3.轻量级通信原则
4.粒度进化原则
总结:软件是为了业务服务的,好的系统不是一蹴而就的,而是进化来的