资金账户系统的设计

架构互联高可用 2024-08-21 12:54:32
资金账户是互联网和金融业务中非常常见的系统,尤其是在电商、支付等业务中必不可少。资金账户系统本身其核心模块的整体架构往往并不复杂,但其对于资金安全和可用性的要求非常高,导致建设好一个资金账户系统并不容易。本文以笔者在实际工作中实现的资金账户系统为例,探讨了在资金账户系统设计和实现中会遇到的问题以及相应的解决方案。需要强调的是,笔者也是资金相关系统的入门者,本文目的是抛砖引玉,有误之处,还请大家多多指正、多多探讨、不吝指教,笔者不胜感激。01什么是账户我们先看看标准定义:账户是根据会计科目设置的,具有一定格式和结构,用于反映会计要素的增减变动情况及其结果的载体。从业务视角来看账户其实就是用于记录某个主体的某类型资金的余额以及余额变动明细的数据载体。如果从支付这块业务来看的话,账户是支付机构内部为其服务对象(用户、商户、银行等)创建的物理记录,这些记录包含了对象的关键信息,如机构为对象分配的唯一 ID、对象的余额、交易的流水、账户状态等等。 可以说账户是支付机构识别服务对象的根本,所有服务对象都必须要有账户。综上所述,账户有3个关键的点:账户余额:账户中的资金数目,这个账户有多少钱;账户流水:这个账户资金进进出出的明细记录,任何余额的变动都需要记录流水;交易凭证:用来记录交易过程的信息。三者主要内容包括: 1.1 余额账户余额记录用户的资金数目,当发生交易时,会对余额进行更新操作。一般余额信息包括以下字段:账户 ID,这个 ID 有的平台会有编码规则,比如某些位用来区分个人或者商户,区分币种以及校验位等。币种。余额,一般使用币种最小单位。账户状态,比如是正常态、支付或者冻结等。余额版本号,这个字段非常重要,体现了余额的变化过程,是与流水进行关联的关键。 1.2 流水账户体系的目的是记账,仿佛只记录余额,对余额进行增删改查就可以了。但是这样做有两个弊端:1.没有办法体现出余额变化的过程。2.账户余额被篡改了没有办法追查。所以在记录余额的同时,还需要记录每一笔变化的过程,也就是账户的流水。当余额发生变更时,需要同步记录流水,以此来跟踪余额的变化,流水信息一般包括如下内容:流水 ID。凭证 ID,一般是业务单号(如订单 ID、退款单 ID 等),也就是下面凭证中的 ID。发生金额。发生币种。起始余额。终止余额。余额版本号,与余额信息中的版本号字段对应。资金方向,标识是入账还是出账。源账户 ID。目的账户 ID。交易时间戳。总体来看,流水和余额互为冗余数据,流水不仅可以有效地减少由于内部错误导致的账户余额错误的问题,也便于账户系统与其他外部系统进行对账,所以账户系统记录流水是非常必要的。在设计账户流水时,有几个重要的原则必须遵守:流水记录只能新增,一旦记录成功不允许修改和删除。即使是由于正当原因需要取消一笔已经完成的交易,也不应该去删除交易流水。正确的做法是再记录一笔“取消交易”的流水。流水中的余额版本号必须是连续递增的,我们需要用余额版本号来确定交易的先后顺序(注意:不是通过交易时间戳)。 1.3 凭证凭证用来记录交易过程中的信息,是用户交易的依据。凭证对应到支付平台内部的各种单类,比如充值单、提现单、交易单等等。一般包括:凭证 ID、交易参与方、交易金额、交易类型、交易状态(比如支付中,支付成功,转退款等)、交易渠道等信息。凭证单理论上可以放到业务层,不放在账户核心层,这样账户层就只有余额和流水。抓住了余额、流水这两个点我们基本就抓住了资金账户系统设计的核心了。02什么是资金账户系统资金账户系统,简单的类比就是一个存折账本,即用户的每一笔资金变动全部在账本上反映出来。对于银行给我们开立的账户,称为银行账户;支付公司给我们开立的账户称为支付账户;电商平台给用户开立的账户称为电商虚拟账户;由于它不像银行一样真实地记录资金变动情况,只是将账记好而已,所以它是虚拟的而不是实体账户。常见场景:微信的零钱账户、支付公司的商家账户、电商平台的推广佣金账户、余额账户等均属于虚拟账户。第三方支付作为中立的第三方,截断了用户和商户的资金流,资金先从用户账户转移到第三方支付平台账户,得到双方确认后再从支付平台账户转移到商户账户。支付平台为客户提供了资金流转以及结算等服务,必须建立自己独立的资金账户系统,以此来保证每个客户资金的准确性以及资金变动的可追溯性,这套资金账户系统在支付平台中成为“核心”,整体类似于银行的账户核心,但会比银行账户核心简单一些。 2.1 资金账户系统的目的账户的核心目的,就是将账记清楚,不能出现错记、漏记。同时在实际业务中,账户体系也可以解决特殊情况的业务,因为并不是所有的业务变动都会在业务中记录,但是却需要在账户系统中体现。 2.2 资金账户系统的构成一个账户体系一般分为账户结构和账务结构两部分;账户结构用于记录一个账户基本信息、类型、当前余额等;而账务结构则是用于记录每个业务对应的余额变动情况。这里好理解,说白了就是第一节中说的余额和流水在系统中各自对应的实体。03实现一个支付资金账户系统 3.1 重要原则由于资金账户系统本身属于会计范畴,故一定是需要遵守一系列的会计准则的。比如:内部账户记账的一条原则:有出必有入,出入必相等。所有的记账操作都必须遵循这一条原则,这是为了确保交易安全,避免凭空加钱和减钱行为的出现。同时,该原则也是各种核对(核心事务核对、备付金核对等)系统的依据之一。账户记账的理论基础基本都是基于借贷记账法的,
0 阅读:1

架构互联高可用

简介:感谢大家的关注