圖解支付系統(tǒng)的渠道路由設(shè)計(jì)
在現(xiàn)代支付系統(tǒng)中,渠道路由扮演著至關(guān)重要的角色,它決定了支付請(qǐng)求在多個(gè)可用渠道中的最佳路徑。本文將深入探討渠道路由的基本概念、核心作用以及設(shè)計(jì)原則,并通過(guò)實(shí)際案例分析,展示如何構(gòu)建一個(gè)既靈活又高效的渠道路由系統(tǒng)。
這篇文章主要講清楚:渠道路由是什么,為什么需要渠道路由,渠道路由的幾種形態(tài),一個(gè)簡(jiǎn)潔而實(shí)用的基于規(guī)則的渠道路由設(shè)計(jì)。
注:有些公司稱渠道為通道,都是一個(gè)意思,為方便起見,本文統(tǒng)稱為渠道。
01 一些背景知識(shí)
有些支付公司沒(méi)有區(qū)分支付方式咨詢、渠道咨詢、渠道路由,而是混在一起做掉,這樣的好處是簡(jiǎn)單而實(shí)用,缺點(diǎn)是擴(kuò)展性不足。下面將以擴(kuò)展性最好的拆分方式來(lái)講解。
下面是三者之間的簡(jiǎn)單關(guān)系圖:
說(shuō)明:
- 支付方式咨詢:根據(jù)用戶的請(qǐng)求,組裝可用支付方式列表返回給用戶。由收銀域提供服務(wù)。
- 渠道咨詢:根據(jù)用戶的請(qǐng)求,組裝可用的渠道列表和渠道屬性返回給收銀域,再由收銀域轉(zhuǎn)換為支付方式返回給用戶。由渠道網(wǎng)關(guān)提供服務(wù)。
- 渠道路由:當(dāng)有多個(gè)渠道可用時(shí),選擇出最優(yōu)的一個(gè)渠道。由渠道網(wǎng)關(guān)提供服務(wù)。
再詳細(xì)一點(diǎn),如下:
- 支付方式咨詢:解決用戶可以使用哪些支付方式,比如余額、招行借記卡、招行信用卡等。比如虛擬商品不能使用信用卡,這種支付方式的管理就是支付方式咨詢的職責(zé)。
- 渠道咨詢:解決是否有渠道可以支持當(dāng)前的支付行為。比如用戶綁定了招行借記卡,但招行當(dāng)前正在維護(hù)無(wú)法提供服務(wù),那就將渠道狀態(tài)設(shè)置為不可用,收銀域?qū)?yīng)的支付方式會(huì)置灰。
- 渠道路由:解決最優(yōu)渠道問(wèn)題。需要綜合支付成功率、支付成本、用戶體驗(yàn)、渠道狀態(tài)等多種因素挑選出最優(yōu)的一條渠道。
02 渠道路由核心作用
渠道路由核心作用是當(dāng)有多個(gè)渠道同時(shí)滿足業(yè)務(wù)訴求時(shí),綜合支付成功率、支付成本、用戶體驗(yàn)、渠道狀態(tài)等多種因素挑選出最優(yōu)的一條渠道。具體如下:
- 提高支付成功率:通過(guò)選擇最合適的渠道,可以提高支付的成功率,減少支付失敗帶來(lái)的用戶流失。原因在于不同的渠道在其內(nèi)部的風(fēng)險(xiǎn)偏好是不一樣的,同一個(gè)請(qǐng)求在A渠道會(huì)失敗,但在B渠道會(huì)成功。
- 優(yōu)化成本:不同渠道的費(fèi)用可能不同,通過(guò)合理的路由,可以降低支付成本。一些渠道還有階梯收費(fèi),需要通過(guò)分流不同的渠道,保持整體成本最優(yōu)。
- 提升用戶體驗(yàn):快速、穩(wěn)定的支付體驗(yàn)?zāi)茉鰪?qiáng)用戶的滿意度和忠誠(chéng)度。用戶如果經(jīng)常在A渠道支付,新的請(qǐng)求過(guò)來(lái)后,仍然發(fā)給A渠道支付的成功率往往會(huì)更高。
- 負(fù)載均衡:將支付請(qǐng)求合理分配到不同的渠道,避免某個(gè)渠道過(guò)載,提升整體系統(tǒng)的穩(wěn)定性。
舉幾個(gè)渠道路由應(yīng)用的小場(chǎng)景:
- 用戶使用招行信用卡支付,支付平臺(tái)同時(shí)對(duì)接了網(wǎng)聯(lián)和銀聯(lián),而網(wǎng)聯(lián)和銀聯(lián)都支持招行信用卡,那么就需要渠道路由挑選一個(gè)渠道。
- 做實(shí)名認(rèn)證,平臺(tái)對(duì)接了多個(gè)實(shí)名認(rèn)證通道,通過(guò)渠道路由挑選一個(gè)認(rèn)證渠道。
由上面可以看到,除了支付路由外,還可能有信息類渠道路由,比如實(shí)名認(rèn)證類。
那退款有沒(méi)有路由?顯示沒(méi)有。在銀聯(lián)做的支付,只能去銀聯(lián)退款。特殊的渠道也沒(méi)有路由,比如用戶選擇使用支付寶支付,因?yàn)橹Ц秾氈荒茉谥Ц秾氉鲋Ц?,所以無(wú)需路由。
03 渠道路由的設(shè)計(jì)原則
渠道路由作為支付系統(tǒng)的核心模塊,需要滿足以下幾個(gè)設(shè)計(jì)原則:
- 靈活性:路由規(guī)則需要支持動(dòng)態(tài)調(diào)整。從業(yè)務(wù)的角度出發(fā),有些場(chǎng)景考慮成本,有些場(chǎng)景考慮成功率,都能方便支持。
- 擴(kuò)展性:設(shè)計(jì)時(shí)要考慮到未來(lái)可能新增的支付渠道,新增的決策因子,這些都不能在代碼中寫死,確保系統(tǒng)易于擴(kuò)展。
- 高可用性:路由系統(tǒng)本身需要具備高可用性,確保在高并發(fā)和故障情況下仍能穩(wěn)定運(yùn)行,哪怕內(nèi)部報(bào)錯(cuò),仍然能返回一條可用的渠道。
- 性能:在保證準(zhǔn)確性的前提下,路由決策需要快速,不能成為支付流程的瓶頸。
04 業(yè)界常見的幾種路由形態(tài)
根據(jù)業(yè)務(wù)的需要,通常有以下幾種路由形態(tài):
- 硬編碼取第一個(gè)。在項(xiàng)目上線初期,為了趕進(jìn)度,同時(shí)渠道也不多,常常在代碼中寫死取第一個(gè),先保證支付主流程能走通。
- 基于規(guī)則的路由。通過(guò)預(yù)定義的規(guī)則提高靈活性和可擴(kuò)展性。
- 智能路由。利用機(jī)器學(xué)習(xí)和大數(shù)據(jù)分析,根據(jù)歷史數(shù)據(jù)和實(shí)時(shí)狀態(tài),智能地選擇最佳渠道。
05 一種典型的基于規(guī)則的渠道路由設(shè)計(jì)
基于規(guī)則的渠道路由是最常見的設(shè)計(jì)。簡(jiǎn)單地說(shuō),就是符合什么條件就執(zhí)行什么樣的分流邏輯。比如:支付平臺(tái)對(duì)接了網(wǎng)聯(lián)和銀聯(lián),招行信用卡全部走網(wǎng)聯(lián),工行信用卡500塊以內(nèi)的走網(wǎng)聯(lián),500塊以上的走銀聯(lián)。
5.1. 核心流程設(shè)計(jì)
說(shuō)明:
- 先進(jìn)行唯一渠道判斷,如果只有一條渠道,直接返回。
- 判斷規(guī)則,如果規(guī)則沒(méi)有命中,那就從可用渠道中隨機(jī)挑選一條。
- 如果命中規(guī)則,再根據(jù)規(guī)則中的分流邏輯進(jìn)行分流。
- 最后返回唯一的一條渠道。
5.2. 分流算法設(shè)計(jì)
如果一個(gè)請(qǐng)求既可以走銀聯(lián),也可以走網(wǎng)聯(lián),還可以走直連,有以下幾種情況:
- 沒(méi)有命中任何一條規(guī)則,隨機(jī)選擇一條渠道。
- 有多條規(guī)則可以命中,選擇優(yōu)先級(jí)最高的。
- 命中的路由規(guī)則里,銀聯(lián)和網(wǎng)聯(lián)分別是40%和40%,直連20%,根據(jù)規(guī)則分流。如果當(dāng)前銀聯(lián)掛了,把銀聯(lián)按比例分配到網(wǎng)聯(lián)和直連。
常見的分流算法是先把各渠道的分流比例換算成0-100區(qū)間的數(shù)字,從大到小排序,再根據(jù)用戶ID取模、請(qǐng)求單號(hào)取?;蛏梢粋€(gè)隨機(jī)數(shù),再看這個(gè)數(shù)落在哪個(gè)區(qū)間,對(duì)應(yīng)的渠道就是命中的渠道。
偽代碼如下:
int random = 用戶ID取模(或請(qǐng)求單號(hào)取模,或生成隨機(jī)數(shù)); for (int i = 0; i < 分流集合.size(); i++) { if (random -= 分流集合[i] <= 0) { return 命中的渠道; } }
5.3. 路由規(guī)則配置模型
說(shuō)明:
1)路由規(guī)則用于規(guī)則引擎運(yùn)算是否命中。核心字段包括:規(guī)則ID、規(guī)則類型、規(guī)則表達(dá)式、優(yōu)先級(jí)。實(shí)際實(shí)現(xiàn)時(shí)可根據(jù)各公司內(nèi)部情況加字段。
- 規(guī)則ID:用于分流配置做關(guān)聯(lián);
- 規(guī)則類型:用于區(qū)分支付、實(shí)名認(rèn)證等。
- 規(guī)則表達(dá)式:用于規(guī)則引擎運(yùn)算;
- 優(yōu)先級(jí):用于排序,如果有多個(gè)規(guī)則都符合,以優(yōu)先級(jí)最高的為準(zhǔn);
2)分流配置用于規(guī)則命中后,如何進(jìn)行分流。核心字段包括:規(guī)則ID、渠道名、分流比例。
- 規(guī)則ID:用于與路由規(guī)則進(jìn)行關(guān)聯(lián)。
- 渠道名:表示要分流去的渠道。
- 分流比例:說(shuō)明有多少流量要分過(guò)去。
3)決策因子定義用于決策的條件。比如卡BIN,卡品牌,金額等。
5.4. 規(guī)則引擎選擇
業(yè)務(wù)的規(guī)則引擎有很多,比如大名鼎鼎的Drools等,也可以選擇自研,各公司可以根據(jù)自己的技術(shù)生態(tài)來(lái)選擇。
我個(gè)人推薦Aviator。推薦理由:簡(jiǎn)單實(shí)用。因?yàn)槁酚梢?guī)則都非常簡(jiǎn)單,沒(méi)有過(guò)于復(fù)雜的運(yùn)算,不需要引入一些很重的規(guī)則引擎。
關(guān)于Aviator的資料,可參考官網(wǎng)介紹。
后面會(huì)有Aviator的規(guī)則示例。
5.5. 決策子選擇
決策因子就是路由規(guī)則匹配的條件,一般有以下幾種:
- 金額:比如小于某個(gè)金額,或大于某個(gè)金額。
- 卡品牌:VISA、MASTER、UPAY等。
- 發(fā)卡行:CMB、ICBC等。
- 卡類型:借記卡、信用卡等。
- 卡BIN:某個(gè)號(hào)段的卡。
- 業(yè)務(wù)場(chǎng)景字段:各公司自定,比如線下場(chǎng)景,線上場(chǎng)景等。
5.6. 路由規(guī)則示例
規(guī)則的編寫和規(guī)則引擎強(qiáng)相關(guān)。下面以Aviator做個(gè)示例。實(shí)際落地時(shí),需要根據(jù)自己選擇的規(guī)則引擎做改造。
假設(shè):支付平臺(tái)對(duì)接了網(wǎng)聯(lián)和銀聯(lián),要求:
1)招行信用卡全部走網(wǎng)聯(lián)。
2)工行信用卡500塊以內(nèi)(不包含)的40%走網(wǎng)聯(lián),60%走銀聯(lián)。
3)工行信用卡500塊以上的走銀聯(lián)。
一些基本的變量定義:
銀行名稱:bankName
支付方式:paymentMethod
卡類型:cardType
金額變量:amount
網(wǎng)聯(lián):NUCC
銀聯(lián):UPAY
招行:CMB
工行:ICBC
定義規(guī)則:
1)規(guī)則1:paymentMethod=’card’ && cardType=’credit’ && bankName=’CMB’
分流:NUCC:100
2)規(guī)則2:paymentMethod=’card’ && cardType=’credit’ && bankName=’ICBC’ and amount < 500.00
分流:NUCC:40,UPAY:60
3)規(guī)則3:paymentMethod=’card’ && cardType=’credit’ && bankName=’ICBC’ and amount >= 500.00
分流:UPAY:100
5.7. 界面配置示例
下面只是示意一個(gè)簡(jiǎn)單的路由配置。如果是多層次的與和或關(guān)系,需要產(chǎn)品經(jīng)理做一些稍微復(fù)雜一點(diǎn)的界面。
說(shuō)明:
- 示例規(guī)則的業(yè)務(wù)訴求:工行信用卡500塊以內(nèi)(不包含)的40%走網(wǎng)聯(lián),60%走銀聯(lián)。
- 后臺(tái)保存的規(guī)則為:“paymentMethod=’card’ && cardType=’credit’ && bankName=’ICBC’ and amount < 500.00”,分流有2兩條,分別是:“NUCC:40”,“UPAY:60”。
- 用于決策因子的元數(shù)據(jù),需要提前定義好,包括這些字段的運(yùn)算規(guī)則(比如開戶行就不能使用大于、等于)。
5.8. 一些調(diào)優(yōu)思路
- 用戶最近支付成功記錄優(yōu)先,提高成功率。比如用戶可以用銀聯(lián),也可以使用網(wǎng)聯(lián),如果5天內(nèi)最近一次使用了銀聯(lián)是成功的,那么為了成功率,可以考慮再次路由到銀聯(lián)去。因?yàn)閺那里L(fēng)控的角度,已經(jīng)成功的前提下,再次成功的可能性更大(余額不足除外)。
- 根據(jù)用戶ID做分流,而不是當(dāng)前訂單號(hào)做分流,或者完全隨機(jī)數(shù)。也就是使用偽隨機(jī)。好處是同一個(gè)用戶更大概率走到同一個(gè)渠道,有利于提高成功率,進(jìn)而提升用戶體驗(yàn)。
- 適當(dāng)使用緩存,以提高運(yùn)算速度。
06 加入自動(dòng)化開關(guān)的渠道路由
外部渠道服務(wù)經(jīng)常不穩(wěn)定,通過(guò)自動(dòng)化開關(guān)模塊監(jiān)聽支付引擎或渠道網(wǎng)關(guān)的支付結(jié)果消息,實(shí)時(shí)計(jì)算渠道的狀態(tài),在渠道出現(xiàn)問(wèn)題后自動(dòng)關(guān)閉,并推送給渠道路由。
說(shuō)明:
- 由自動(dòng)化開關(guān)模塊監(jiān)聽支付引擎的支付結(jié)果消息,每秒計(jì)算一次渠道的狀態(tài),在渠道出現(xiàn)問(wèn)題后,自動(dòng)關(guān)閉,并把結(jié)果推送給渠道路由。
- 渠道關(guān)閉后,再發(fā)起探測(cè)服務(wù),探測(cè)成功后,灰度打開渠道。
下圖是渠道自動(dòng)化渠道開關(guān)的示意圖。有多種技術(shù)手段可以實(shí)現(xiàn),基本原理就是基于滑動(dòng)時(shí)間窗口算法來(lái)做,具體落地可以使用時(shí)序數(shù)據(jù)庫(kù),或者自己通過(guò)redis實(shí)現(xiàn)。
說(shuō)明:
- 初始是完成打開。
- 指定時(shí)間內(nèi)全部失敗或指定時(shí)間內(nèi)成功率低于閥值,關(guān)閉渠道。
- 指定時(shí)間后,發(fā)起查詢,如果查詢渠道失敗,持續(xù)關(guān)閉。
- 如果查詢成功,就灰度打開,如果灰度打開后的成功率不滿足要求,就繼續(xù)關(guān)閉。
- 如果灰度打開后的成功率滿足要求,就持續(xù)加大灰度,直到完成打開。
后面會(huì)單獨(dú)起一篇文章來(lái)講自動(dòng)化渠道開關(guān)的設(shè)計(jì)與實(shí)現(xiàn)。
07 高階的智能路由
一些有實(shí)力的公司,通過(guò)算法和機(jī)器學(xué)習(xí)來(lái)做智能路由。所謂智能路由,就是不僅是根據(jù)路由規(guī)則來(lái)計(jì)算路由,而是根據(jù)當(dāng)前的請(qǐng)求參數(shù)和渠道數(shù)據(jù),綜合成功率、成本、用戶使用習(xí)慣、地域等多因子計(jì)算出最優(yōu)的一條渠道。
這個(gè)方案有幾個(gè)難題不好解決。
首先是公司實(shí)力足夠強(qiáng)。有人才來(lái)做算法,且這些算法同學(xué)需要懂一點(diǎn)業(yè)務(wù);
其次是經(jīng)驗(yàn)不好總結(jié)。比如成功率提升了2%,是因?yàn)槭裁丛蛱嵘耍坑幸恍┎豢山忉屝浴?/p>
最后業(yè)務(wù)無(wú)法直接操作調(diào)優(yōu)。比如有些場(chǎng)景下業(yè)務(wù)希望保成功率,有些場(chǎng)景下業(yè)務(wù)希望保較低的成本,智能路由如何調(diào)參?
我個(gè)人更傾向于【規(guī)則路由 + 離線數(shù)據(jù)分析】的組合。其中離線數(shù)據(jù)分析平臺(tái)可以引入一些算法來(lái)分析各因子對(duì)成功率的影響,供業(yè)務(wù)人員決策,并調(diào)整路由規(guī)則。
說(shuō)明:
- 通過(guò)分析數(shù)據(jù),找到影響成功率成本的因子。
- 更新路由規(guī)則。
- 重復(fù)第1步。
8. 結(jié)束語(yǔ)
渠道路由在現(xiàn)代支付系統(tǒng)中扮演著至關(guān)重要的角色,一個(gè)高效、靈活的渠道路由設(shè)計(jì)能夠顯著提升支付成功率,優(yōu)化成本,并改善用戶體驗(yàn)。通過(guò)本文的介紹,希望能為大家在實(shí)際項(xiàng)目中設(shè)計(jì)和實(shí)現(xiàn)渠道路由提供一些有益的參考。
作者:隱墨星辰,公眾號(hào):隱墨星辰
本文由 @隱墨星辰 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載
題圖來(lái)自Unsplash,基于CC0協(xié)議
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)
支付系統(tǒng)設(shè)計(jì)好復(fù)雜啊,渠道路由這塊尤其燒腦,但真的很酷炫!??????