http://doc.cocolian.cn/essay/payment/2016/10/24/account-5-iap/
作者:凤凰牌老熊
春节后回来,工作重点转到现有系统的微服务改进上。继续支付系统设计的话题。 在此也特别感谢大家对凤凰牌老熊的公众号的关注和支持,祝大家新的一年工作顺利,万事如意。

接着回到支付系统设计的主题。阅读本文之前,有必要回顾下支付系统设计这篇文章。后续我们将深入到支付系统各个模块的设计,本文首先介绍支付核心模块支付路由的设计。
支付系统设计一文我们可以知道,用户在前端选择一种支付方式,比如使用招行借记卡来支付后,系统不一定就是调用招行的接口来执行支付。支付宝、百付宝等第三方支付平台以及银联等,都支持招行借记卡支付。 这种将支付方式落地到具体的支付接口的模块,就是支付路由。

设计目标

支付路由在支付系统中的核心作用,除了本职工作路由外,还承担如下职责:

  1. 省钱,省钱,省钱,这是支付路由选择支付通道的最主要的规则。 哪个通道省钱,基本会优先考虑这个通道。
  2. 提升支付产品的QOS。这体现在系统的可靠性、稳定性、性能和可用性上。通过屏蔽掉无法连接、不稳定、性能低的通道来提升这些指标。
  3. 支持营销。通过优先选择有优惠活动的通道,可以帮助业务提升付费客户量。
  4. 降低运营成本。一个设计良好的支付路由,可以大大降低运营投入。

    软件架构

    上述流程,在实现上,参考的架构设计如下:
    2.8  支付路由设计 - 图1
    支付路由并不会直接对接前端的支付产品或者后端的支付渠道,它是支付网关的一部分。如果是基于微服务的架构,支付路由作为一个独立的服务,被支付网关所调用。

    计算因子

    路由规则是支付路由的核心。在规则设置上,需要和公司的业务、支付服务的scope来综合考虑。 这里讲述的是通用的规则设计,供具体实现时参考。
    2.8  支付路由设计 - 图2
    产品类型 当然,路由时首选需要考虑渠道可以支持的支付产品。
    费率
    费率是路由最重要的一个指标。一般银行是按照额度来收费,部分是按照交易笔数来收费,复杂点的是阶梯收费,比如10万一个费率档次,100万一个费率档次。
    优惠活动
    银行、第三方支付为了延揽客户,经常也会提供一些补贴给对接的商户,对于使用该渠道的交易进行补贴。而优惠的策略也是多种多样。
    交易限额 不同通道会限制每次交易的金额上限,以及针对每个账户每天的额度限制。超过这个额度,需要变换通道。
    卡类型 通道支持的信用卡或者借记卡。
    通道的QOS 掉单率、网络延迟以及接口能支持的TPS,是路由的一个重要衡量因素。
    资金头寸 电商公司在银行或者第三方平台的资金头寸。如果资金头寸不足,则不能使用这个通道来执行。
    到账时效 对于转账,资金什么时候到目标账户上,也是影响路由选择的一个因素。
    商户类型 不同类型的商户可以选择不同的通道。 比如高性能、费率高的通道,预留给高级商户。

    模块设计

    支付路由从架构上来说,一般是作为支付网关的一部分。采用微服务架构时,路由模块作为一个独立的服务来部署,为支付网关所调用。所涉及的模块如上所示:
    支付通道管理
    提供通道支持的产品类型、费率等信息。
    支付通道QOS监控
    收集通道使用过程中的错误信息,接口延迟,超时情况等信息,用于统计QOS。
    资金头寸管理
    用于监控公司在各个支付通道上的头寸,并提供头寸的信息。
    优惠活动
    银行、第三方支付为了延揽客户,经常也会提供一些补贴给对接的商户,对于使用该渠道的交易进行补贴。而优惠的策略也是多种多样:

  5. 支付策略;针对使用该通道的所有支付进行补贴;仅针对首次使用该通道的用户进行补贴;仅针对绑卡的用户进行补贴。

  6. 补贴时,按照支付金额来设置优惠额度,或者按比例打折。
  7. 一般活动都会设置补贴总额度。该额度用完了就停止补贴。
    当然,活动也都会设置开始和截止时间。

    路由计算

    人工路由
    大部分支付系统在接入渠道不多时,人工路由也是一个不错的选择。运营人员指定支付渠道和产品之间的映射关系。出问题时人工切换即可。这种路由的优势是性能高,路由结果可控,出问题时易于排查问题。当接入通道数量增加,营销活动频繁时,人工路由会是一个巨大的投入。
    基于规则的路由
    这是相对比较简单的自动路由设计。 按照业务要求设置各种路由规则,比如:
    1. if(支付方式==招商借记卡 && 额度<100) then 目标通道==银联token支付
    2. if(支付方式==招商借记卡 && 额度>100) then 目标通道==招商快捷支付
    技术上,规则可以使用drools来描述。
    基于权重的路由
    规则路由的难点各种规则的制定。在路由因子增多的情况下,规则的维护会是一个噩梦。基于权重的路由则可以缓解这个问题。这种计算方式,简单说,就是对各个通道打分,分数最高的就命中。难点在于制定打分的标准以及计算公式。 比如可以从费率、优惠额度、QOS和使用率角度来评分,给优惠额度高一点的比重,这会导致高优惠额度的通道被优先命中。注意每个维度上的计算公式也不是一成不变的,比如使用率和QOS都是动态打分计算。权重的调整是一个挑战,需要在运行过程中不断的调试。必要时,可以使用旁路测试来比较两种算法的优劣。
    路由是支付的核心模块,稳定性是第一要素,其次是性能,最后才是怎么省钱。路由系统的设计,需要和公司业务发展保持一致,并适度超前。简单的if-else实现可以满足大多数场景下的需求。避免在系统建设初期引入过于复杂的路由。

感谢您对本文的关注,如需要及时收到凤凰牌老熊的最新作品,或者有相关问题探讨,请扫码关注“凤凰牌老熊”的微信公众号,在公众号里留言或者回复,可以尽快处理,谢谢。
本文欢迎转载,转载时请注明本文来自 微信公众号“凤凰牌老熊”。