面试题答案
一键面试- 锁未释放:
- 持有锁的节点出现故障,比如机器突然断电、程序崩溃等,导致锁无法正常释放,其他节点永远无法获取到该锁,形成死锁。
- 业务代码逻辑错误,例如在获取锁后,没有按照预期执行释放锁的操作,可能是在释放锁之前发生了异常,并且没有合适的异常处理来确保锁的释放。
- 锁超时设置不合理:
- 锁的超时时间过短,业务逻辑还未执行完成,锁就已经过期自动释放,其他节点获取到锁后继续执行,可能导致数据不一致等问题,并且后续获取锁的节点如果依赖前面未执行完的业务结果,就相当于出现了类似死锁的情况。
- 锁的超时时间过长,持有锁的节点发生故障后,长时间不释放锁,其他节点长时间等待,影响系统并发性能,甚至造成业务阻塞,从实际效果看类似死锁。
- 网络分区:
- 分布式系统中的网络出现分区,不同分区内的节点无法通信。假设一个节点在分区 A 持有锁,另一个节点在分区 B 尝试获取锁,由于网络分区,分区 B 的节点不知道分区 A 中锁已被持有,可能会再次获取锁,当网络恢复后,就可能出现死锁情况,因为两个节点都认为自己持有合法的锁。