支付通道自動(dòng)化管理的實(shí)踐之路
隨著支付業(yè)務(wù)量激增,支付團(tuán)隊(duì)不斷壯大。為了滿足日益增長的業(yè)務(wù)需求,大量的支付通道逐漸接入,但由于對(duì)接的各銀行和第三方系統(tǒng)的穩(wěn)定性參差不齊,支付通道故障時(shí)有發(fā)生,作為承接上下游的核心系統(tǒng),要在一系列不穩(wěn)定的系統(tǒng)之上建立一個(gè)可以給上游提供穩(wěn)定服務(wù)的系統(tǒng),僅依賴人工維護(hù)是遠(yuǎn)遠(yuǎn)不夠的,所以建立一個(gè)完善的支付通道自動(dòng)化管理系統(tǒng)勢在必行。本文主要介紹美團(tuán)點(diǎn)評(píng)技術(shù)團(tuán)隊(duì)支付通道自動(dòng)化管理的演進(jìn)之路。
初級(jí)階段
監(jiān)控系統(tǒng)初級(jí)階段
故障處理流程圖如下:
支付通道自動(dòng)化管理的初級(jí)階段持續(xù)時(shí)間是2014.06~2015.09,故障處理手動(dòng)切走、手動(dòng)切回,一次支付通道故障的詳細(xì)處理流程如下:
(1) 支付網(wǎng)關(guān)監(jiān)控檢測到支付通道成功率異常,發(fā)送報(bào)警消息到美團(tuán)點(diǎn)評(píng)技術(shù);
(2) 美團(tuán)點(diǎn)評(píng)技術(shù)立即查看監(jiān)控頁面確認(rèn)故障,并登陸到渠道路由配置頁面去修改對(duì)應(yīng)支付通道的狀態(tài),將通道置為不可用;
(3) 收銀臺(tái)實(shí)時(shí)讀取支付通道狀態(tài),將故障通道的流量全部切走;
(4) 美團(tuán)點(diǎn)評(píng)技術(shù)聯(lián)系銀行或第三方報(bào)故障,對(duì)方去查看問題,確認(rèn)恢復(fù)后通知美團(tuán)點(diǎn)評(píng)技術(shù);
(5) 美團(tuán)點(diǎn)評(píng)技術(shù)修改支付通道狀態(tài)為可用,收銀臺(tái)實(shí)時(shí)讀取到該支付通道,將線上流量導(dǎo)入;
(6) 如果支付通道恢復(fù),則用戶可以正常交易,本次故障結(jié)束;
(7) 如果支付通道未恢復(fù),大量交易失敗,美團(tuán)點(diǎn)評(píng)技術(shù)需要將該通道重新置為不可用,再次去聯(lián)系銀行或第三方處理,如此往復(fù),直到該通道的所有交易正常,本次故障結(jié)束。
半自動(dòng)化階段
初級(jí)階段存在的問題
初級(jí)階段系統(tǒng)的主要目標(biāo)是擴(kuò)大支付通道的覆蓋范圍,提高用戶支付成功的概率。隨著支付通道的不斷接入,由于公網(wǎng)環(huán)境、銀行或第三方系統(tǒng)的不穩(wěn)定性,導(dǎo)致故障頻率升高,故障時(shí)間延長。而此時(shí)處于初級(jí)階段的監(jiān)控系統(tǒng)已無法有效保證通道的穩(wěn)定性:
(1) 支付網(wǎng)關(guān)監(jiān)控報(bào)警漏報(bào)率較高,小流量通道故障無法及時(shí)發(fā)現(xiàn);
(2) 支付通道切換都是人來手動(dòng)處理,一方面技術(shù)的工作量嚴(yán)重增加,另一方面無法保證在處理故障過程中沒有任何誤操作;
(3) 故障解決花費(fèi)的時(shí)間較長,故障對(duì)用戶造成的影響就更大,同時(shí)用戶的不斷重試對(duì)支付系統(tǒng)本身也造成很大的壓力;
(4) 故障通道嘗試恢復(fù)時(shí),只能全部打開用線上真實(shí)交易來檢測,可能會(huì)因?yàn)橥ǖ郎形椿謴?fù),造成二次故障,擴(kuò)大影響范圍。
系統(tǒng)優(yōu)化
優(yōu)化監(jiān)控系統(tǒng)
(1) 優(yōu)化監(jiān)控算法:優(yōu)化監(jiān)控算法,將報(bào)警的準(zhǔn)確度提高到95%,基本做到無誤報(bào)、無漏報(bào);
(2) 新增自動(dòng)置通道為不可用功能:監(jiān)控檢測到支付通道故障時(shí),一方面發(fā)送報(bào)警消息給技術(shù)人員,另一方面調(diào)用渠道路由的接口將支付通道置為不可用,實(shí)現(xiàn)支付通道故障的快速降級(jí)。
此時(shí)的監(jiān)控系統(tǒng)如下圖所示:
渠道路由支持實(shí)時(shí)通道變更
在初級(jí)系統(tǒng)中,渠道路由的主要功能是提供通過頁面修改支付通道配置來實(shí)現(xiàn)人為管理支付通道的功能。隨著監(jiān)控系統(tǒng)的完善,監(jiān)控準(zhǔn)確度和靈敏度提升,此時(shí)監(jiān)控系統(tǒng)已經(jīng)具備支付通道管理的決策力,需要渠道路由提供一個(gè)可以實(shí)時(shí)更新支付通道狀態(tài)的接口,以實(shí)現(xiàn)支付通道的自動(dòng)化管理。而作為自動(dòng)通道切換的補(bǔ)償機(jī)制,渠道路由還實(shí)現(xiàn)了基于移動(dòng)App人工一鍵切換的功能,盡***可能保證故障的快速解決。
渠道路由提供的接口除了具備實(shí)時(shí)通道狀態(tài)變更功能以外,還需要進(jìn)行了以下幾個(gè)方面的控制:
(1) 一鍵切換功能,必須控制訪問權(quán)限;
(2) 具有事務(wù)控制和時(shí)效性控制,無論是自動(dòng)還是一鍵切換,一次故障必須能且只能切走通道流量一次;
(3) 必須保證通道狀態(tài)變化可以通過各種途徑通知到相關(guān)的技術(shù)人員。
故障處理流程圖
支付通道自動(dòng)化管理的半自動(dòng)化階段持續(xù)時(shí)間是2015.10~2016.10,故障處理自動(dòng)切走、手動(dòng)切回,一次通道故障的詳細(xì)處理流程如下:
(1) 監(jiān)控檢測到通道成功率異常發(fā)送報(bào)警消息給美團(tuán)點(diǎn)評(píng)技術(shù),同時(shí)自動(dòng)將通道置為不可用;
(2) 美團(tuán)收銀臺(tái)實(shí)時(shí)讀取通道狀態(tài),將故障通道的流量全部切走;
(3) 美團(tuán)點(diǎn)評(píng)技術(shù)立即聯(lián)系銀行和第三方報(bào)故障,對(duì)方確認(rèn)問題和恢復(fù)情況后反饋到美團(tuán);
(4) 美團(tuán)點(diǎn)評(píng)技術(shù)修改通道狀態(tài)為可用,收銀臺(tái)實(shí)時(shí)讀取到通道狀態(tài)為正常后,將線上流量放入該通道;
(5) 如果通道恢復(fù),則用戶可以正常交易,本次故障結(jié)束;
(6) 如果通道未恢復(fù),大量交易失敗,美團(tuán)點(diǎn)評(píng)技術(shù)或監(jiān)控會(huì)再次將通道狀態(tài)為不可用;
(7) 美團(tuán)點(diǎn)評(píng)技術(shù)再次聯(lián)系銀行或第三方處理故障,如此往復(fù),直到線上交易正常,本次故障結(jié)束。
主要完成的改進(jìn)點(diǎn)
(1) 優(yōu)化報(bào)警監(jiān)控算法,并支持一鍵查看通道狀態(tài),保證支付通道故障的快速發(fā)現(xiàn);
(2) 實(shí)現(xiàn)故障通道一鍵切換和自動(dòng)切換,從各方面保證通道故障快速處理;
(3) 大幅降低處理支付通道故障的人力成本。
全自動(dòng)化階段
半自動(dòng)化階段存在的問題
半自動(dòng)化階段已將故障處理流程大幅簡化,但此時(shí)的系統(tǒng)中還存在以下問題:
(1) 通道恢復(fù)依賴于銀行或第三方的反饋,導(dǎo)致支付通道恢復(fù)延時(shí)較久;
(2) 一次通道故障涉及到的系統(tǒng)和人員較多,人工無法保證全面和及時(shí)的周知。
但渠道路由由于早期設(shè)計(jì)的局限性,無法實(shí)現(xiàn)全自動(dòng)化,需要優(yōu)化監(jiān)控系統(tǒng)和渠道路由系統(tǒng)。
系統(tǒng)優(yōu)化
實(shí)現(xiàn)監(jiān)控自動(dòng)回切
監(jiān)控自動(dòng)回切的主要思想是對(duì)故障通道進(jìn)行小幅放量,通過檢測放量交易的成功率判斷通道是否恢復(fù)正常。如果小幅放量的交易成功率正常則繼續(xù)放量,反之則直接將通道切回故障,隔一段時(shí)間再重新開始進(jìn)行放量測試,直到將通道置為正常為止。自動(dòng)回切狀態(tài)機(jī)如下圖所示:
此過程的關(guān)鍵點(diǎn)是通道放量節(jié)奏的控制,通道放量節(jié)奏的影響要素有三個(gè):***放量的大小、兩次放量時(shí)間間隔、通道放量速度,放量節(jié)奏太快則易造成二次故障,太慢則通道恢復(fù)過慢,無法達(dá)到縮短故障影響時(shí)間的效果。以下是最終實(shí)現(xiàn)的一次通道回切過程示例:
(1) 通道放量,但放量失敗
(2) 再次放量,如果成功則擴(kuò)大放量
(3) 通道切回正常
實(shí)現(xiàn)通道相關(guān)系統(tǒng)間聯(lián)動(dòng)
支付通道故障時(shí),一方面通過消息組件通知到營銷活動(dòng)、退款等系統(tǒng),協(xié)助進(jìn)行活動(dòng)下線、通道退款關(guān)閉等處理,減少通道故障對(duì)其他系統(tǒng)的影響;另一方面以接口方式通知業(yè)務(wù)方系統(tǒng),協(xié)助業(yè)務(wù)方系統(tǒng)進(jìn)行故障分析。
渠道路由重構(gòu)和優(yōu)化
解決業(yè)務(wù)問題
支付通道有兩種通道類型,***種定義為“單卡通道”,只給指定銀行的指定卡種使用的通道,比如“中國銀行儲(chǔ)蓄卡快捷通道”就只能給輸入了中國銀行儲(chǔ)蓄卡卡號(hào)的請(qǐng)求使用;第二種定義為“跨卡通道”,能給多個(gè)銀行的指定卡種使用的通道,比如“銀聯(lián)API儲(chǔ)蓄卡”就可以給“中國銀行儲(chǔ)蓄卡”、“中國建設(shè)銀行儲(chǔ)蓄卡”等多個(gè)銀行的儲(chǔ)蓄卡賬號(hào)使用。
(1) 處理“跨卡通道”上某家銀行故障的情況
由于老路由系統(tǒng)設(shè)計(jì)之初,只簡單從“銀行渠道”和“支付通道”兩個(gè)維度考慮存儲(chǔ)信息,設(shè)計(jì)的表結(jié)構(gòu)比較簡單,對(duì)于支付通道故障的情況只能切換整個(gè)通道。如果是“跨卡通道”的單個(gè)銀行故障,老系統(tǒng)無法做到只把這故障銀行流量切走——要么放任整個(gè)“跨卡通道”因?yàn)閱蝹€(gè)故障銀行拉低成功率,要么切走整體通道的流量。在新路由系統(tǒng)中,針對(duì)每家銀行的指定卡種,分別記錄“跨卡通道本身不支持”和“跨卡通道支持但是銀行系統(tǒng)故障”的兩類數(shù)據(jù),在執(zhí)行路由邏輯篩選的時(shí)候就根據(jù)這些信息進(jìn)行過濾,實(shí)現(xiàn)“跨卡通道”切走單個(gè)故障銀行。
(2) 配合通道監(jiān)控系統(tǒng)實(shí)現(xiàn)通道的回切放量,試探性逐步恢復(fù)通道
解決技術(shù)問題
(1) 收斂分散的業(yè)務(wù)和存儲(chǔ)邏輯
驅(qū)使重構(gòu)路由系統(tǒng)的一大原因是老路由系統(tǒng)業(yè)務(wù)邏輯和數(shù)據(jù)存儲(chǔ)分散、系統(tǒng)間的邏輯嚴(yán)重耦合、邊界不清晰,經(jīng)常在系統(tǒng)間模糊地段踩坑。因此,重構(gòu)后需要將路由邏輯全部收斂到路由系統(tǒng),這包含兩個(gè)層面:
代碼層面——新路由系統(tǒng)需要整合老路由系統(tǒng)邏輯(Java代碼)和上游收銀臺(tái)中的路由邏輯(PHP),劃清上下游的職責(zé)邊界。
存儲(chǔ)層面——原來收銀臺(tái)或者交易系統(tǒng)會(huì)分別從配置中心、緩存、數(shù)據(jù)庫表、代碼配置文件、老路由系統(tǒng)接口中獲取不同的數(shù)據(jù),數(shù)據(jù)無法被集中管理。重構(gòu)之后,全部數(shù)據(jù)都由新路由管理集中管理,任何上游的數(shù)據(jù)需求都通過RPC接口請(qǐng)求路由系統(tǒng)。
(2) 系統(tǒng)容量和時(shí)效性
由于路由邏輯和基礎(chǔ)數(shù)據(jù)都收斂到新系統(tǒng),重構(gòu)后的路由將成為支付路徑上的關(guān)鍵環(huán)節(jié),用戶在美團(tuán)點(diǎn)評(píng)的每次支付交易至少會(huì)調(diào)用一次路由系統(tǒng)。根據(jù)目前美團(tuán)點(diǎn)評(píng)的體量,這對(duì)路由系統(tǒng)的峰值容量提出考驗(yàn)。另一方面,由于重構(gòu)系統(tǒng)需要兼容之前的老邏輯,這會(huì)導(dǎo)致有些接口的響應(yīng)時(shí)間達(dá)到幾百毫秒甚至超過一秒,對(duì)內(nèi)網(wǎng)調(diào)用來說是不可接受的。
水平擴(kuò)容機(jī)器是可以解決***個(gè)問題的,但是無法解決第二個(gè)問題?;诼酚傻臉I(yè)務(wù)場景是典型的“讀多寫少”、且基礎(chǔ)數(shù)據(jù)總量有限的情況,數(shù)據(jù)完全可以緩存在業(yè)務(wù)機(jī)器上,這樣能極大地減少對(duì)數(shù)據(jù)庫的讀取次數(shù)。采用本地緩存的方案后,系統(tǒng)接口響應(yīng)時(shí)間由秒級(jí)降為毫秒級(jí)。由于降低了請(qǐng)求處理時(shí)間,一個(gè)線程的處理能力也相應(yīng)提高了數(shù)十倍,系統(tǒng)的整體處理能力得到量級(jí)提升。
(3) 系統(tǒng)容災(zāi)方案
路由系統(tǒng)的容災(zāi)主要從兩方面實(shí)現(xiàn):
降低對(duì)外部組件的依賴性——“本地緩存”的引入使得路由系統(tǒng)處理實(shí)時(shí)業(yè)務(wù)請(qǐng)求時(shí),不直接讀取外部的緩存中心或者數(shù)據(jù)庫,這樣避免了這些基礎(chǔ)組件可能帶來的風(fēng)險(xiǎn)。
制定服務(wù)異常時(shí)的備用方案——如果路由系統(tǒng)異常將會(huì)直接導(dǎo)致用戶無法支付,因而收銀臺(tái)系統(tǒng)需要對(duì)路由進(jìn)行依賴降級(jí),采用的方案是:
a. 路由系統(tǒng)定時(shí)從數(shù)據(jù)庫中讀取基礎(chǔ)數(shù)據(jù),并根據(jù)路由策略產(chǎn)生兜底數(shù)據(jù),同步到配置中心;
b. 當(dāng)路由系統(tǒng)異常,收銀臺(tái)系統(tǒng)將降級(jí)讀取兜底數(shù)據(jù),保證用戶完成支付。
故障處理流程
支付通道自動(dòng)化管理的半自動(dòng)化階段持續(xù)時(shí)間是2016.11至今,故障處理自動(dòng)切走、自動(dòng)切回,一次通道故障的處理流程如下:
(1) 監(jiān)控檢測到通道成功率異常發(fā)送報(bào)警消息給美團(tuán)點(diǎn)評(píng)技術(shù)人員,同時(shí)自動(dòng)將通道置為不可用;
(2) 收銀臺(tái)實(shí)時(shí)讀取通道配置,收銀臺(tái)不會(huì)再將流量放入該通道,從而將故障通道的流量全部切走;
(3) 監(jiān)控在將通道置為不可用一段時(shí)間后,嘗試對(duì)故障通道放部分量進(jìn)來用以檢測通道是否正常;
(4) 如果放進(jìn)來的這部分量成功率正常,監(jiān)控則繼續(xù)放2倍的量,直到通道全量,監(jiān)控將通道置為可用;
(5) 如果放進(jìn)來的這部分量成功率異常,則將通道直接置為不可用,監(jiān)控隔一段時(shí)間后再繼續(xù)進(jìn)行放量,直到通道恢復(fù)為可用;
(6) 美團(tuán)點(diǎn)評(píng)技術(shù)在發(fā)現(xiàn)通道故障后,可以向銀行或第三方詢問故障原因,并記錄,留作日后分析使用。
系統(tǒng)演進(jìn)到這里,支付通道的管理已經(jīng)基本實(shí)現(xiàn)了完全自動(dòng)化,只有故障原因等附加信息需要人工獲取。
主要解決的問題
(1) 渠道路由重構(gòu)和優(yōu)化后提供了根據(jù)配比放量的功能和通道故障發(fā)送推送消息到各個(gè)需要知道通道狀態(tài)變化的系統(tǒng);
(2) 監(jiān)控可以根據(jù)通道當(dāng)前狀態(tài)和成功率情況,可以主動(dòng)選擇將通道置為故障、開始放量、繼續(xù)放量、切回故障、置為正常等操作,檢測通道是否恢復(fù),以實(shí)現(xiàn)支付通道自動(dòng)管理的功能;
(3) 釋放了大量需要處理通道故障的人力資源;
(4) 及時(shí)周知到相關(guān)系統(tǒng),降低故障影響,協(xié)助業(yè)務(wù)方系統(tǒng)進(jìn)行故障分析。
各階段系統(tǒng)優(yōu)化數(shù)據(jù)對(duì)比
支付通道管理系統(tǒng)在故障處理上的性能對(duì)比數(shù)據(jù)如下:
注:
故障響應(yīng)時(shí)間:從通道發(fā)生故障到通道被置為不可用的時(shí)間;
平均人力成本:故障發(fā)生期間需要耗費(fèi)人力;
平均故障恢復(fù)延遲:銀行或第三方真正恢復(fù)到美團(tuán)打開通道入口的時(shí)間。
總結(jié)與展望
支付通道管理系統(tǒng)的演進(jìn)過程就是一個(gè)完整的支付通道自動(dòng)化管理的實(shí)踐之路,自動(dòng)化不僅提升了系統(tǒng)故障處理能力,提升系統(tǒng)可用性,還釋放了大量人力。隨著支付系統(tǒng)的發(fā)展,后續(xù)支付通道自動(dòng)化管理系統(tǒng)還將面臨新的問題和挑戰(zhàn)??偨Y(jié)實(shí)踐的過程,主要有以下兩點(diǎn):
監(jiān)控系統(tǒng)的完善和優(yōu)化
從監(jiān)控系統(tǒng)從單一的成功率計(jì)算到覆蓋幾乎所有維度,以及后續(xù)的與其他系統(tǒng)聯(lián)動(dòng)實(shí)現(xiàn)支付通道自動(dòng)化管理的功能,對(duì)于維護(hù)和提升系統(tǒng)可用性和穩(wěn)定性起到了非常重要的作用。
渠道路由功能的完善
渠道路由提供了通道切走和回切放量功能,與監(jiān)控系統(tǒng)***的配合,實(shí)現(xiàn)支付通道的自動(dòng)化管理功能。
目前的支付通道自動(dòng)化管理還需要在以下四個(gè)方面進(jìn)行優(yōu)化:
(1) 優(yōu)化監(jiān)控算法,將報(bào)警準(zhǔn)確率95%提升到99%以上;
(2) 故障自動(dòng)通知到銀行或第三方技術(shù)人員,完全釋放故障處理耗費(fèi)的人力;
(3) 實(shí)現(xiàn)銀行和第三方網(wǎng)關(guān)網(wǎng)絡(luò)異常的自動(dòng)化處理;
(4) 渠道路由的回切放量,優(yōu)先***耐受力比較強(qiáng)(統(tǒng)計(jì)維度上客訴少)的用戶進(jìn)行成功率探測,以減少對(duì)業(yè)務(wù)的影響。
【本文為51CTO專欄機(jī)構(gòu)“美團(tuán)點(diǎn)評(píng)技術(shù)團(tuán)隊(duì)”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過微信公眾號(hào)聯(lián)系機(jī)構(gòu)獲取授權(quán)】