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

news2024/11/17 6:42:47

背景

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.coloradmin.cn/o/711724.html

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

相关文章

Java-数据结构(二)-Map:HashMap、TreeMap、LinkedHashMap

目录 一、 引言二、问题2.1 什么是Map2.2 使用Map的好处2.3 Map的底层原理2.4 Key和Value的含义2.5 Key值为什么不能重复2.6 Key值和Hash的关系 三、 HashMap3.1 初始化HashMap3.2 添加和获取元素3.3 遍历HashMap3.4 删除元素3.5实现原理①HashMap的put()方法②HashMap的get()方…

【海量数据挖掘/数据分析】 之 贝叶斯分类算法(朴素贝叶斯分类、贝叶斯分类计算流程、拉普拉斯修正、贝叶斯分类实例计算)

【海量数据挖掘/数据分析】 之 贝叶斯分类算法(朴素贝叶斯分类、贝叶斯分类计算流程、拉普拉斯修正、贝叶斯分类实例计算) 目录 【海量数据挖掘/数据分析】 之 贝叶斯分类算法(朴素贝叶斯分类、贝叶斯分类计算流程、拉普拉斯修正、贝叶斯分类…

无java环境运行jar

1、编写简单java程序。 例: public static void main(String[] args) {if(args.length>0)System.out.println("Params is:"args[0]);System.out.println("Hello word ! I am demo,,,&#xff0c…

软考高级网规考试笔记(涉及表格用图片代替_9万字左右)

作者:BSXY_19计科_陈永跃_23年7月更 BSXY_信息学院_v:CwJp0403 注:未经允许禁止转发任何内容 笔记说明: 目前还只有笔记,其他资源将会在近期更新,(笔记5.5即可,不诚勿加可以去其他地方自找找看&…

Quartz任务调度笔记

一、概念 1.1简介 Quzrtz是OpenSymphony开源组织在Job scheduling领域的开源项目 特点:Quartz具有丰富特性的"任务调度库",能够集成于任何的Java应用,小到独立的应用,大到电子商业系统。quartz能够创建亦简单亦复杂的调…

DAY35:贪心算法(二)分发饼干+摆动序列

文章目录 455.分发饼干思路两个for循环嵌套的写法为什么这种写法必须要有visited数组debug测试逻辑问题:没有进行计数逻辑问题:找到了result3个孩子 一层for循环的写法为什么这种写法一定要把小孩数组放在外面 376.摆动序列(逻辑问题&#xf…

02_04实时调度类及SMP多核处理器的实时操作系统体系结构

上一篇文章说的是普通进程的调度但同时还有实时进程在linux上面进行运行 这边来看看实时进程在linux里面怎么调度 同时linux操作系统对实时任务的处理方式和设计思想 实时调度类 Linux进程分为两大类:实时进程和普通进程。 实时进程与普通进程根本不同之处,如果系…

ModuleNotFoundError: No module named ‘transformers_modules.chatglm2-6b‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

青少年机器人技术一级核心知识点:机械结构及模型(四)

随着科技的不断进步,机器人技术已经成为了一个重要的领域。在这个领域中,机械结构是机器人设计中至关重要的一部分,它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说,了解机械结构的基础知识,掌…

LabVIEW大模拟数据解决方案

LabVIEW大模拟数据解决方案 比亚迪汽车对于在动力总成标定和控制部门工作的400多名工程师来说,这种投资包括实现NI的新战略和解决方案,以更好地捕获和管理大量的原始测试数据,在车辆上市前做出更明智的决策。 因为能够更好地获取更优质的数…

Go语言开发者的Apache Arrow使用指南:内存管理

如果你看了上一篇《Go语言开发者的Apache Arrow使用指南:数据类型》[1]中的诸多Go操作arrow的代码示例,你很可能会被代码中大量使用的Retain和Release方法搞晕。不光大家有这样的感觉,我也有同样的feeling:**Go是GC语言[2]&#x…

MWCS 2023,到底有些啥?(下篇)

█ 亚信科技 5G行业专网一体机: 反光太厉害了,看不太清: 这几张都是小枣妹拍的,^_^: █ 浩鲸科技 浩鲸,就是以前的中兴软创: █ 紫光展锐 6G这块,干货很多: 这次重点展示…

docker容器日志占满硬盘空间的解决方案

目录 原因分析解决方案方案一 定时清空日志文件方案二 全局容器日志大小方案三 修改日志驱动 docker常用清理空间命令 原因分析 由于默认情况下,docker使用json-file类型的日志驱动,该日志驱动默认情况下,每个容器的日志会一直追加在文件名为…

chatgpt赋能python:用Python模拟用户登录,实现多个网站的SEO优化

用Python模拟用户登录,实现多个网站的SEO优化 介绍 在互联网时代,SEO已成为许多网站提高曝光率和流量的重要手段之一。而SEO优化的一个重要方面就是网站的用户登录。然而,手动登录多个网站进行SEO操作是非常耗时耗力的。那么,有…

卷积神经网络实现猫狗分类

目录 一、环境配置二、神经网络CNN1、简介2、CNN结构3、层次说明 三、数据集准备1、下载数据集2、数据集分类 四、 猫狗分类的实例——基准模型1、构建网络模型2、配置训练方法3、转换格式4、模型训练并保存生成的模型5、结果可视化 五、调整基准模型1、图像增强2、增强后的图像…

【C语言初阶(8)】函数1

文章目录 1. 函数的介绍2. 函数的分类2.1 库函数2.2 自定义函数 3. 函数的参数4. 函数的调用4.1 传值调用4.2 传址调用 1. 函数的介绍 1. 什么是函数? 函数是完成特定任务的独立程序代码单元。语法规则定义了函数的结构和使用方式。 一些函数执行某些动作&#xff…

Guava 之 EventBus

​​EvenBus​​​ 是 Guava 中 Pub/Sub 模式的轻量级实现。平时开发如果我们要实现自己的 Pub/Sub 模型,要写不少类,设计也挺复杂,对业务代码也有一定的侵入,但是在使用了 ​​EventBus​​ 之后就很方便了。 在 Pub/Sub 模式中…

Java——《面试题——tomcat篇》

全文章节 Java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 Java——…

干货 | 智慧教育平台生成式人工智能应用的安全要求

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。 第一部分:编制说明 标准制定的基本原则主要包括以下四个方面: 综合性:本标准全面漫盖了智慧教育平台ChatGPT安全保护的要求,以便用户参考&#xf…

Spring:Bean

Bean 概述配置方式自动装配继承与依赖作用域外部属性文件的使用 概述 Spring 容器负责管理依赖注入&#xff0c;它将被管理的对象都称为 bean 。我们通过 xml 文件配置方式进行对 bean 的声明和管理。 写法如下&#xff1a; <beans><bean id"bean的唯一标识符…