在处理员工每日作业上报数据时,由于上报数据可能乱序,且需要避免并发更新对时间范围的覆盖,项目引入了分布式锁机制来优化。当前采用乐观锁(version控制)已无法满足高并发需求,亟需转向分布式锁。目标是实现以[user_id + [start_time, end_time]]为粒度的锁定,即在特定用户、特定时间段内锁定数据,以防止并发冲突,类似于数据库的间隙锁,但具体实现思路尚待明确,在此寻求技术指导。
💡 **核心问题:** 在员工每日作业上报场景中,由于上报数据可能乱序,导致对表示作业时间范围的biz_time字段进行更新时,存在并发覆盖的风险,现有乐观锁机制在高并发下已显不足。
🎯 **优化目标:** 引入分布式锁,实现更细粒度的并发控制。期望的锁定粒度为[user_id + [start_time, end_time]],即针对特定用户在特定时间段内的数据进行锁定,以避免更新冲突。
🔒 **技术挑战:** 如何有效地实现类似数据库间隙锁的范围锁定机制,以满足对用户特定时间段作业数据的并发保护,是当前面临的主要技术难题。
🚀 **解决方案方向:** 考虑采用分布式锁技术,如Redlock或ZooKeeper等,来管理和控制对用户作业时间段的并发访问,确保数据的一致性和准确性。
最近项目中需要对锁的粒度进行优化,使用分布式锁的场景是:一个员工每天会进行作业,每次作业都会上报一条作业数据,其中有个 biz_time 字段表示作业实际发生的时间(系统会合并统计它多个作业任务的开始时间和结束时间,即最后数据表中会记录这个人当天的第一个任务的开始时间为 start_time ,最后一个任务的结束时间为 end_time ),但是上报作业数据是会发生乱序的,每次更新时间范围的左右区间不能发生并发覆盖更新。当然系统需求会更加复杂,例如他的不同作业类型切换,需要终止当天的作业时长统计,并开启一段新作业的统计等等,先不用考虑。
现在是用乐观锁通过 version 控制的,由于并发量比较大,希望改造成分布式锁来实现单行数据的并发数据竞争。预期能实现成[user_id + [start_time, end_time]]粒度,也就是某个人的作业时间在某个时间范围被锁住(类似数据库的间隙锁,锁定一个范围)。但是没有思路怎么实现,在此请教一下各位大佬!