note 41:账务系统开发规范
目录
系统设计
防重控制
流量控制
并发控制
异常处理
备份机制
系统开发
前端队列操作
外系统交互
系统设计
防重控制
对于进入到系统中的数据(文件导入、手工录入、系统直连等)以及本系统发往外系统的数据都需要进行防重控制处理,主要是采用数据库表的主键或者唯一索引机制来进行防重。
防重表的主键应该选取能够唯一标识该笔交易的字段,例如对于文件导入的数据,可以先计算文件内容的MD5,然后将MD5的值作为防重主键。
防重表的数据也需要备份,仅保留一段时期(参数化设置)的数据,其余的可以备份到历史表。
对于实时联机交易,引入幂等流水做好控制
流量控制
为了避免系统被前端流量压垮,以及系统自身的流量把后端系统压垮,因此需要在数据接收和数据发送时引入流量控制机制。
具体实现可以考虑令牌桶、漏桶、计数器等算法,对于微服务架构的项目直接使用熔断器即可。
并发控制
并发控制是为了应对同一条记录被多人同时操作的情况,常见于前端界面队列操作以及后端定时任务,并发控制常用的方式也是数据库表,利用表的主键来防止并发。
异常处理
目前主要是自动流程、外系统交互、定时任务等场景异常情况比较常见,对应的处理机制基本如下:
需要分析出可能的异常点,每一种异常可以先尝试系统自动重试,重试一定次数(参数化设置)仍然不成功的,需要提醒(短信或其他方式)到相应的处理人员,另外还需要展示在前端异常队列,处理人员可以在该队列触发重试或者其他操作(视具体业务而定)。
备份机制
数据库的数据、日志文件、交易文件都需要考虑备份,数据库一般是建立历史表,采用分区的方式,当前表保留一段时间后转到历史表;日志文件和交易文件一般是保留一段时间(参数化设置)后删除。
系统开发
前端队列操作
1、前端按钮点击过后要禁用,防止用户连续点击,造成重复发送请求到后台
2、前端请求发送到后台后,后端逻辑需要先判断该笔交易的状态是否已经发生改变,如果已经改变的话直接返回提示前端;没有改变的话,先加并发控制锁,加锁成功后然后再次判断该笔交易的状态是否已经发生改变,没有改变则进行后续业务逻辑,最后在finally中释放并发控制锁
外系统交互
- 需要跟对接系统确定好通讯的字符集编码
- 如果通讯数据中包含金额栏位,需要确定好传输过程中金额是否包含小数点,需要处理好精度问题
- 在发请求给外系统之前,需要先关闭数据库连接,通讯完成后,再重新开启数据库连接
- 需要设置连接超时以及读超时参数,对于串行连接的多个后端系统,则需要遵循越后端的系统超时时间越小
- 数据接入和数据转出都需要有防重控制
- 发送请求给后端系统时,需要先更新发报流水的状态为发送中,对于长期处于发送中状态的流水需要进行异常预警,技术人员视具体情况进行手工干预处理或者提供前端界面供业务人员处理
- 发送请求给后端系统时,需要考虑几种异常情况:组包异常、连接超时、读超时、解包异常、交易重复、交易未明(不一定有),并针对每一种异常都有对应的处理机制,每一种异常都需要预警