<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何實(shí)現(xiàn)日常業(yè)務(wù)問(wèn)題的一鍵排查?

          共 3808字,需瀏覽 8分鐘

           ·

          2021-03-31 11:03

          背景

          在日常的開發(fā)中,我們會(huì)收到來(lái)自用戶,合作伙伴,客服,運(yùn)營(yíng),產(chǎn)品和測(cè)試的各種各樣的問(wèn)題反饋,問(wèn)題咨詢,單點(diǎn)問(wèn)題排查等,這些問(wèn)題在經(jīng)過(guò)若干人轉(zhuǎn)交后,大部分最終會(huì)由開發(fā)同學(xué)處理。
          而開發(fā)同學(xué)解決這些問(wèn)題也相當(dāng)痛苦:反復(fù)溝通獲取必要的查詢參數(shù),從多個(gè)平臺(tái)得到業(yè)務(wù)數(shù)據(jù),如果沒有相關(guān)的平臺(tái)工具,那么還會(huì)通過(guò)構(gòu)建SQL, rpc服務(wù)入?yún)ⅲ彺鎘ey等查詢獲取所需要的業(yè)務(wù)參數(shù),最后根據(jù)你多年對(duì)業(yè)務(wù)的理解,從這些數(shù)據(jù)中找到答案。
          我們可以將以上歸納為兩個(gè)影響我們?nèi)粘?wèn)題排查效率的因素:問(wèn)題流轉(zhuǎn)多;排查鏈路長(zhǎng)。

          本文將介紹一種提高日常業(yè)務(wù)問(wèn)題排查效率的通用方案,并已在閑魚應(yīng)用落地,取得了不錯(cuò)的效果。
          該方案具備以下特點(diǎn):
          • 一鍵獲取所有關(guān)聯(lián)業(yè)務(wù)數(shù)據(jù):輸入不同維度的入?yún)ⅲ@取一致的數(shù)據(jù)結(jié)果;

          • 業(yè)務(wù)數(shù)據(jù)易于理解,人人可用:可對(duì)業(yè)務(wù)數(shù)據(jù)屬性進(jìn)行解釋,以方便非技術(shù)人員自助查詢;

          • 業(yè)務(wù)數(shù)據(jù)可診斷:如果數(shù)據(jù)出現(xiàn)異常,能夠給出異常的數(shù)據(jù)信息。

          業(yè)務(wù)數(shù)據(jù)全景與診斷

          整體思路

          我們將問(wèn)題分成2類
          • 異常case問(wèn)題:業(yè)務(wù)數(shù)據(jù)存在異常(數(shù)據(jù)缺失,狀態(tài)不一致等)

          • 業(yè)務(wù)數(shù)據(jù)查詢:數(shù)據(jù)正常,需要咨詢相關(guān)數(shù)據(jù)(單據(jù)狀態(tài),權(quán)益核銷情況等)

          通過(guò)對(duì)問(wèn)題的歸納和排查過(guò)程的抽象,我們的思路就比較清晰了:

          1.提供一種通用的數(shù)據(jù)聚合查詢方式,能夠依賴調(diào)用各個(gè)系統(tǒng)服務(wù)獲取所有關(guān)聯(lián)數(shù)據(jù)
          2.對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行語(yǔ)義解釋和補(bǔ)充
          3.抽象業(yè)務(wù)規(guī)則集,判斷數(shù)據(jù)是否存在異常
          此外,系統(tǒng)還要 具備高擴(kuò)展性和接入成本低,使其他業(yè)務(wù)快速接入使用。
          整體架構(gòu)如下:

          下面分別介紹如何實(shí)現(xiàn)數(shù)據(jù)全景,業(yè)務(wù)語(yǔ)義解釋,以及業(yè)務(wù)數(shù)據(jù)診斷。

          數(shù)據(jù)全景

          這一部分是整個(gè)系統(tǒng)的基礎(chǔ),后續(xù)的所有的能力都是基于聚合查詢的數(shù)據(jù)實(shí)現(xiàn)的。聚合查詢會(huì)調(diào)用多個(gè)系統(tǒng)的接口,而對(duì)于每個(gè)業(yè)務(wù)的服務(wù)依賴都不同且只能由負(fù)責(zé)該業(yè)務(wù)的開發(fā)同學(xué)完成(因?yàn)槠渌瞬⒉恢廊∧男?shù)據(jù)),如果查詢成本過(guò)高則不利于業(yè)務(wù)方的接入和使用,通用性也大打折扣。這里我們選擇GraphQL作為數(shù)據(jù)聚合查詢服務(wù)。
          關(guān)于GraphQL的介紹:https://graphql.cn/
          閑魚此前有過(guò)關(guān)于GraphQL的一些實(shí)踐。通過(guò)編寫graphql語(yǔ)句一次性獲取所有的數(shù)據(jù),前端根據(jù)數(shù)據(jù)直接渲染,實(shí)現(xiàn)快速搭建頁(yè)面。通過(guò)將業(yè)務(wù)邏輯前置,服務(wù)端只需要專注于建設(shè)穩(wěn)定的域服務(wù),使我們開發(fā)過(guò)程中免除了前后端的數(shù)據(jù)格式約定和接口聯(lián)調(diào),提高了研發(fā)效率。很多情況下,GraphQL也可以作為FaaS的一種解決方案。
          我們以閑魚回收業(yè)務(wù)為例,該業(yè)務(wù)全鏈路涉及到 交易,資金,芝麻信用,螞蟻能量,傭金結(jié)算,和估價(jià)數(shù)據(jù),其graphql語(yǔ)句簡(jiǎn)單描述為:

          如上圖,我們輸入訂單號(hào)bizOrderId, 通過(guò)GraphQL執(zhí)行器分別依賴調(diào)用了多個(gè)系統(tǒng)的 訂單服務(wù)queryBizOrder,估價(jià)服務(wù)HSF_quoteService,代扣服務(wù) HSF_agreementpayBillQuery, spu查詢服務(wù)HSF_spuQuery,結(jié)算查詢服務(wù)settleBillQuery, 并且通過(guò)Tair(分布式緩存,類似redis)查詢了用戶的業(yè)務(wù)狀態(tài),經(jīng)過(guò)6個(gè)系統(tǒng)最終得到聚合數(shù)據(jù):

          使用GraphQL實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)的聚合查詢,業(yè)務(wù)使用成本大大降低,一般無(wú)需侵入系統(tǒng)即可獲取所有數(shù)據(jù)。
          業(yè)務(wù)語(yǔ)義轉(zhuǎn)換
          數(shù)據(jù)轉(zhuǎn)換是將GraphQL的查詢數(shù)據(jù)轉(zhuǎn)變?yōu)榭杀焕斫獾臉I(yè)務(wù)數(shù)據(jù), 包括屬性字段的中文解釋,以及對(duì)屬性值的含義解釋,以便于可視化輸出和降低非技術(shù)同學(xué)理解成本,這里需要解決3個(gè)問(wèn)題:

          數(shù)據(jù)重分組

          從上面的例子我們看到,“用戶信用訂單筆數(shù)”是來(lái)自于redis 這樣中間件的非特定域服務(wù)的數(shù)據(jù), 但從業(yè)務(wù)邏輯的劃分上,這個(gè)數(shù)據(jù)應(yīng)當(dāng)屬于”用戶“域,因此,為了表達(dá)更加直觀,我們將其歸為用戶屬性

          輸入數(shù)據(jù)的不確定性

          在很多情況下,反饋者提供的查詢?nèi)雲(yún)⒉⒉豢偸且粋€(gè)維度的參數(shù),如交易鏈路中,用戶提供的可能是 訂單id/退款單Id/資金單Id/權(quán)益Id等,這些數(shù)據(jù)實(shí)際上都能一一對(duì)應(yīng), 如果只能通過(guò)訂單號(hào)查詢,那有時(shí)候就需要進(jìn)行至少一次反查才能得到訂單Id后再使用工具。要實(shí)現(xiàn)”一鍵直達(dá)“,我們就要支持多維參數(shù)輸入,比如上面的例子,還可以通過(guò)估價(jià)Id來(lái)獲取聚合數(shù)據(jù):

          可以看到這兩個(gè)ql返回的數(shù)據(jù)結(jié)構(gòu)是不同的,但其有效的業(yè)務(wù)數(shù)據(jù)都是相同的,我們將這種數(shù)據(jù)稱為異構(gòu)數(shù)據(jù)

          異構(gòu)數(shù)據(jù)統(tǒng)一

          不同的輸入?yún)?shù)導(dǎo)致我們需要使用不同的GraphQL語(yǔ)句來(lái)表達(dá),并得到了不同結(jié)構(gòu)的返回結(jié)果,這不利于業(yè)務(wù)字段的解釋和數(shù)據(jù)規(guī)則檢查 。因此需要將多個(gè)異構(gòu)數(shù)據(jù)合并為一個(gè)確定的數(shù)據(jù)結(jié)構(gòu),作為頁(yè)面統(tǒng)一展示,和后續(xù)進(jìn)行數(shù)據(jù)診斷的輸入?yún)?shù)。
          我們使用JSONPath將其轉(zhuǎn)化為統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)并對(duì)數(shù)據(jù)進(jìn)行重新分組:

          除了JSONPath,我們還實(shí)現(xiàn)了一些其他情況下的二次值轉(zhuǎn)換:
          • 狀態(tài)值轉(zhuǎn)換:通常用于翻譯可枚舉的狀態(tài)值,如交易狀態(tài)=6 解釋為 交易狀態(tài)=6(交易成功);

          • 虛擬屬性值對(duì):類似于宏,如定義 "是否是高價(jià)訂單" = eval(order.price>2000), 計(jì)算表達(dá)式的值,以補(bǔ)充一個(gè)原本不存在的屬性字段。

          現(xiàn)在,我們已經(jīng)得到一個(gè)可以查詢業(yè)務(wù)全景數(shù)據(jù)的工具了。你可以使用它作為業(yè)務(wù)數(shù)據(jù)的查詢控制臺(tái)。

          有了統(tǒng)一的業(yè)務(wù)數(shù)據(jù),下一步就是實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)的診斷能力。

          業(yè)務(wù)診斷

          判斷數(shù)據(jù)是否異常,從開發(fā)角度看就是這樣的邏輯集合:
          if(實(shí)際值!=期望值){
          print 異常結(jié)果
          }
          這里的[期望值] 是一個(gè)數(shù)據(jù)集,即表示為:
          當(dāng) 數(shù)據(jù)中出現(xiàn)A數(shù)據(jù)時(shí),數(shù)據(jù)還應(yīng)當(dāng)有結(jié)果[B1,B2,B3]。
          我們將業(yè)務(wù)邏輯細(xì)化,形成一個(gè)業(yè)務(wù)數(shù)據(jù)規(guī)則表達(dá)模型:

          這些規(guī)則可以從業(yè)務(wù)TC用例得出,進(jìn)行可視化后還能幫助新人學(xué)習(xí)業(yè)務(wù)邏輯。

          我們選擇QLExpress來(lái)表達(dá)并執(zhí)行這個(gè)規(guī)則
          QLExpress(https://github.com/taobao/qlexpress)是阿里開源的一種動(dòng)態(tài)腳本引擎,功能強(qiáng)大,兼容java的大部分語(yǔ)法,可以使用關(guān)鍵字別名替換:
          如果(order.isCreditOrder == "1") 
          return order.idleCreditPayAmount > 0;
          否則 return true;
          執(zhí)行上面的規(guī)則代碼
              //defaultContext 是數(shù)據(jù)轉(zhuǎn)換后的數(shù)據(jù),作為qlexpress的上下文
          Object executeResult = QLExpressUtil.execute(ruleExpress, defaultContext,
          errorList, false, false);
          //將執(zhí)行結(jié)果轉(zhuǎn)換,空結(jié)果默認(rèn)成功, 如果結(jié)果為失敗,則再執(zhí)行一次formater獲得錯(cuò)誤文案
          QLExpResult qlExpResult = buildQlExpResult(context, executeResult, formater);
          if (!qlExpResult.getSuccess()) {
          errors.add(DiagnosisError
          .of(ErrorLevel.BIZ_ERROR.name(), ruleName, String.valueOf(qlExpResult.getData())));
          }
          依次將所有的規(guī)則全部執(zhí)行完后,將結(jié)果與業(yè)務(wù)結(jié)果合并展示,就得到一個(gè)帶有診斷結(jié)果的業(yè)務(wù)全景數(shù)據(jù):

           整體執(zhí)行過(guò)程
          最后,總結(jié)一下整個(gè)執(zhí)行過(guò)程:

          以上就是我們實(shí)現(xiàn)日常業(yè)務(wù)數(shù)據(jù)全景排查與診斷的核心能力,通過(guò)提供一些頁(yè)面配置化接口,即可使多業(yè)務(wù)快速接入。

          應(yīng)用效果對(duì)比
          最后,我們從幾個(gè)維度對(duì)比下該工具的排查效率:

          能力延伸

          除此以外,我們還進(jìn)行了更多能力的延伸,以更高效地支持日常業(yè)務(wù)運(yùn)維。
          接入釘釘答疑機(jī)器人
          你可以在度假,休息,電腦不在身邊等不方便的情況下使用手機(jī)完成這一切,更高效更快速,避免了可能會(huì)收到的分手警告~

          用例的自動(dòng)化檢查

          如果業(yè)務(wù)系統(tǒng)會(huì)與外部(合作伙伴)系統(tǒng)交互,將無(wú)法通過(guò)內(nèi)部的回放工具來(lái)保障外部服務(wù)是否正常,我們可以基于診斷能力從數(shù)據(jù)層面驗(yàn)證是否存在異常:

          總結(jié)
          通過(guò)對(duì)日常問(wèn)題的分析歸納,排查流程的抽象,我們總結(jié)出了一個(gè)能夠提高日常單點(diǎn)問(wèn)題的排查效率的通用方案,使其能夠服務(wù)于產(chǎn)品,運(yùn)營(yíng),客服,研發(fā),測(cè)試人員,業(yè)務(wù)可擴(kuò)展且低成本接入,顯著降低了問(wèn)題的排查成本。方案的實(shí)現(xiàn)主要包括:
          • 使用GraphQL 實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)的聚合查詢;

          • 使用JSONPath 解決不同維度的異構(gòu)數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù)的重分組,并進(jìn)行業(yè)務(wù)語(yǔ)義解釋;

          • 使用QLExpress 表達(dá)和執(zhí)行業(yè)務(wù)數(shù)據(jù)規(guī)則,完成數(shù)據(jù)的診斷。

          當(dāng)然,目前還存在很多種情況無(wú)法做到一鍵排查,未來(lái),我們還會(huì)向著實(shí)現(xiàn)“問(wèn)題到我為止”的目標(biāo)持續(xù)優(yōu)化:
          • 結(jié)合日志檢索工具,用戶行為回放工具提供更多維度的一鍵直達(dá);

          • 對(duì)異常數(shù)據(jù)的處理,包括數(shù)據(jù)訂正,審批,指引;

          • 為客服,答疑等場(chǎng)景提供排查手段,引入敏感數(shù)據(jù)分級(jí),防止數(shù)據(jù)泄露;

          • 接入業(yè)務(wù)消息進(jìn)行對(duì)賬&監(jiān)控預(yù)警。

          瀏覽 74
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  俺来俺也去www色在线观看 | 激情一级国产激电影 | 神马午夜福利视频 | 操逼精品视频 | 蜜桃臀久久久蜜桃臀久久久蜜桃臀 |