一次并发问题的排查与解决

今天下午有同事反馈订单列表页状态与详情页状态不一致。

背景:
用户下单及付款等操作后,部分订单信息会推送到公司二方团队用于列表页展示。
(列表页由平台统一维护,详情页业务方维护)
有业务事件发生时,会推一次订单。因而同一订单会多次推送。
不同业务事件间隔不定,存在并发推送一条数据的场景。

核对日志,发现了问题。

订单推送时,平台会以version的大小作为是否抛弃该次推送结果。

背景:
version计算逻辑:用当前时间减去下单时间
将历史推送的version存于DB,每次从DB中获取当前的version(只查有效的,不含软删)。
version+1后,先将当前的version软删,再写进一条数据。
(超过Integer.MAX_VALUE有单独逻辑)
若version不存在,则会根据当前时间重新生成一条version,写入DB。

坑点:平台接收推送数据成功,数据格式正确,即会告知业务方推送成功。
对推送version小于历史version的数据,平台内部会抛弃该次推送的数据,但是仍然告知业务方推送成功。

根据订单号去查该订单的推送version记录:

verison记录

可以看出有一条version超大。从日志上看,35和10973两条记录的推送间隔在ms级别。
由于平台的策略,导致version10973之后的推送数据均会失效。

根据DB中version数据反推,时序如下:

请求时序

这里还存在代码bug:之前是向从库查询version记录,在A将34置为无效并同步到从库后,B读从库发现无记录,然后B会向主库写了一条新的version记录10973。读从库增大了A、B之间的时间差。

发现了问题之后,fix策略:

查询version均走主库
若不存在version,生成后写入;
若存在,将当前version+1,带乐观锁version更新(放弃软删+新增步骤);
若更新失败,则查询实时的version,+1后再次带乐观锁version更新;
对于推送的数据部分,实时查主库后再推送;
(实际fix逻辑比这复杂,由于一些原因不过多描述)

事后反思,存在以下问题:

关键操作,不能读从库;
对于同一条数据的操作,不能先软删,再新增一条数据(非原子操作,会造成很多问题,如软删遗漏、新增失败,均会导致问题);
平台应明确告知会抛弃当前数据(告知原因更佳),而不是告知成功;
推送前应实时查最新数据,而是已有数据;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容