当前位置: 首页 > news >正文

ERP重构-SLA子分类账-分布式实现方案

背景

ERP中的GL总账模块,明细数据来源于各个业务模块如库存、成本、应收、应付、费控、资产等,统称为子模块,生成的账叫做子分类账。然而记账的业务逻辑各式各样,但是最终输出都是来源、类型、期间、科目、借贷金额等等关键信息。期望有一个统一的子分类账配置中心和执行引擎,特别是现在业务模块很多,海量数据,各系统都是分布式存储。比如费控模块每个月才万行、应付模块每个月百万行级别、库存模块每个月10亿行级别。

目标

提供统一的配置中心。
提供统一的SDK计算引擎。
提供类SAAS服务:提供配置查询、服务端计算、类公有云存储。适用于每月小于万行级别的业务模块。
提供类FAAS远程服务:提供配置查询、服务端计算,参数传入,结果返回给调用方在本地存储。适用于每月万行级别的业务模块,
提供类FAAS本地服务:提供配置查询、SDK本地计算,参数本地查询,结果在本地存储,类私有云。减少RPC调用,本地分库分表存储。适用于每月亿行级别的业务模块。

商业软件对比

以Oracle EBS为例,提供一套子分类账配置,编译时动态生成程序包,语言是plsql,只能在单实例的数据库中运行,虽然存储XLA支持分区(即各个业务模块落在不同分区),但是压力都在单实例的数据库中和单实例的应用服务器中。缺点是不支持分布式计算和存储。
也有其它软件的做法是提供配置admin,编译生成程序包,最终部署到不同的服务器,程序计算过程中不依赖配置中心。缺点是有业务规则调整,只能修改配置重新生成程序包并部署。

设计

数据模型设计

配置中心表

对标大型Oracle EBS和SAP,术语有很多相同之处。重配置、轻使用,一套复杂的配置表可以兼容各种业务场景,把复杂都内聚在引擎里,在业务系系统使用计算引擎却很简单。共28张配置表,4张计算输出表,下图只显示部分核心表。
在这里插入图片描述

会计分录业务表

真正的业务表只有事件、分录头、分录行 3张表,事务实体和追溯表的字段已经融合到3张表中,使用更加简单。业务表作为一份标准安装脚本(表名前缀可以改),需要本地存储的业务模块建表即可。
在这里插入图片描述

流程图

把计算引擎做成SDK,保证服务端或本地计算的逻辑一致,采用抽象模板模式,一份计算逻辑模板代码,声明统一的抽象方法。
在这里插入图片描述

SDK模板方法

把计算引擎复杂的逻辑内聚在模板方法中,计算过程中读取分类账配置中心,并且通过各配置表的组件功能协作完成整个计算逻辑,整个过程只需要调用一次配置中心(在业务数据很大时,也可以按需缓存配置)。
在这里插入图片描述

本地模式的实现

声明业务系统需要实现的DB查询和保存抽象方法。在计算开始时参数需要查表,计算结束时结果需要保存。

在这里插入图片描述

预留本地自定义来源

SDK预留本地自定义来源,可以是http、rpc、本地实现各种方式。自定义来源作为一个动态参数,可以使用已有的标准入参,经过自定义逻辑转换得到一个新的自定义参数。在这里插入图片描述

项目实践

对标Oracle EBS SLA
在这里插入图片描述
自研SLA
在这里插入图片描述
已经顺利接入6个不同的业务模块。
对于数据量10亿级以上的业务模块,可以结合MQ分发订阅模式提高处理性能,缓存配置,批量查询或调用.。

作者:黎法良

http://www.lryc.cn/news/94433.html

相关文章:

  • IP路由协议(RIP、IGRP、OSPF、IS-IS、BGP)
  • 互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景
  • Python WSGI 与 Web 开发框架
  • [洛谷]P6464 [传智杯 #2 决赛] 传送门
  • Http协议和RestTemplate协议有什么区别?
  • 基于SpringBoot+微信小程序的医院预约叫号小程序
  • springboot整合RabbitMQ 消费端处理数据
  • 计算机中CPU、内存、缓存的关系
  • 【Linux实验】构造一个简单的 shell
  • 【电路原理学习笔记】第2章:电压、电流和电阻:2.6 电路
  • 基于深度学习的人脸检测技术
  • 【linux kernel】一文总结linux内核通知链
  • kafka入门,Kafka 副本(十三)
  • 利用PPT制作简单的矢量图
  • 18-Linux 常用命令
  • 2024考研408-计算机组成原理第六章-总线学习笔记
  • uni_app 微信小程序 苹果手机 边框显示不全
  • vue 访问第三方 跨域, 配置vue.config.js
  • 使用gradio库的File模块实现文件上传和展示
  • 网络安全进阶学习第四课——SSRF服务器请求伪造
  • js处理扁平数组和树结构相互转换
  • Spark弹性分布式数据集
  • ffmpeg学习记录
  • ChatGPT:为教育创新提供五大机遇
  • Educational Codeforces Round 151 (Rated for Div. 2)
  • 【AI机器学习入门与实战】机器学习算法都有哪些分类?
  • React之hooks
  • 1.监控分布式--zabbix
  • java stream 多个集合去重取交集
  • 给LLM装上知识:从LangChain+LLM的本地知识库问答到LLM与知识图谱的结合