@myyzs
2020-12-09T01:27:21.000000Z
字数 955
阅读 59
事故报告
12-07 17:11一线运维反馈碧桂园移动端用户流程报错问题
所有的碧桂园移动用户(总用户61w,实际激活使用的移动用户1.3w,日活用户2k),在此时间段后使用审批都会发生报错
排查发现是碧桂园的云端erp_user被清空,导致打开移动审批时关联不到erp账号。
18:00-18:30
1、用户数据恢复
方案1:全量拉取碧桂园的用户,因为碧桂园用户量太大,整个过程会持续几个小时
方案2:运维恢复最近的碧桂园租户库数据(erp_user),评估发现需要6个小时
方案3:基于方案1,2恢复时间太长,通过云端的p_user,p_uesr_to_erp两张表间接恢复erp_user,于18:30成功恢复云端erp_user表,用户数据恢复完毕
2、清理缓存(数据恢复前已经报错的用户依旧会报错)
19:00-22:00
措施1:执行代码手动清理碧桂园所有用户的session,无效
措施2:清理阿里云的session缓存,少量用户还会报错,退出登录后正常
措施3:凌晨05:00再清理一次session缓存,明天早上继续关注碧桂园的用户反馈
1、云助手每天都会巡检租户的异常ERP用户,最常见的如ERP账号重复,今天的巡检报告发现碧桂园有这种类似的异常数据
2、云助手于12:55,15:30全量拉取了碧桂园的用户,以便找出云端的异常数据。因为碧桂园的用户量比较大,同步时间比较长,且代码中的同步锁只有1个小时的缓存,导致两次拉取动作在某个时间点并发了,后一次的同步在操作数据时,影响到了第一次同步的sql关联查询条件,最后导致将erp_user表数据清空
1、操作人员同步用户的操作合规
2、主要还是代码逻辑不严谨导致的并发误删数据
1、在同步用户逻辑优化之前,不再操作用户同步工具
2、优化缓存锁并发逻辑,对于并发逻辑要求严格的场景,废弃缓存锁,只用用数据库锁
3、在操作关键用户表数据前需要增加预定规则校验,如变化的用户(新增,编辑,删除)超过用户总量的N%时,预警提醒,需人工干预确认后才可继续执行
3.1、可防止程序bug导致的大规模误删除
3.2、可防止客户ERP数据库误操作导致的云端数据丢失