• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yasumoto
V2EX  ›  程序员

同事 A 写了个方法,同事 B 调用了 A 的方法 导致线上直接宕机 这个锅该谁背。。

  •  2
     
  •   yasumoto · Jan 11, 2021 · 35181 views
    This topic created in 1947 days ago, the information mentioned may be changed or developed.
    公司服务器连续几次宕机,导致有很多业务数据没进来,我们投放是花了钱的 后面找问题发现

    是同事 A 写了个 sql 在 mybatis 里面用的<where><if xxx != null> xxx=xxx<if>....</where>类似这样的

    同事 B 调用了这个方法,但是他的业务有的时候值没有 导致查询全表 1000 万的数据 机器直接卡死了

    在阿里云显示慢 sql 执行了 500 多秒 - -

    今天业务找过来说让员工负责一部分损失 ,问问大家 这个损失应该谁背呢
    Supplement 1  ·  Jan 11, 2021
    总结了大家提供的宝贵意见
    1.测试的锅--->这个跟测试没关系 因为是小需求半天工作量 年底测试也正在其他项目中就没参与

    2.A 的锅--->写的方法没有加参数拦截 导致别人调用全表查询

    3.B 的锅--->自测不全 调用别人的方法没有仔细 review 导致系统宕机

    4.领导的锅--->上线合并代码没有仔细检查 埋下了隐患

    这两天我们研发和测试会在开一个集体会讨论下以后怎么避免类似问题 和这次问题的后续处理

    哎头疼,年终奖还没发 希望公司不要拿这事给我们做文章
    273 replies    2021-01-14 17:11:31 +08:00
    1  2  3  
    rodrick
        101
    rodrick  
       Jan 11, 2021
    问个问题,不懂测试方面,假设测试测了 100w 条没问题,然后生产环境 1000w 条炸了,这个算不算测试用例覆盖不全?
    UsherOu
        102
    UsherOu  
       Jan 11, 2021   ❤️ 3
    b 的锅,b 写的时候不看方法吗?瞎调吗?
    gaolingyi
        103
    gaolingyi  
       Jan 11, 2021
    是测试的机子能扛得住还是说压根没有测试啊
    guo4224
        104
    guo4224  
       Jan 11, 2021
    你这什么歪道理?自己写的 bug 让别人背锅?
    qwer666df
        105
    qwer666df  
       Jan 11, 2021
    @rodrick #101 不能这样吧 那如果一亿条呢? 那不是无止境了
    charlie21
        106
    charlie21  
       Jan 11, 2021   ❤️ 4
    如果程序员尽心尽力实现的功能上线出了问题,责任是谁的? /t/737781

    看看你们自己说的:

    @ligiggy 20 days ago ❤️ 63
    找个几把责任人,
    出了问题,大家都有责任,赶紧把问题解决,下次开研讨会总结经验

    @boris93 20 days ago via Android ❤️ 2
    这不是一个人的责任,而是一个整体的责任

    @sampeng 20 days ago ❤️ 1
    这难道不是对于一个团队最值得庆祝的时刻吗?宝贵的经验是在一次一次问题中增加的。不会平白无故多出经验来

    @feiandxs 19 days ago ❤️ 7
    我的责任,行了吧。
    我就很看不惯这种,遇事后不是第一时间想着解决问题,而是找责任人。不是一起复盘总结宝贵的经验,各部门一起坐下来好好看看今后有什么可以改善的地方,当前的问题有哪些合理的解决办法,而是来找『谁的问题』。
    真要找人的问题,应该是每个人都冲上去说是我的问题。
    如果是找别人的问题,这个找问题的人就是最大的问题。

    @fengpan567 19 days ago ❤️ 3
    一看就是想着压缩工期上线,结果线上出 bug 了,又想让开发背锅

    @thetbw 19 days ago via Android
    应该换个角度,程序员写的程序赚了大钱,功劳主要算谁的,钱应该怎么分

    -

    现在真出问题了,txt 变 exe,画风迥然不同

    出问题互相推诿 出问题互相踢皮球,这一幕令人熟悉:当 txt 变 exe 时画风就会迥然不同,说得越好,做得越烂
    no1xsyzy
        107
    no1xsyzy  
       Jan 11, 2021   ❤️ 10
    @charlie21 你在立什么空气靶子啦
    你选中的这些人一个都没出现在这楼里……
    Smilencer
        108
    Smilencer  
       Jan 11, 2021
    老板的锅+1
    ryanlid
        109
    ryanlid  
       Jan 11, 2021
    业务 自己背
    root8080
        110
    root8080  
       Jan 11, 2021
    @charlie21 ??? 迷惑操作
    no1xsyzy
        111
    no1xsyzy  
       Jan 11, 2021   ❤️ 1
    @charlie21 稍微拉了下目前有这些人两个主题内同时回复了:
    {'Leonard', 'lifetimeporn', 'keepeye', 'charlie21', 'ruokw', 'MoccaCafe', 'Leigg', 'Jooooooooo', 'ryanlid', 'l00t', 'liian2019', 'reus'}
    基本上回复的主旨都保持一致,除了一些明显对这种题目表示厌烦而胡乱说的 “数据库的锅”
    alfa
        112
    alfa  
       Jan 11, 2021
    如果 A 写得不对,我想知道 A 怎么写才对?
    rohgeo
        113
    rohgeo  
       Jan 11, 2021   ❤️ 2
    那赚了钱,员工能分一部分吗?
    CrazyMoon
        114
    CrazyMoon  
       Jan 11, 2021
    今天业务找过来说让员工负责一部分损失?团结起来,让他爬
    purensong
        115
    purensong  
       Jan 11, 2021
    我觉得不管怎样程序员都不该背锅,要背锅在合同里写清楚,这种不是恶意造成的,为啥要背锅。赚钱了也不会分一分给你
    kvkboy
        116
    kvkboy  
       Jan 11, 2021
    前几天我刚好也碰上这个事,不过是测试场景碰到的问题而且也没那么多数据。

    按照场景我是 A,B 调用我的条件查询,他以为有值但实际没值,啥都没传没有条件,结果默认查全表导致他报错

    B 问我啥都没传为什么不返回一个空结果,我跟他说,条件查询你不传条件我要帮你兜底,关我什么事?

    我就想问问,A 错了啥?
    levizheng
        117
    levizheng  
       Jan 11, 2021   ❤️ 1
    关 A 啥事?不传条件可不就全表扫描
    rohgeo
        118
    rohgeo  
       Jan 11, 2021
    扣工资没问题,例如迟到也会扣工资。但是让员工负责一部分损失就太黑了
    airfling
        119
    airfling  
       Jan 11, 2021
    测试的锅
    leonardyang
        120
    leonardyang  
       Jan 11, 2021
    我就想知道你们一千万级别的数据难道不要求加索引的么,以后方法上至少加个索引列条件不能为空的判断吧,不然其他调用者咋保证查询效率?
    bwangel
        121
    bwangel  
       Jan 11, 2021
    楼主你是不是要贷款上班了。。。
    Ahy
        122
    Ahy  
       Jan 11, 2021   ❤️ 1
    如果是 A 的锅的话 写 rm 命令作者的锅可就大了
    那生产刀子的人也有罪
    sansanhehe
        123
    sansanhehe  
       Jan 11, 2021
    测试用例没覆盖到吗?
    wolfan
        124
    wolfan  
       Jan 11, 2021 via Android
    B 有责任,但不承担损失。
    zjuster
        125
    zjuster  
       Jan 11, 2021
    不要歪楼,员工赔钱是另外一个话题。

    A 写方法,不可能考虑到各种业务的场景,所以他写这个的时候,是没有问题的。
    B 是负责业务的,不考虑业务的场景,直接调用 A,所以 B 是有责任的。

    如何避免这种问题:
    说实话,就算有测试,对这种问题也很难保证测试出来的,建议是强制开发规范,增加一条所有项目都要查慢 sql 的问题。
    NillSpake
        126
    NillSpake  
       Jan 11, 2021
    A 只提供服务,B 去调用,不看服务参数,瞎弄怪谁?
    A 无责,B 次责,测试主责
    就好像 A 提供卖水果的功能,B 传参苹果,梨子,突然不传递参数了我把水果摊给你了,也没有毛病呀
    LeeSeoung
        127
    LeeSeoung  
       Jan 11, 2021
    能上线了都是测试的锅(手动狗头
    vone
        128
    vone  
       Jan 11, 2021
    这说明同事 B 的工作能力有问题,但是 HR 没有及时反馈至技术部门,并且更换符合岗位要求的员工。

    所以这肯定是 HR 的锅。
    Erroad
        129
    Erroad  
       Jan 11, 2021   ❤️ 1
    本来还想看下到底是 A 还是 B 的锅,一看还得员工赔,不用说了,老板的锅
    fengpan567
        130
    fengpan567  
       Jan 11, 2021
    员工赔偿?扣扣绩效得了,真的要员工赔,这样的公司也别待了
    murmur
        131
    murmur  
       Jan 11, 2021
    B 知不知道数据量有多少,这是关键,如果 B 在设计时明确知道千万级表就是 B 的锅,否则公司背
    SyncWorld
        132
    SyncWorld  
       Jan 11, 2021
    让员工赔偿损失的老板,锅都是老板的
    a719031256
        133
    a719031256  
       Jan 11, 2021
    A 应该无责任,B 有一点责任,主要责任还是测试以及负责人
    我之前公司测试那是各种奇葩数据都往项目中弄,还在网上买肉鸡来测,数据库撑爆了
    wh1012023498
        134
    wh1012023498  
       Jan 11, 2021
    我只能判断出来一点,在贵司要学会如何甩锅。
    rocbomb
        135
    rocbomb  
       Jan 11, 2021
    背锅也只是扣绩效
    敢扣工资?
    npe
        136
    npe  
       Jan 11, 2021
    60%领导的锅
    30%测试的锅
    10%开发者的锅
    zxyangyu
        137
    zxyangyu  
       Jan 11, 2021
    如果你调用标准库中方法出问题了
    会追究写方法的人没有照顾到你数据量大导致宕机问题吗?
    useben
        138
    useben  
       Jan 11, 2021
    接口是谁, 谁的锅. 说调接口还要去看方法的都是没参与过大型项目的...
    shaohan0228
        139
    shaohan0228  
       Jan 11, 2021   ❤️ 1
    直接责任人:B
    间接责任人:A 需求方
    主要责任人:领导(负责开发的,负责测试的,负责流程管理的,负责项目的,公司主管技术的,公司主管培训的,公司主管安全的,分管领导,分公司领导,集团公司分管领导)根据事故范围,逐级往上追就好了

    处理意见:
    B 扣除一定奖金,要求个人书写针对此次事故的总结教训(公司气不过就开除)
    A 不进行金钱处罚,要求日后在功能开发中添加相关限制(由分管技术负责监督)
    分管技术,扣罚一定个人奖金,针对此次事故,编写相关的技术措施,要求在日后开发中落实
    分管测试,扣罚一定个人奖金,针对此次事故,编写相关的技术措施和测试用例,要求能够在日后测试中,能够有效筛查
    需求方:扣罚一定个人奖金,书写检讨书,要求日后按照流程进行需求提交,严禁擅自更改开发流程
    分管项目,扣罚个人项目奖金,要求作出检讨,对项目管理不到位,项目流程执行不到位,要求加强落实项目流程的执行。

    罚款金额 B < 需求< 分管
    Asuka0947
        140
    Asuka0947  
       Jan 11, 2021
    可以共患难,不能同享福,万一你用的开源出问题了,是不是还要找作者赔钱?
    gamexg
        141
    gamexg  
       Jan 11, 2021 via Android
    看起来 a 没什么责任。
    作为非业务的底层库实现,列表查询一般都是这样实现的,某个条件不提供,那么就忽略这个条件。
    或者说,如果认为 a 有责任,那么 a 怎么做才不担责?作为底层库,列表查询某个条件为空时直接报错?这比目前的实现还糟糕。

    b 负有责任,作为业务实现,需要评估业务实现是否有性能问题。而且作为业务方,也负责参数检查责任。

    测试也是有责任,当前线上数据体量下测试,空参数测试是很正常的要求,这个 bug 比多线程下的 bug 好测试的多。

    领导承担权利的同时也承担责任,领导的责任也是跑不了的,更别说领导把测试调走了。

    不过损失方面,法律规定员工最多承担 20%工资的责任。
    play78
        142
    play78  
       Jan 11, 2021
    这种慢查询,影响还比较小。
    建议楼主看看,delete 的时候,参数有没有过滤好。
    不然整表删除,那就不是责任问题了,删库要跑路了。
    rabbbit
        143
    rabbbit  
       Jan 11, 2021
    通过如下楼主发的帖子能大致猜到这是哪家公司(假设楼主在 2019 年没有跳槽的话),大家绕着走吧.
    https://www.v2ex.com/t/546491?p=1
    https://www.v2ex.com/t/633045
    https://www.v2ex.com/t/730952
    yzbythesea
        144
    yzbythesea  
       Jan 11, 2021   ❤️ 3
    楼主是工贼还是蠢?怎么总结来总结去,还在测试,A,B 里面绕?这么奇怪的问责,不先想想今年跑路?
    mandymak
        145
    mandymak  
       Jan 11, 2021
    @yasumoto 锅应该是同事 B 背,同事 A 写了,但是否调用的决定权是在同事 B 。我吃饭呛着难道我要去责怪种稻的还是做饭的?
    seesky
        146
    seesky  
       Jan 11, 2021
    看来以后没个几百万还是不要出来工作了, 分分钟钟要承担损失.
    lesterchen
        147
    lesterchen  
       Jan 11, 2021
    都说测试主责,我都不知道不怎么想的。现在公司测:开一般在 1:4-5 左右,如果按你们这样算,测:开要 4-5:1,还差不多
    natashahollyz
        148
    natashahollyz  
       Jan 11, 2021 via iPhone
    A 做了把刀,B 拿去干了坏事,谁的错?
    allenhu
        149
    allenhu  
       Jan 11, 2021   ❤️ 2
    A 写的接口,健壮性不够,就算这次 B 没调,也有可能下次被 C 调了; A 的行为导致系统整体熵增加了, 肯定是 A 的锅
    ychost
        150
    ychost  
       Jan 11, 2021
    老板背
    efaun
        151
    efaun  
       Jan 11, 2021
    @rodrick #101 讲道理这应该算压测
    cccssss
        152
    cccssss  
       Jan 11, 2021   ❤️ 1
    DBA 全责,没有自动杀掉慢 sql
    darknoll
        153
    darknoll  
       Jan 11, 2021
    毫无疑问是 B 的问题,全锅
    coldear
        154
    coldear  
       Jan 11, 2021   ❤️ 1
    找锅这种想法不利于公司发展,我在美国亚麻经历过类似的事情,
    整个事件大家的精力和讨论都集中在两点:
    1. 怎样减小损失
    2. 怎样不让类似的事情再发生
    各个相关部门都参与,包括 api 提供者,调用者,QA 等等,每一方都提出和执行一系列具体措施( action item )
    JKeita
        155
    JKeita  
       Jan 11, 2021
    A 肯定没责任,他这代码本来就合逻辑,就跟卖刀的,买刀的去杀人,难道还怪卖刀的?
    thtznet
        156
    thtznet  
       Jan 11, 2021   ❤️ 1
    某化工厂因为没有落实生产安全措施,在生产过程中发生了重大安全事故,导致国家重大财务损失和人员伤亡,影响极其恶劣。你觉得作从国家层面的考虑,第一责任人是谁?废话,肯定是老板啊。你看从法律层面都能明白的事,扯到写代码就不明白了?
    duanxianze
        157
    duanxianze  
       Jan 11, 2021
    老板自己背
    ImShiYue
        158
    ImShiYue  
       Jan 11, 2021
    首先,A 的责任在于没有索引的字段没有添加<if test xxx==null or xxx==''>避免全表去查,B 的责任在于没有值的时候没去处理。但是更大的责任在于测试,没索引的全表查询没有测出来。
    frank1357
        159
    frank1357  
       Jan 11, 2021
    那些说测试背锅的,我觉得你们说的好, 以后也不用叫测试了, 直接叫背锅侠得了;竟然直接导致 BUG 的开发人没责任
    mknightoy
        160
    mknightoy  
       Jan 11, 2021
    A 是提供方,如果没有做好相关教程则 A 主责、B 次责
    B 在 A 提供了教程的情况下犯错负所有责任
    领导管人不管事所以不负责 [doge]
    zr8657
        161
    zr8657  
       Jan 11, 2021
    出了锅扣钱?那赚了钱分成了吗?
    victor
        162
    victor  
       Jan 11, 2021
    @sunrain 很感兴趣,能否讲讲如何因为接口传不同的参数,让流量费用多这么多
    DeWhite
        163
    DeWhite  
       Jan 11, 2021
    案例一:所在部门主管股权被暂时剥离。
    案例二:测试股权被暂时剥离。
    Aurt
        164
    Aurt  
       Jan 11, 2021
    傻逼公司,还在这问谁的锅?跑路就完了
    Maxxxxyu
        165
    Maxxxxyu  
       Jan 11, 2021
    查询没有超时限制吗???
    zhang0320
        166
    zhang0320  
       Jan 11, 2021
    @MoccaCafe 哈哈哈,逻辑鬼才。
    jason19659
        167
    jason19659  
       Jan 11, 2021
    小改动要求工期就不测试了吗? 压日期上线出了事还要员工担责?
    hun2008hun
        168
    hun2008hun  
       Jan 11, 2021
    把监控干掉,天下太平
    Ritr
        169
    Ritr  
       Jan 11, 2021
    什么时候轮到普通员工承担业务损失了?我看你是缺少社会主义核心价值观!
    Lefi
        170
    Lefi  
       Jan 11, 2021
    A 学生给 B 学生教了方法,

    B 学生拿过来没解出题目。

    负责批改的老师也没看出来?

    这是 A 学生的锅?
    yuelang85
        171
    yuelang85  
       Jan 11, 2021
    跟 A 没关系。测试没有参与,没关系。

    同意上线的领导负有主要责任,因为没有走正常上线流程。

    B 负有责任。
    yuelang85
        172
    yuelang85  
       Jan 11, 2021
    跟 A 没关系是因为:假设我写一个算小 int 加法的方法,你拿去整个循环算大数乘法,卡死了能怪我?
    keepfun
        173
    keepfun  
       Jan 11, 2021
    b 的
    stupil
        174
    stupil  
       Jan 11, 2021
    全表 1000 万的数据 机器直接卡死了

    这机器性能不行啊, 啥数据查询 1000w 条数据就卡死了。

    明显服务器配置和数据库性能问题。
    xuewuchen
        175
    xuewuchen  
       Jan 11, 2021
    我打了把菜刀放那,你拿刀去杀人了。。会是我的问题吗?
    6orz
        176
    6orz  
       Jan 11, 2021
    明明是写的人问题,怎么怪调用的和测试的。
    justsosososo
        177
    justsosososo  
       Jan 11, 2021
    这问题还问 B 的问题
    zhangshine
        178
    zhangshine  
       Jan 11, 2021
    当然是项目负责人背锅。要不然负责人干啥用的。
    justsosososo
        179
    justsosososo  
       Jan 11, 2021   ❤️ 1
    白嫖人家写好的方法出事了还舔着个大逼脸让人家背锅.... 这是人干的事?
    yhxx
        180
    yhxx  
       Jan 11, 2021
    我遇到过一个类似的
    A 负责某业务并提供解决方案供其他人使用
    B 在 A 不知情的情况下自己实现了另一套解决方案
    B 这套线上炸了
    A 背了锅
    boris93
        181
    boris93  
       Jan 11, 2021 via Android   ❤️ 2
    最烦这种出问题先想着分锅的。

    测试没参与,也就是说,一段代码,未经有效的测试,就上生产了?谁给测试排的期?为什么可以让这段代码跳过测试直接上生产?

    上线流程是谁制定的?有没有强制代码必须经过测试才能部署生产?有规定的话,为什么没有落实?没有规定的话,为什么放任未经测试的代码到生产?这里是谁制定流程以及保障落实的?

    开发人员为什么没有落实谁编写谁负责?为什么连自己先测一遍正常以及不正常的路径的意识都没有?

    这不是一个人或两个人的问题,这是整体流程满是漏洞,这次正好所有漏洞都畅通无阻,于是就出事故了。
    whasyt
        182
    whasyt  
       Jan 11, 2021
    赔钱也不会赔多少吧,而且也是应该是直系领导象征性罚款,落到个人的头上嘛,那就不好说了
    pangleon
        183
    pangleon  
       Jan 11, 2021
    @yhxx 等等,这个 A 背锅的理由是??声音不够大?
    lujch
        184
    lujch  
       Jan 11, 2021
    首先,公司的锅。其次,A 的方法特供 B 的业务 ? A : B;
    asAnotherJack
        185
    asAnotherJack  
       Jan 11, 2021
    要员工承担损失?说出公司名吧,让大家避避坑
    dioxide
        186
    dioxide  
       Jan 11, 2021
    可以类比: 数据有效期检查应该由 函数的实现方负责 还是 函数的调用方负责;
    我觉得应该由实现方负责, 当然也看约定的情况了
    ltt
        187
    ltt  
       Jan 11, 2021
    当然是老板的锅
    ydpro
        188
    ydpro  
       Jan 11, 2021
    聪明人已经在想明年提桶跑路,现在在找工作了
    whx20202
        189
    whx20202  
       Jan 11, 2021
    mybatis generator 生成的模板就是这样,A 凭啥背锅?
    B 同事用过 mybatis 吗?
    alexgor
        190
    alexgor  
       Jan 11, 2021
    就一句:程序写好了赚钱了有没分员工?
    chippai
        191
    chippai  
       Jan 11, 2021
    1. 锅是整个团队的了。
    2. A 的方法是对外的 http 或 rpc 接口吗,不是的话就不该有责任。
    3. 员工不可能承担任何损失。
    chenshun00
        192
    chenshun00  
       Jan 11, 2021
    在实习的时候也整过一次,那个时候数据库是 500W 条数据,但是不是一个很看中的业务,由于硬件有问题 && 我没有做做参数检验,导致了全表更新 (500w 更新),注意这个更新操作非常的频繁,直接把整个库拖挂了,然后领导电话直接过来,你是不是做什么了,RDS 直接 GG,后续做参数校验,然后就去做菜了.
    回到这个问题
    A 肯定考虑不周,最起码没有去想过哪些参数可传或可不传,但是他自己用肯定没有问题,因为他写的,他知道怎么去避坑,或者说在他的场景下永远不可能出现全表的情况,sql 的超时也没有设置,千万级别的表加个 timeout 不过分吧
    B 业务就是这么做的. 他本身是不知道 A 的实现的,也没有做参数限制,不知道有没有和 A 沟通,反正我调用别人的服务就是问一下,肯定不知道内部实现.

    后续想知道你们是怎么处理的 :)))
    0d
        193
    0d  
       Jan 11, 2021 via Android
    损失员工承担,赚钱员工按合伙人分成吗
    shiroikuma
        194
    shiroikuma  
       Jan 11, 2021
    瑟瑟发抖
    vanityfairn
        195
    vanityfairn  
       Jan 11, 2021
    也不一定是 qa 背阿,不是啥问题就往测试上扔的。别想着分锅阿,好好看看这个上线流程,测试介入了的话,没测试到就是测试的问题(但是比如 1000 万的量这种极端情况,测试也没办法的,我们这儿就是一起背),其次,承担损失就扯淡
    wjfz
        196
    wjfz  
       Jan 11, 2021
    雪崩时,没有一片雪花是无辜的。
    gengzi
        197
    gengzi  
       Jan 11, 2021
    有意思
    wugq
        198
    wugq  
       Jan 11, 2021
    我想问问这种情况该怎么写 SQL,默认情况也加个有索引的条件上去吗?
    keventseng
        199
    keventseng  
       Jan 11, 2021
    这个大家都有责任,但是……锅必须技术负责人背,毕竟上线前没检查代码。
    alexzuo
        200
    alexzuo  
       Jan 11, 2021
    什么叫“让员工负责一部分损失”?
    这个似乎不符合劳动法。
    1  2  3  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4537 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 273ms · UTC 00:12 · PVG 08:12 · LAX 17:12 · JFK 20:12
    ♥ Do have faith in what you're doing.