qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          1688額度中心并發(fā)交易場景下鎖機(jī)制問題

           BUG標(biāo)題:
            事務(wù)處理過程中數(shù)據(jù)加鎖不合理,導(dǎo)致同一數(shù)據(jù)源在交易過程中被其他交易改變
            BUG影響:
            1688極速到賬、賬期支付等場景下并發(fā)下單失敗或金額占用不準(zhǔn)確現(xiàn)象,造成擔(dān)保方金額虧損
            BUG發(fā)現(xiàn)過程:
            1)前期參與開發(fā)代碼review,梳理1688極速到賬、賬期支付等場景事務(wù)處理過程和鎖使用機(jī)制,識別代碼風(fēng)險點;
            2)測試設(shè)計階段:針對性地設(shè)計各種交易復(fù)雜場景高并發(fā)壓測;
            3)測試過程中:編寫數(shù)據(jù)校驗?zāi)_本,在上億條日志中檢查每筆交易訂單正確性,并找到必現(xiàn)條件;
            原因為:交易過程中要用到的數(shù)據(jù)源被其他買家與該賣家交易時改變,導(dǎo)致失敗卻沒有進(jìn)行回滾,必現(xiàn)條件如下圖所示:
            BUG解決方法:
            在數(shù)據(jù)源被鎖住的代碼里再次添加查詢剩余額度代碼后再進(jìn)行金額占用,并保證失敗后能進(jìn)行數(shù)據(jù)回滾(注:第一次查詢剩余額度目的是查詢需要用到幾種授信源和各自的剩余金額進(jìn)行數(shù)據(jù)鎖定,開發(fā)認(rèn)為在查詢和數(shù)據(jù)鎖定之間時間極短不可能發(fā)生改變,故在鎖內(nèi)未加入再次查詢節(jié)省性能開銷),同時在回歸過程中評估修改影響,注意鎖內(nèi)操作變多帶來的接口性能下降問題,經(jīng)測試確實下降3MS左右幸好滿足預(yù)期。
            GBA傳承
            1、針對數(shù)據(jù)庫鎖測試時,一定要考慮并發(fā)測試場景,并確保查詢和使用數(shù)據(jù)源都在鎖內(nèi)進(jìn)行,避免數(shù)據(jù)不準(zhǔn)確;
            2、性能壓測過程中除了觀察接口調(diào)用返回正確性,還需要觀察產(chǎn)生的數(shù)據(jù)是否完全和預(yù)期相符,數(shù)據(jù)量大時建議用腳本或者編寫小工具進(jìn)行校驗,在上億條日志中不要放過任何一條可疑日志。
            個人感受:
            1、事務(wù)處理和數(shù)據(jù)鎖相關(guān)測試,需要介入代碼review,并理清各種約束條件和觸發(fā)場景設(shè)計壓測用例;
            2、需求評估階段單純的認(rèn)為接口壓測僅需要把各種接口串聯(lián)在一起進(jìn)行并發(fā)測試,只需要觀察接口返回正確性就OK,差點疏忽了復(fù)雜場景下接口返回是成功了但數(shù)據(jù)可能不一致的場景;
            3、涉及金額的測試,出現(xiàn)概率就算再小也是大事,需要多留一份心。

          posted on 2014-03-06 10:16 順其自然EVO 閱讀(283) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫

          <2014年3月>
          2324252627281
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 兰溪市| 平舆县| 延寿县| 承德县| 固始县| 潜山县| 黑山县| 新闻| 成武县| 怀集县| 晋城| 新野县| 沙田区| 富裕县| 沾化县| 琼结县| 宽甸| 台中市| 灵寿县| 朔州市| 东海县| 霍邱县| 沈丘县| 通化市| 唐海县| 浪卡子县| 达州市| 阳西县| 双江| 商洛市| 涪陵区| 左云县| 海南省| 太和县| 康乐县| 焦作市| 汝阳县| 天台县| 镇平县| 大英县| 岚皋县|