蘭清 南京星鄴匯捷網(wǎng)絡(luò)科技有限公司
傳統(tǒng)調(diào)度工具的做法:
1)負(fù)責(zé)把被調(diào)程序調(diào)起來;
2)傳遞一些參數(shù)給被調(diào)程序;
3)被調(diào)程序執(zhí)行完成后返回成功或失敗給調(diào)度程序;
4)調(diào)度程序根據(jù)返回的結(jié)果判斷是否繼續(xù)執(zhí)行;
5)整個(gè)調(diào)度過程,調(diào)度工具都不負(fù)責(zé)數(shù)據(jù)質(zhì)量工作,所有的數(shù)據(jù)質(zhì)量工作都由被調(diào)程序或獨(dú)立的數(shù)據(jù)質(zhì)量模塊負(fù)責(zé)。
本文嘗試提供一種方法,把一部分相對(duì)通用的數(shù)據(jù)質(zhì)量工作提到調(diào)度工具里做,被調(diào)程序或另外獨(dú)立的數(shù)據(jù)質(zhì)量模塊只需要聚焦在更加重要的數(shù)據(jù)質(zhì)量稽核即可。
1)調(diào)度程序跟被調(diào)程序之間:在已有參數(shù)接口規(guī)范的基礎(chǔ)上,增加一個(gè)基于XML的參數(shù)返回接口規(guī)范,通過XML承載數(shù)據(jù)質(zhì)量相關(guān)的參數(shù),要求被調(diào)程序按照規(guī)范返回參數(shù)值;
XML參數(shù)規(guī)范描述如下:
<DISPATCH_DQ>
<PARA PARA_ID= "1" TYPE= "COUNT">
<COUNT COUNT_ID="1" COUNT_NAME="表總記錄數(shù)"
COUNT_VALUE="1673" COUNT_TIME="2019.7.1"
/>
</PARA>
<PARA PARA_ID= "2" TYPE= "SUM">
<SUM SUM_ID="1" SUM_NAME="通話分鐘數(shù)累加和"
SUM_VALUE="8235" SUM_TIME="2019.7.1"
/>
<SUM SUM_ID="2" SUM_NAME="漫游通話分鐘數(shù)累加和"
SUM_VALUE="1234" SUM_TIME="2019.7.1"
/>
<SUM SUM_ID="3" SUM_NAME="......"
SUM_VALUE="......" SUM_TIME="......"
/>
</PARA>
<PARA PARA_ID= "3" TYPE= "LSUM">
<LSUM LSUM_ID="1" LSUM_NAME="手機(jī)號(hào)末四位ASCII碼之和"
LSUM_VALUE="2789" LSUM_TIME="2019.7.1"
/>
<LSUM LSUM_ID="2" LSUM_NAME="......"
LSUM_VALUE="......" LSUM_TIME="......"
/>
</PARA>
<PARA PARA_ID= "......" TYPE= "......">
</PARA>
</DISPATCH_DQ>
<PARA> </PARA>是某個(gè)類型參數(shù)的定義:
類型名稱 返回參數(shù)名稱 返回參數(shù)說明COUNT 總處理記錄數(shù) 被調(diào)程序總共處理了多少條記錄數(shù),可以有不同維度的總處理記錄數(shù)SUM 字段的累加和可以有不同字段的邏輯計(jì)算和,比如"手機(jī)號(hào)末四位ASCII碼之和"等其他 其他可以用于驗(yàn)證的參數(shù)數(shù)值型字段的SUM值,可以有不同字段的累加和,比如"通話分鐘數(shù)累加和"、"漫游通話分鐘數(shù)累加和"等LSUM 字段的邏輯計(jì)算和
<COUNT COUNT_ID="1" COUNT_NAME="表總記錄數(shù)"
COUNT_VALUE="1673" COUNT_TIME="2019.7.1"
/>
這個(gè)是COUNT類型的參數(shù)屬性值,包括ID、名稱、值、生成時(shí)間。
<SUM SUM_ID="1" SUM_NAME="通話分鐘數(shù)累加和"
SUM_VALUE="8235" SUM_TIME="2019.7.1"
/>
這個(gè)是SUM類型的參數(shù)屬性值,包括ID、名稱、值、生成時(shí)間。
<LSUM LSUM_ID="1" LSUM_NAME="手機(jī)號(hào)末四位ASCII碼之和"
LSUM_VALUE="2789" LSUM_TIME="2019.7.1"
/>
這個(gè)是LSUM類型的參數(shù)屬性值,包括ID、名稱、值、生成時(shí)間。
2)調(diào)度程序按照周期或條件進(jìn)行調(diào)度,然后按周期沉淀數(shù)據(jù)質(zhì)量相關(guān)的參數(shù)值;
被調(diào)程序返回的XML參數(shù)值經(jīng)過解析存儲(chǔ)在數(shù)據(jù)庫(kù),為了處理性能考慮,采用橫表模型進(jìn)行表模型設(shè)計(jì),表結(jié)構(gòu)如下:
序號(hào) 字段名 字段解釋1 COUNT_1 XML里COUNT類型的字段:字段名 = COUNT + 參數(shù)ID 2 COUNT_1_VALUE 3 COUNT_1_TIME 4 COUNT_2 5......6 SUM_1 XML里SUM類型的字段:字段名 = SUM + 參數(shù)ID 7 SUM_1_VALUE 8 SUM_1_TIME 9 SUM_2 10 ......11 LSUM_1 12 LSUM_1_VALUE 13 LSUM_1_TIME 14 LSUM_2 15 ......XML里L(fēng)SUM類型的字段:字段名 = LSUM + 參數(shù)ID
3)一般沉淀幾個(gè)周期后,調(diào)度程序就可以根據(jù)沉淀的參數(shù)歷史值進(jìn)行異常判斷:被調(diào)程序是否出現(xiàn)了異常(即便被調(diào)程序是返回成功),這種異常可能是業(yè)務(wù)原因引起的,也可能是技術(shù)原因引起的。
本文采用多組動(dòng)態(tài)閾值的方式進(jìn)行參數(shù)異常的判斷,每一組動(dòng)態(tài)閾值針對(duì)一種異常的嚴(yán)重程度,常見的可以分為三組動(dòng)態(tài)閾值:
低動(dòng)態(tài)閾值:表示一般性的異常。
中動(dòng)態(tài)閾值:表示中等程度的異常。
高動(dòng)態(tài)閾值:表示非常嚴(yán)重的異常。
根據(jù)第2步設(shè)計(jì)的表結(jié)構(gòu),就可以得到參數(shù)的歷史值,然后應(yīng)用統(tǒng)計(jì)學(xué)上的方法對(duì)參數(shù)歷史值進(jìn)行建模,得到三組動(dòng)態(tài)閾值。比如利用均值+標(biāo)準(zhǔn)差的方式可以得到一段時(shí)間內(nèi)歷史數(shù)據(jù)的均值μ和標(biāo)準(zhǔn)差σ,然后我們就可以得到三組動(dòng)態(tài)閾值,示例如下:
低動(dòng)態(tài)閾值:[μ-2σ, μ+2σ]
中動(dòng)態(tài)閾值:[μ-4σ, μ+4σ]
高動(dòng)態(tài)閾值:[μ-7σ, μ+7σ]
然后我們就可以利用這三組動(dòng)態(tài)閾值來判斷被調(diào)程序的某個(gè)參數(shù)是否出現(xiàn)了異常,并且根據(jù)動(dòng)態(tài)閾值的低、中、高采取不同的措施。
只要被調(diào)程序的某個(gè)參數(shù)出現(xiàn)問題,我們就可以判斷被調(diào)程序出現(xiàn)異常了。
當(dāng)判斷被調(diào)程序出現(xiàn)異常時(shí),如何把異常結(jié)果應(yīng)用在調(diào)度流程中呢,可以通過設(shè)置規(guī)則來實(shí)現(xiàn):
1)直接阻斷
當(dāng)異常程度超過預(yù)設(shè)的高動(dòng)態(tài)閾值時(shí),可以直接阻斷,終止調(diào)度流程。
2)派單整治
當(dāng)異常程度超過預(yù)設(shè)的中動(dòng)態(tài)閾值,但低于高動(dòng)態(tài)閾值時(shí),可以派單進(jìn)行異常處理。
3)發(fā)預(yù)警信息
當(dāng)異常程度超過預(yù)設(shè)的低動(dòng)態(tài)閾值,但低于中動(dòng)態(tài)閾值時(shí),只需要發(fā)出預(yù)警信息即可,調(diào)度流程按正常進(jìn)行調(diào)度。
本文嘗試提供一種方法,把一部分相對(duì)通用的數(shù)據(jù)質(zhì)量工作提到調(diào)度工具里做,增強(qiáng)調(diào)度工具的能力,同時(shí)簡(jiǎn)化被調(diào)程序的數(shù)據(jù)質(zhì)量稽核工作,提升調(diào)度效率,提高調(diào)度準(zhǔn)確度。