如何解決支付交易間歇性失敗問題
前言
間歇性業務故障往往是運維人員的工作難點之一,隨著網絡設備日漸增多,網絡環境也變得更加復雜,但保障業務性能仍需要各個設備正常運行,因此故障排查難度也越來越大。本案例將通過解決由WAF設備異常引發的支付交易故障,為運維人員提供面對間歇性業務故障時的應對思路。
4.1 問題描述
某大學老師、學生在通過手機支付寶在線充值校園卡時,頻繁發生顯示交易成功但校園卡的充值金額遲遲未到賬的現象,這在校園中產生了極其惡劣的影響。故障發生后,網絡管理員逐一排查一卡通服務器、防火墻、網絡等,均未發現明顯異常,無法有效定位問題原因。隨后故障又恢復正常,如此往復多次,無法得到解決。
為了定位和解決問題,網絡分析工程師在相關網絡中旁路部署了科來網絡回溯分析系統。
.2 分析方案設計
4.2.1 分析思路
該充值業務路徑為“手機支付寶充值操作→阿里支付寶處理賬務交易→支付寶向校園一卡通系統提交充值金額”。由于“手機支付寶充值操作→阿里支付寶處理賬務交易”交易流量無法被監控,因此只能根據故障時間重點分析“支付寶向校園一卡通系統提交充值金額”這一環節,通過提取“充值立即到賬”與“充值遲遲未到賬”的報文比對分析差異。
4.2.2 分析過程
首先在鏈路:“6509TO出口”提取一卡通充值服務器(X.X.194.23)交易流量,如下圖在HTTP請求日志中我們可以看到支付寶服務器(X.X.0.0/16網段)向一卡通服務器POST的URL均同為“/webservices-alipay/getway.ashx”,但是一卡通服務器應答有兩種狀態:
1、HTTP狀態碼為0
POST請求內容長度(Content-Length)為10180字節(此類交易會話數量較多),產生原因可能是POST請求數據包未發到一卡通服務器,或是一卡通服務器收到POST請求但不回應,或是回應被中間設備阻斷。
2、HTTP狀態碼為200(此類交易會話數量較少)
表明一卡通服務器成功回應POST請求,此時POST請求的內容長度在800左右字節。
由于第一種HTTP狀態為0的會話數量較多,懷疑充值金額未到賬原因可能與此類會話有關。
對此,我們抽樣分析內容長度為10180字節的會話。如下圖所示,對數據流重組解碼可以看到支付寶POST請求的內容以“sign=”開頭,其余為加密信息呈現,無法完全判斷此類交易信息與充值金額有關。但不妨先看此類會話傳輸狀況。
抽取X.X.242.226:18622-X.X.194.23:80端到端的分析,詳情如下:
流量采集鏈路:教育網出口(防火墻外側)
由于支付寶POST請求達10180字節,被拆分8個數據包(第4-11號數據包)且按序傳輸。同時一卡通服務器多次重傳(ACK=3974050115,第14-18號數據包),表明第6號數據包傳輸中丟包、或是后期才到服務器。
最后,服務器主動發送“FIN”斷開連接(ACK=3974058835,第20號數據包),說明一卡通服務器已全部接收到POST請求的內容,但為何未應答原因仍需繼續分析。
小結:支付寶發送的POST請求被拆分成8個數據包,按序進入防火墻。
流量采集鏈路:6509TO出口(防火墻內側)
根據TCP協議傳輸規范要求,每一個TCP數據包均攜帶有序列號(Seq),根據載荷偏移量可計算出下一序列值(Next Seq),在對端確認好ACK的值為Next Seq后本端向對端發送的下一個數據包的Seq值為上一個數據包的Next Seq 。
可以看到第4號與第8號數據包失序,第18號更是失序到最后才發送,才導致一卡通服務器一直重復ACK(ACK=3974050115)。最終一卡通服務器也接收了全部請求數據(第20號數據包),但仍未見到一卡通服務器應答。
小結:支付寶發送的POST請求被拆分成8個數據包,亂序從防火墻發出。
流量采集鏈路:6509_TO_NIPS(WAF外側)
傳輸狀況與在鏈路:6509TO出口一致,結論一致。
流量采集鏈路:服務器區(N7K)(WAF內側)
WAF內側,即WAF與一卡通服務器中間采集點。未能檢索同一時間段內支付寶服務器X.X.242.226會話,表明WAF未把支付寶POST請求發送給一卡通服務器,所以服務器一直無法收到支付寶的POST請求,也就無法應答。其他POST無應答會話也均未能在N7K鏈路上的流量檢索到,所以此現象是共性問題。
回查之前可成功充值的交易會話,內容長度均未達到10180字節,所有POST請求均得到一卡通服務器的應答,如下圖所示。
下圖會話是從鏈路“6509TO出口”下載的數據包,按序傳輸且未出現重傳等情況;同時POST請求內容以“sign=”開頭,得到一卡通服務器成功應答。通過對比發現:充值故障發生時一卡通服務器應答http/1.1 200 OK的會話都是只有個單個POST請求包(POST請求數據較少),并且POST請求內容以“service_type=”開頭。再結合故障時間及故障現象,基本上可以判定支付寶如果通過POST內容以“sign=”開頭的會話提交充值金額,那么該筆充值可立刻到賬。
4.3 分析總結及建議
當支付寶充值的POST請求數據量較小時(如內容長度在2300字節及以下),經過防火墻的請求數據包會按序傳輸給WAF設備,WAF設備也會將這些請求正常發送給一卡通服務器,充值金額立刻到賬。當支付寶充值的POST請求數據量較大時(如本例內容長度達10180字節),經過防火墻的請求數據包會亂序傳輸(POST請求被拆分成8個數據包)給WAF設備,但WAF并未將請求發送給一卡通服務器,直接造成一卡通服務器無法記賬,因此出現充值無法及時到賬現象。
綜上可知充值無法及時到賬是因為支付寶的充值請求終結在WAF防火墻,請求無法到達一卡通服務器造成。
科來網絡分析工程師建議該校運維負責人聯系WAF廠家進行詳細檢查,通過排查發現WAF設備異常是由其安全防護機制引發的,部分充值請求數據包被WAF設備認為是“加密攻擊”而被丟棄,當關閉WAF設備的相關策略后,充值無法及時到賬現象不再出現。
4.4 價值
傳統排查方式很定位間歇性業務故障的根源,在問題發生時,僅憑經驗排查安全防護策略、服務器等節點,未必能有效查明原因。對比傳統排查方式,科來網絡回溯分析系統擁有對間歇性業務故障強悍的解決能力。正如本例所示故障所示,雖然WAF設備沒有相關告警日志,但是通過流量分析和回溯分析等技術手段,可以準確定位故障原因,為解決故障提參考。