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

news/2024/10/18 16:53:35/

背景

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.ppmy.cn/news/701354.html

相关文章

百度大脑人脸离线识别SDK Windows版

今天给大家带来是百度大脑人脸离线识别SDK Windows版,人脸离线识别SDK经过不断的升级迭代,目前已支持Windows版,下面我们来看具体详情!   百度大脑人脸离线识别SDK Windows版对多系统平台全方位适配兼容,同时对杂光线…

ALL IN ONE最佳实践方案分享(从硬件到软件全覆盖)

何为ALL IN ONE 在一个电脑上,完成所有IT需求 软路由旁路由nas网络存储windows系统linux系统 一般情况下,这需要2台以上的电脑才可能实现 本篇文章是一个全方位的知识分享,是可以帮助大家从无到有的搭建ALL IN ONE做一个认识型的了解 硬件…

利用ipv6搭建一台服务器

背景 继上次发现ipv6以来由于要实习,一直只是在尝试部分小功能的实现,终于在这个春节假期才有了一大段空闲时间来部署服务器 硬件需求 首先要搭建属于自己的服务器得要有一定的硬件条件,服务器其实就是一台一天24小时开启的计算机&#xf…

C++多线程学习(一、简单概念理解)

目录 多线程 1.并发 2.进程 3.线程 4.并发实现 4.1:多进程实现并发 4.2:单线程,多线程实现并发 5.c中的多线程 简单的多线程示例代码: 多线程 1.并发 两个或多个独立活动同时发生(一个程序执行多个独立任务) 举例:吃…

【Redis】数据被删除,内存占用还这么大?

【Redis】数据被删除,内存占用还这么大? 操作系统分配给 Redis 的内存有 6GB,通过指标 used_memory_human 发现存储数据只使用了 4GB,为何会这样?为何无法保存数据? 通过 CONFIG SET maxmemory 100mb或者在…

【基础算法】穷举法

穷举法Exhaustive method是使用最广泛、设计最简单,同时最耗时的算法,也被称为暴力法、蛮力法Brute force method。 两数之和 给定一个整数数组array和一个目标值target,请在数组中找出和为目标值target的两个整数,并输出它们在数…

计算机类图书按中图法类号,中图分类号 中国图书馆分类法(O类 数理科学和化学)...

O 数理科学和化学 01 数学 01-61 数学词典 01-64 数学表 O1-8 计算工具 O11 古典数学 O119 中国数学 O12 初等数学 O121 算术 O122 初等代数 O123 初等几何 O124 三角 O13 高等数学 O14 数理逻辑、数学基础 O15 代数、数论、组合理论 O151 代数方程式论、,线性代数…

git配置报错fatal: Authentication failed for ‘‘问题解决

git配置报错fatal: Authentication failed for 问题解决 参考文章: (1)git配置报错fatal: Authentication failed for 问题解决 (2)https://www.cnblogs.com/yl0604/p/12103467.html 备忘一下。