note 41:账务系统开发规范

目录

系统设计

防重控制

流量控制

并发控制

异常处理

备份机制

系统开发​​​​​​​

前端队列操作

外系统交互
​​​​​​​​​​​​​​

系统设计

防重控制

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

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

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

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

流量控制

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

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

并发控制

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

异常处理

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

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

备份机制

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

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

前端队列操作

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

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

外系统交互

  1. 需要跟对接系统确定好通讯的字符集编码
  2. 如果通讯数据中包含金额栏位,需要确定好传输过程中金额是否包含小数点,需要处理好精度问题
  3. 在发请求给外系统之前,需要先关闭数据库连接,通讯完成后,再重新开启数据库连接
  1. 需要设置连接超时以及读超时参数,对于串行连接的多个后端系统,则需要遵循越后端的系统超时时间越小
  2. 数据接入和数据转出都需要有防重控制
  3. 发送请求给后端系统时,需要先更新发报流水的状态为发送中,对于长期处于发送中状态的流水需要进行异常预警,技术人员视具体情况进行手工干预处理或者提供前端界面供业务人员处理
  4. 发送请求给后端系统时,需要考虑几种异常情况:组包异常、连接超时、读超时、解包异常、交易重复、交易未明(不一定有),并针对每一种异常都有对应的处理机制,每一种异常都需要预警

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/64401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Circular Spanning Tree(树的性质)

Circular Spanning Tree 本道题目加深理解树的性质: 思路: 首先考虑什么情况是NO,那么不难想当字符串全是0的时候一定是不行的,因为这样就构成环了,还有一种情况是1的个数为奇数的时候是不行的,一棵树中为…

linux安装nginxs报错:openssl not found

系统: linux 版本:centOS7 nginx版本:nginx-1.20.2 linux安装nginx时 执行下面命令时报错: ./configure --with-http_stub_status_module --with-http_ssl_module --prefix/usr/local/nginxchecking for OpenSSL library ... not …

【论文笔记】Contrastive Learning for Sign Language Recognition and Translation

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Contrastive Learning for…

docker redis安装

一.镜像拉取 docker pull redis:5.0新建文件 touch /home/redis/redis.conf touch /home/redis/redis_6379.pid # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 #bind 127.0.0.1protected-mode noport 6379tcp-backlog 511requirepass roottimeout 0tcp-keepali…

【CSS in Depth 2 精译_096】16.4:CSS 中的三维变换 + 16.5:本章小结

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第五部分 添加动效 ✔️【第 16 章 变换】 ✔️ 16.1 旋转、平移、缩放与倾斜 16.1.1 变换原点的更改16.1.2 多重变换的设置16.1.3 单个变换属性的设置 16.2 变换在动效中的应用 16.2.1 放大图标&am…

小程序租赁系统开发的优势与实践探索

内容概要 小程序租赁系统开发正在引起广泛关注,特别是在数字化快速发展的今天。很多企业开始意识到,小程序不仅能为他们带来更多的客户,还能极大地提高管理效率。借助小程序,用户在租赁时可以更加方便地浏览和选择产品&#xff0…

机器人C++开源库The Robotics Library (RL)使用手册(二)

由于RL库采用跨平台CMake源码,可以轻松在win、ubantu等平台部署、编译,win通常用VS编译器,为了便于使用、阅读,需要将CMake编译成VS工程。 1、准备三个工具:CMake、VS、QT 为了在Windows上编译RL和依赖项,您需要安装一个编译器(例如。,Visual Studio 2017)和跨平台构…

如何在LabVIEW中更好地使用ActiveX控件?

在LabVIEW中,ActiveX控件可以帮助实现与其他应用程序或第三方组件的集成(例如Microsoft Excel、Word、Internet Explorer等)。以下是一些建议,帮助您更好地在LabVIEW中使用ActiveX控件: ​ 1. 理解ActiveX控件的基本原…

如何使用Python从SACS结构数据文件中提取节点数据信息并导出到EXCEL

在现代工程设计中,结构分析和数据处理是不可或缺的一部分。特别是在海洋工程、桥梁建设等领域,SACS文件被广泛应用。这种文件格式包含了结构模型的各种重要信息,包括节点(JOINT)、构件(ELEMENT)…

如何判断一个学术论文是否具有真正的科研价值?ChatGPT如何提供帮助?

目录 1.创新性与学术贡献的超级加分✔ 2.科研过程中的各个环节—从0到1✔ 3.创新性与理论深度的完美结合✔ 4.论证与写作的清晰性✔ 5.数据整理和文献回顾——效率与精准并存✔ 6.创新性要求辅助✔ 总结 宝子们,学术论文写作的旅程是不是感觉像是走进了迷雾森…

学习threejs,THREE.CircleGeometry 二维平面圆形几何体

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.CircleGeometry 圆形…

【微服务】SpringBoot 自定义消息转换器使用详解

目录 一、前言 二、SpringBoot 内容协商介绍 2.1 什么是内容协商 2.2 内容协商机制深入理解 2.2.1 内容协商产生的场景 2.3 内容协商实现的常用方式 2.3.1 前置准备 2.3.2 通过HTTP请求头 2.3.2.1 操作示例 2.3.3 通过请求参数 三、SpringBoot 消息转换器介绍 3.1 H…

深入理解Composer自动加载机制

Composer是PHP生态系统中最常用的依赖管理工具之一,它不仅能够帮助开发者管理项目的依赖关系,还能够自动加载这些依赖项。自动加载机制是Composer的核心功能之一,通过自动加载,开发者可以在运行时按需加载所需的类和文件&#xff…

【游戏设计原理】35 - 委员会设计

一、 分析并总结 核心内容 定义:委员会设计(Design by Committee)是指游戏开发团队通过集体协作完成设计,这种模式结合了多样化的创意和个体专长,但也可能因缺乏一致性而导致设计的混乱。优势:多样性带来…

【Java】IO流练习

IO流练习 题干: 根据指定要求,完成电话记录、 注册、登录 注册 题干: 完成【注册】功能: 要求: 用户输入用户名、密码存入users.txt文件中 若users.txt文件不存在,创建该文件若users.txt文件存在 输入…

内网学习:工作组用户与权限

目录 一、本地用户组介绍本地工作组介绍用户与组的关系 二、四种用户类型及权限比较本地系统最高权限(System账户)特性Administrator与System账户的区别 本地最高管理员(Administrator用户)特性 本地普通管理员特性 本地普通用户特…

SpringMVC核心、两种视图解析方法、过滤器拦截器 “ / “ 的意义

SpringMVC的执行流程 1. Spring MVC 的视图解析机制 Spring MVC 的核心职责之一是将数据绑定到视图并呈现给用户。它通过 视图解析器(View Resolver) 来将逻辑视图名称解析为具体的视图文件(如 HTML、JSP)。 核心流程 Controlle…

抽象类和接口的区别是什么?

抽象类和接口在编程中都是用来定义对象的公共行为的重要概念,但两者之间存在显著的区别。以下是对抽象类和接口的详细比较: 一、定义与关键字 抽象类:使用abstract关键字定义,表示该类是抽象的,不能被实例化。抽象类…

html+css+js网页设计 美食 美拾9个页面

htmlcssjs网页设计 美食 美拾9个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#xff0…

Linux下PostgreSQL-12.0安装部署详细步骤

一、安装环境 postgresql-12.0 CentOS-7.6 注意:确认linux系统可以正常连接网络,因为在后面需要添加依赖包。 二、pg数据库安装包下载 下载地址:PostgreSQL: File Browser 选择要安装的版本进行下载: 三、安装依赖包 在要安…