note 41:账务系统开发规范

目录

系统设计

防重控制

流量控制

并发控制

异常处理

备份机制

系统开发​​​​​​​

前端队列操作

外系统交互

​​​​​​​​​​​​​​

系统设计

防重控制

对于进入到系统中的数据(文件导入、手工录入、系统直连等)以及本系统发往外系统的数据都需要进行防重控制处理,主要是采用数据库表的主键或者唯一索引机制来进行防重。

防重表的主键应该选取能够唯一标识该笔交易的字段,例如对于文件导入的数据,可以先计算文件内容的MD5,然后将MD5的值作为防重主键。

防重表的数据也需要备份,仅保留一段时期(参数化设置)的数据,其余的可以备份到历史表。

对于实时联机交易,引入幂等流水做好控制

流量控制

为了避免系统被前端流量压垮,以及系统自身的流量把后端系统压垮,因此需要在数据接收和数据发送时引入流量控制机制。

具体实现可以考虑令牌桶、漏桶、计数器等算法,对于微服务架构的项目直接使用熔断器即可。

并发控制

并发控制是为了应对同一条记录被多人同时操作的情况,常见于前端界面队列操作以及后端定时任务,并发控制常用的方式也是数据库表,利用表的主键来防止并发。

异常处理

目前主要是自动流程、外系统交互、定时任务等场景异常情况比较常见,对应的处理机制基本如下:

需要分析出可能的异常点,每一种异常可以先尝试系统自动重试,重试一定次数(参数化设置)仍然不成功的,需要提醒(短信或其他方式)到相应的处理人员,另外还需要展示在前端异常队列,处理人员可以在该队列触发重试或者其他操作(视具体业务而定)。

备份机制

数据库的数据、日志文件、交易文件都需要考虑备份,数据库一般是建立历史表,采用分区的方式,当前表保留一段时间后转到历史表;日志文件和交易文件一般是保留一段时间(参数化设置)后删除。

​​​​​​​​​​​​​​系统开发​​​​​​​

前端队列操作

1、前端按钮点击过后要禁用,防止用户连续点击,造成重复发送请求到后台

2、前端请求发送到后台后,后端逻辑需要先判断该笔交易的状态是否已经发生改变,如果已经改变的话直接返回提示前端;没有改变的话,先加并发控制锁,加锁成功后然后再次判断该笔交易的状态是否已经发生改变,没有改变则进行后续业务逻辑,最后在finally中释放并发控制锁

外系统交互

  1. 需要跟对接系统确定好通讯的字符集编码
  2. 如果通讯数据中包含金额栏位,需要确定好传输过程中金额是否包含小数点,需要处理好精度问题
  3. 在发请求给外系统之前,需要先关闭数据库连接,通讯完成后,再重新开启数据库连接
  1. 需要设置连接超时以及读超时参数,对于串行连接的多个后端系统,则需要遵循越后端的系统超时时间越小
  2. 数据接入和数据转出都需要有防重控制
  3. 发送请求给后端系统时,需要先更新发报流水的状态为发送中,对于长期处于发送中状态的流水需要进行异常预警,技术人员视具体情况进行手工干预处理或者提供前端界面供业务人员处理
  4. 发送请求给后端系统时,需要考虑几种异常情况:组包异常、连接超时、读超时、解包异常、交易重复、交易未明(不一定有),并针对每一种异常都有对应的处理机制,每一种异常都需要预警
相关推荐
码农多耕地呗8 分钟前
Java.函数-acwing
java·开发语言
V+zmm1013414 分钟前
基于微信小程序投票评选系统的设计与实现ssm+论文源码调试讲解
java·数据库·微信小程序·小程序·毕业设计·ssm
lennon_jlu30 分钟前
1.4 java反射机制 简单的java反射机制实践
java·开发语言·python
luoluoal32 分钟前
java项目之社区医院信息平台源码(springboot+mysql)
java·开发语言
对,就是哥44 分钟前
ABAP弹出对对话框错误信息设计
java·数据库·算法
傻啦嘿哟1 小时前
Python多线程与类方法的交互:锁提升安全性的奥秘
java·开发语言
已是上好佳1 小时前
java实验4 反射机制
java·开发语言
小园子的小菜1 小时前
Rockect基于Dledger的Broker主从同步原理
java·开发语言
鹿屿二向箔1 小时前
【论文+源码】创建一个基于Spring Boot的体育场管理系统
java·spring boot·后端
漫无目的行走的月亮1 小时前
Spring boot实现图片上传和下载
java·spring boot