zoukankan      html  css  js  c++  java
  • 金融业务架构经验总结

    金融业务架构经验之谈:

    • 支付
    • 资金账户系统

    业务场景经验之谈:

    • 对账模型
    • 支付
    • 交易
    • 退款(取消交易)
    • 掉单
    • 补录
    • 改单

    等等

    设计架构

    首先,有个概念:

    • 金融数据不能删除
    • 金融数据更新要保留原记录
    • log基于法律考虑要保留3年+

    架构图参考:

    点融逻辑架构:
    点融逻辑架构
    这张是非常常见、典型的逻辑架构:

    • 多个LB 分发到多个http server -- 前面的router看出,这个应该是keepalived的方案。
    • 再往后区分静态内容和session ,这些内容由NoSQL(mongodb or redis 之类)存储,静态内容前有缓存(varnish 之类)。
    • 有多个nodejs cluster 进行业务服务分发。
    • 还有非常重要的是背后的backup。备份机制需要多种(最好同时有)备份机制:
      • slave实时备份
      • 延时备份(防止实时污染)
      • 远程实时备份
      • x天内每小时备份(防止数据丢失快速恢复)
      • x天内每天备份

    点融component架构:
    component架构
    这张非常设计具体业务了,但金融部分仍非常值得参考,如一些component:

    • 支付服务
    • 审计服务
    • 风险管理服务
    • 权限管理服务
    • 备份服务

    对账户模型

    对账,也可以成为清算。一般为了保证系统的数据的准确性,尤其是金额数据。
    金额的走向如下:
    用户银行账户--支付--》银行(第三方支付平台)--通知--》内部系统。
    所以银行会有流水,我们根据内部系统的支付记录与银行(第三方支付平台)的后台支付记录按流水进行一一核对。
    另外,内部系统产生出的流水(transaction),我们通常有后续的步骤,譬如产生现金流cashflow。现金流同样要与内部的流水进行一一核对。
    正常运作的时候,应该是有每日清算(不一定是EOD--end of day),保证用户的资产的正确性。有的公司会有更严格的清算处理:每个几个小时进行清算。

    冲正

    退款(取消交易)

    由于某些特殊情况,如用户基于不知情、或账户安全原因(被盗卡),不承认某笔交易是正常交易。--那么就需要系统取消某一笔交易。取消交易时,资金一般可以按资金来路原路返回。
    系统因此需要提供取消交易的功能,但不能简单的删除订单,要留下证据,一般可以更新为取消状态。(同时要保留操作记录
    注意内部的逻辑关系,一笔已经达成的交易被取消,对应需要emit 一些event进行统计关联的计算数据。--有时类似牵一发动全身的感觉。

    掉单

    所谓掉单:用户A在第三方(银行/支付公司)支付了,然后在自身系统没有得到更新到用户的资产。
    可能原因:第三方一般会一次同步回调或者多次异步回调不成功导致。要么网络有延时或者丢包导致第三方与自身系统网络通讯不成功,要么通知到了,但没处理好,或者没及时处理。
    解决方案:

    • 找出未及时处理的原因,fix 之
    • 自身支付服务,接受到回调后,更多次的给自身系统提供多次异步回调。--降低错过的概率,对于部分第三方支付异步回调次数偏少,异步回调时间间隔偏短的问题
    • 搭建自己的DNS服务或者 DDNS ,并部署多机房。
    • 自身主动想第三方查询支付结果,询问支付创建但未完成的支付流水。

    改单

    改单,一个典型情况是,金额或者状态错了,需要进行对交易流水进行更新。但不能直接更新数据库,而应系统提供功能出来,以防直接改动数据,没触发其他关联数据的更新。这一点与退款类似。

    复式记账法

    该系统之所以称为复式簿记,是因为每笔交易都至少记录在两个不同的账户当中。每笔交易的结果至少被记录在一个借方和一个贷方的账户,且该笔交易的借贷双方总额相等。该方法发生的每一笔经济业务都要以相等的金额,同时在两个或两个以上相互联系的账户中进行登记。
    类似于能量守恒定律,把来龙去脉都记下来.
    img

    系统设计:

    账户子系统存储要素应该包含2类表:
    一个是账户表(账户余额/状态表)account,主要记录账户基本信息:ID,名称,类目,可用余额,冻结余额等;
    另一个是账户流水表(又叫流水明细表)cashflow,记录这些账户所有相关变化的流水记录。

    日结表:EOD 日结,应与账户体系隔离,属于清算日结,不要影响主业务。日结做了后,数据不会因为对以往进行修改(也不应该这样处理)而产生偏差。

    账户与复式记账
    结算相关复式记账的会计科目该如何设计

    权责发生制

    ref

    参考:

    连连支付文档
    PayPalm支付文档
    支付宝文档
    支付宝架构
    点融网架构

  • 相关阅读:
    列表的常用的方法(内建函数)
    关于集合
    scribe、chukwa、kafka、flume日志系统对比
    iptables,lokkit,ebtables,arptables---logrotate
    MTA---smtp(25,postfix,sendmail),Pop3(110,Devocot), MUA(foxmail) IMAP(server,client rsync)
    DNS named. bind linux (ACL/View)---dnsmasq-with docker,hosts in docker.
    javascript closure
    Typed Arrays in javascripts
    OpenPGP协议的一个JavaScript实现:OpenPGP.js
    公有云安全工具
  • 原文地址:https://www.cnblogs.com/no7dw/p/13628873.html
Copyright © 2011-2022 走看看