面试题答案
一键面试常见安全问题及原因
- 锁超时问题
- 原因:为避免死锁,通常会给分布式锁设置超时时间。但如果业务执行时间超过锁的超时时间,锁自动释放,其他进程可能获取到锁,导致同一资源被多个进程同时操作。
- 锁误释放问题
- 原因:假设一个进程获取到锁,在执行过程中由于网络波动等原因与锁服务短暂失联,锁服务可能误判该进程已放弃锁而释放。此时其他进程获取到锁,造成数据一致性问题。或者在使用如 Redis 实现分布式锁时,使用
del
命令释放锁,如果在获取锁和释放锁之间存在时间间隔,且另一个进程在这个间隔内获取到了锁,当原进程执行释放锁操作时,就会误释放其他进程的锁。
- 原因:假设一个进程获取到锁,在执行过程中由于网络波动等原因与锁服务短暂失联,锁服务可能误判该进程已放弃锁而释放。此时其他进程获取到锁,造成数据一致性问题。或者在使用如 Redis 实现分布式锁时,使用
- 可重入性问题
- 原因:某些分布式锁实现不支持可重入,即同一进程在持有锁的情况下再次请求锁会失败。这在一些递归调用或需要多次获取锁的业务场景中会导致问题,破坏业务逻辑的正常执行。
- 单点故障问题
- 原因:如果分布式锁基于单个节点(如单个 Redis 实例)实现,该节点一旦发生故障,可能导致锁服务不可用,影响整个分布式系统的正常运行。
- 网络分区问题
- 原因:在分布式系统中,网络分区可能导致部分节点之间无法通信。此时可能出现不同分区内的进程各自获取到锁,破坏了锁的互斥性。 例如,使用 ZooKeeper 实现分布式锁时,若发生网络分区,不同分区内的节点可能各自认为自己持有锁。
- 锁竞争性能问题
- 原因:当大量进程同时竞争分布式锁时,会产生高并发竞争。这可能导致系统性能下降,如频繁的网络请求、锁服务压力增大等,甚至引发死锁或活锁情况,影响系统的可用性和响应速度。