本文为联合撰文,作者团队负责携程集团支付账务系统、消费金融账务系统、清结算和对账等工作的的开发、设计和运维工作。
01
前言
原先携程内部的各账务系统都是随着自身的业务发展而建立起来的,其中有些共同的东西,但也存在着不少差异。但其对底层业务的抽象是统一的,都可以抽象为:账户开立、记账、稽核。为了系统开发、运维的简便性,也为了更好的为前台业务提供支持,我们计划实施账务中台系统,从而做到账务系统的:
1)敏捷:快速的适应业务需求的变化,满足外部快速变化的需求,实现业务的敏捷。2)解耦:建立功能独立的系统,避免因为一个功能的修改而影响很多方面,降低功能的耦合度。3)复用:对一些公共组件的复用,提高开发效率,避免重复建设,使得数据和流程都可以得到管控。
02
账务中台之路-基础篇
1、系统概述
1)背景
账务系统从2014年开始一期建设,先后经历了两次大的技术架构升级。
一期:
账务组刚成立的时候,携程的JAVA技术栈尚未完善。
技术上我们是首批试点使用JAVA的小组,使用的分布式RPC框架是Zeroc ICE,它可以支持多语言,通过slice文件生成代码,性能也比较好,所以当初选型用了这个。消息队列用的RABBITMQ,缓存用的REDIS。这些集群都是自运维的。
业务上,一期的业务只支持单用户单账户的模式,交易支持充值、支付、退款、预授权类(预授权冻结,预授权撤销,预授权完成,预授权完成撤销)、提现、转账,接口都是基于业务接口独自开发的。
系统业务架构图如下:
二期:
随着携程JAVA技术栈的完善,二期主要针对JAVA技术栈进行了升级,放弃了自运维的集群,使用了携程JAVA体系,包括SOA,qconfig,qmq,qshecdule等技术。业务上增加了会计系统和日终的实现。
系统业务架构图如下:
原有的账务核心系统存在以下问题:
1)抽象不足:对业务规则抽象不够,如果新增业务需要编码实现2)隔离不够:系统不同业务的系统流量、数据没有隔离,存在某一业务有问题,影响全局的风险3)降级策略:不支持4)扩容困难
基于以上问题,我们设计并实现了新的统一账务平台。
2)目标
针对旧系统的不足,我们确定统一账务平台的目标:
1)抽象2)隔离3)易扩容4)配置化5)支持多机构多币种
2、系统架构与简介
统一账务系统旨在建立一套立足于携程集团之下的高可用,易扩展,业务可定制的账务系统。系统包括场景码系统,账务前置系统,账务核心系统,账户管理系统,会计系统,异步系统,job系统,日志系统。各个系统之间通过dubbo进行服务拆分解耦。
系统业务架构图如下:
- 前置系统:账务的业务处理系统,主要负责对上游业务系统的对接,完整账户的拆分等工作。
- 账务核心系统(原子系统):主要负责账户记账,记录对商户、用户、内部户等客户账的动账及明细。
- 管理系统:对外提供商户、用户、内部户的管理服务,包括创建、查询、状态冻结、状态解冻等服务。
- 会计系统:采用复式记账法根据分录规则对发生的交易进行记录,来表示资金的流转。
- 基础服务系统:对外提供科目、分录、交易码等基础配置的查询服务。
- 日终系统:对记账原子和会计系统数据进行稽核,完成数据校验工作。