蘭清 南京星鄴匯捷網絡科技有限公司
傳統調度工具的做法:
1)負責把被調程序調起來;
2)傳遞一些參數給被調程序;
3)被調程序執行完成后返回成功或失敗給調度程序;
4)調度程序根據返回的結果判斷是否繼續執行;
5)整個調度過程,調度工具都不負責數據質量工作,所有的數據質量工作都由被調程序或獨立的數據質量模塊負責。
本文嘗試提供一種方法,把一部分相對通用的數據質量工作提到調度工具里做,被調程序或另外獨立的數據質量模塊只需要聚焦在更加重要的數據質量稽核即可。
1)調度程序跟被調程序之間:在已有參數接口規范的基礎上,增加一個基于XML的參數返回接口規范,通過XML承載數據質量相關的參數,要求被調程序按照規范返回參數值;
XML參數規范描述如下:
<DISPATCH_DQ>
<PARA PARA_ID= "1" TYPE= "COUNT">
<COUNT COUNT_ID="1" COUNT_NAME="表總記錄數"
COUNT_VALUE="1673" COUNT_TIME="2019.7.1"
/>
</PARA>
<PARA PARA_ID= "2" TYPE= "SUM">
<SUM SUM_ID="1" SUM_NAME="通話分鐘數累加和"
SUM_VALUE="8235" SUM_TIME="2019.7.1"
/>
<SUM SUM_ID="2" SUM_NAME="漫游通話分鐘數累加和"
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="手機號末四位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>是某個類型參數的定義:

類型名稱 返回參數名稱 返回參數說明COUNT 總處理記錄數 被調程序總共處理了多少條記錄數,可以有不同維度的總處理記錄數SUM 字段的累加和可以有不同字段的邏輯計算和,比如"手機號末四位ASCII碼之和"等其他 其他可以用于驗證的參數數值型字段的SUM值,可以有不同字段的累加和,比如"通話分鐘數累加和"、"漫游通話分鐘數累加和"等LSUM 字段的邏輯計算和
<COUNT COUNT_ID="1" COUNT_NAME="表總記錄數"
COUNT_VALUE="1673" COUNT_TIME="2019.7.1"
/>
這個是COUNT類型的參數屬性值,包括ID、名稱、值、生成時間。
<SUM SUM_ID="1" SUM_NAME="通話分鐘數累加和"
SUM_VALUE="8235" SUM_TIME="2019.7.1"
/>
這個是SUM類型的參數屬性值,包括ID、名稱、值、生成時間。
<LSUM LSUM_ID="1" LSUM_NAME="手機號末四位ASCII碼之和"
LSUM_VALUE="2789" LSUM_TIME="2019.7.1"
/>
這個是LSUM類型的參數屬性值,包括ID、名稱、值、生成時間。
2)調度程序按照周期或條件進行調度,然后按周期沉淀數據質量相關的參數值;
被調程序返回的XML參數值經過解析存儲在數據庫,為了處理性能考慮,采用橫表模型進行表模型設計,表結構如下:

序號 字段名 字段解釋1 COUNT_1 XML里COUNT類型的字段:字段名 = COUNT + 參數ID 2 COUNT_1_VALUE 3 COUNT_1_TIME 4 COUNT_2 5......6 SUM_1 XML里SUM類型的字段:字段名 = SUM + 參數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里LSUM類型的字段:字段名 = LSUM + 參數ID
3)一般沉淀幾個周期后,調度程序就可以根據沉淀的參數歷史值進行異常判斷:被調程序是否出現了異常(即便被調程序是返回成功),這種異??赡苁菢I務原因引起的,也可能是技術原因引起的。
本文采用多組動態閾值的方式進行參數異常的判斷,每一組動態閾值針對一種異常的嚴重程度,常見的可以分為三組動態閾值:
低動態閾值:表示一般性的異常。
中動態閾值:表示中等程度的異常。
高動態閾值:表示非常嚴重的異常。
根據第2步設計的表結構,就可以得到參數的歷史值,然后應用統計學上的方法對參數歷史值進行建模,得到三組動態閾值。比如利用均值+標準差的方式可以得到一段時間內歷史數據的均值μ和標準差σ,然后我們就可以得到三組動態閾值,示例如下:
低動態閾值:[μ-2σ, μ+2σ]
中動態閾值:[μ-4σ, μ+4σ]
高動態閾值:[μ-7σ, μ+7σ]
然后我們就可以利用這三組動態閾值來判斷被調程序的某個參數是否出現了異常,并且根據動態閾值的低、中、高采取不同的措施。
只要被調程序的某個參數出現問題,我們就可以判斷被調程序出現異常了。
當判斷被調程序出現異常時,如何把異常結果應用在調度流程中呢,可以通過設置規則來實現:
1)直接阻斷
當異常程度超過預設的高動態閾值時,可以直接阻斷,終止調度流程。
2)派單整治
當異常程度超過預設的中動態閾值,但低于高動態閾值時,可以派單進行異常處理。
3)發預警信息
當異常程度超過預設的低動態閾值,但低于中動態閾值時,只需要發出預警信息即可,調度流程按正常進行調度。
本文嘗試提供一種方法,把一部分相對通用的數據質量工作提到調度工具里做,增強調度工具的能力,同時簡化被調程序的數據質量稽核工作,提升調度效率,提高調度準確度。