在现代支付系统中,渠道路由扮演着至关重要的角色,它决定了支付请求在多个可用渠道中的最佳路径。本文将深入探讨渠道路由的基本概念、核心作用以及设计原则,并通过实际案例分析,展示如何构建一个既灵活又高效的渠道路由系统。
这篇文章主要讲清楚:渠道路由是什么,为什么需要渠道路由,渠道路由的几种形态,一个简洁而实用的基于规则的渠道路由设计。
注:有些公司称渠道为通道,都是一个意思,为方便起见,本文统称为渠道。
01 一些背景知识
有些支付公司没有区分支付方式咨询、渠道咨询、渠道路由,而是混在一起做掉,这样的好处是简单而实用,缺点是扩展性不足。下面将以扩展性最好的拆分方式来讲解。
下面是三者之间的简单关系图:
说明:
再详细一点,如下:
渠道路由核心作用是当有多个渠道同时满足业务诉求时,综合支付成功率、支付成本、用户体验、渠道状态等多种因素挑选出最优的一条渠道。具体如下:
举几个渠道路由应用的小场景:
由上面可以看到,除了支付路由外,还可能有信息类渠道路由,比如实名认证类。
那退款有没有路由?显示没有。在银联做的支付,只能去银联退款。特殊的渠道也没有路由,比如用户选择使用支付宝支付,因为支付宝只能在支付宝做支付,所以无需路由。
03 渠道路由的设计原则
渠道路由作为支付系统的核心模块,需要满足以下几个设计原则:
根据业务的需要,通常有以下几种路由形态:
基于规则的渠道路由是最常见的设计。简单地说,就是符合什么条件就执行什么样的分流逻辑。比如:支付平台对接了网联和银联,招行信用卡全部走网联,工行信用卡500块以内的走网联,500块以上的走银联。
5.1. 核心流程设计
说明:
如果一个请求既可以走银联,也可以走网联,还可以走直连,有以下几种情况:
常见的分流算法是先把各渠道的分流比例换算成0-100区间的数字,从大到小排序,再根据用户ID取模、请求单号取模或生成一个随机数,再看这个数落在哪个区间,对应的渠道就是命中的渠道。
伪代码如下:
int random = 用户ID取模(或请求单号取模,或生成随机数); for (int i = 0; i < 分流集合.size; i++) { if (random -= 分流集合[i] <= 0) { return 命中的渠道; } } 5.3. 路由规则配置模型
说明:
1)路由规则用于规则引擎运算是否命中。核心字段包括:规则ID、规则类型、规则表达式、优先级。实际实现时可根据各公司内部情况加字段。
2)分流配置用于规则命中后,如何进行分流。核心字段包括:规则ID、渠道名、分流比例。
3)决策因子定义用于决策的条件。比如卡BIN,卡品牌,金额等。
5.4. 规则引擎选择
业务的规则引擎有很多,比如大名鼎鼎的Drools等,也可以选择自研,各公司可以根据自己的技术生态来选择。
我个人推荐Aviator。推荐理由:简单实用。因为路由规则都非常简单,没有过于复杂的运算,不需要引入一些很重的规则引擎。
关于Aviator的资料,可参考官网介绍。
后面会有Aviator的规则示例。
5.5. 决策子选择
决策因子就是路由规则匹配的条件,一般有以下几种:
规则的编写和规则引擎强相关。下面以Aviator做个示例。实际落地时,需要根据自己选择的规则引擎做改造。
假设:支付平台对接了网联和银联,要求:
1)招行信用卡全部走网联。
2)工行信用卡500块以内(不包含)的40%走网联,60%走银联。
3)工行信用卡500块以上的走银联。
一些基本的变量定义:
银行名称:bankName
支付方式:paymentMethod
卡类型:cardType
金额变量:amount
网联:NUCC
银联:UPAY
招行:CMB
工行:ICBC
定义规则:
1)规则1:paymentMethod=’card’ && cardType=’credit’ && bankName=’CMB’
分流:NUCC:100
2)规则2:paymentMethod=’card’ && cardType=’credit’ && bankName=’ICBC’ and amount < 500.00
分流:NUCC:40,UPAY:60
3)规则3:paymentMethod=’card’ && cardType=’credit’ && bankName=’ICBC’ and amount >= 500.00
分流:UPAY:100
5.7. 界面配置示例
下面只是示意一个简单的路由配置。如果是多层次的与和或关系,需要产品经理做一些稍微复杂一点的界面。
说明:
外部渠道服务经常不稳定,通过自动化开关模块监听支付引擎或渠道网关的支付结果消息,实时计算渠道的状态,在渠道出现问题后自动关闭,并推送给渠道路由。
说明:
下图是渠道自动化渠道开关的示意图。有多种技术手段可以实现,基本原理就是基于滑动时间窗口算法来做,具体落地可以使用时序数据库,或者自己通过redis实现。
说明:
后面会单独起一篇文章来讲自动化渠道开关的设计与实现。
07 高阶的智能路由
一些有实力的公司,通过算法和机器学习来做智能路由。所谓智能路由,就是不仅是根据路由规则来计算路由,而是根据当前的请求参数和渠道数据,综合成功率、成本、用户使用习惯、地域等多因子计算出最优的一条渠道。
这个方案有几个难题不好解决。
首先是公司实力足够强。有人才来做算法,且这些算法同学需要懂一点业务;
其次是经验不好总结。比如成功率提升了2%,是因为什么原因提升了?有一些不可解释性。
最后业务无法直接操作调优。比如有些场景下业务希望保成功率,有些场景下业务希望保较低的成本,智能路由如何调参?
我个人更倾向于【规则路由 + 离线数据分析】的组合。其中离线数据分析平台可以引入一些算法来分析各因子对成功率的影响,供业务人员决策,并调整路由规则。
说明:
渠道路由在现代支付系统中扮演着至关重要的角色,一个高效、灵活的渠道路由设计能够显著提升支付成功率,优化成本,并改善用户体验。通过本文的介绍,希望能为大家在实际项目中设计和实现渠道路由提供一些有益的参考。