节选 1
分布式场景下如何保证接口幂等?
核心是客户端生成唯一requestId,服务端先用Redis的SETNX抢占锁设过期时间,再通过数据库唯一索引兜底防重。订单等有状态业务必须配合状态机控制流向,防止并发重复扣减。面试常追问Redis宕机降级方案,以及为什么必须用Lua脚本保证释放锁的原子性。
近 3 年字节后端一二面高频分布式题,含完整解题思路与追问链路。
核心是客户端生成唯一requestId,服务端先用Redis的SETNX抢占锁设过期时间,再通过数据库唯一索引兜底防重。订单等有状态业务必须配合状态机控制流向,防止并发重复扣减。面试常追问Redis宕机降级方案,以及为什么必须用Lua脚本保证释放锁的原子性。
分区容忍性必选,实际是C与A的权衡。交易、库存等资金链路选CP保证强一致,结合Raft或分布式事务锁死;社交点赞、Feed流选AP保可用,走MQ异步削峰加定时对账补偿实现最终一致。答题时结合具体业务说明补偿机制与人工兜底流程,更能体现工程落地经验。