文章目录

1.分布式Id的策略

面试_分布式专题1 [12]_分布式锁

这里的uuid生成策略
1.基于时间生成:Mac地址+时间戳+随机数
2.基于DCE安全的UUID
3.基于namespace的UUID(md5)版本的
4.随机UUID:数论,线性同余
5.基于namespace的UUID(Sha1)版本的

2.雪花算法生成的Id由哪些部分组成

面试_分布式专题1 [12]_redis_02
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如何做分布式锁

面试_分布式专题1 [12]_限流_03
面试_分布式专题1 [12]_分布式锁_04

7.基于zk分布式锁的原理

面试_分布式专题1 [12]_redis_05

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如何做分布式锁

面试_分布式专题1 [12]_redis_06

10.计数器算法是什么

指在指定的时间里累加访问量,达到阈值后,触发限流策略,在下一周期访问数量清除

使用redis的incr和key过期

问题:在相邻的一个时间段20s内,请求超过100。

面试_分布式专题1 [12]_分布式锁_07

11.滑动时间窗口算法是什么

滑动时间窗口算法是为了解决计数器算法临界值的问题的
可以解决网络阻塞问题

面试_分布式专题1 [12]_面试_08

12.漏桶限流算法是什么

面试_分布式专题1 [12]_分布式锁_09

13.令牌桶限流算法是什么

面试_分布式专题1 [12]_分布式锁_10

14.设计微服务的原则

1.单一职责原则

2.服务自理原则

3.轻量级通信原则

4.粒度进化原则

总结:软件是为了业务服务的,好的系统不是一蹴而就的,而是进化来的