互联网行业ERP重构的心路历程

本文探讨了国内企业面对大数据挑战如何重构ERP系统,从EBS模块出发,按阶段规划业务模块重构,重点提及FMD财务主数据和SLA子分类账模块。技术选型涵盖了分布式数据库、作业调度、缓存和实时计算等组件。文章强调了数据模型设计、开发效率提升和系统监控的重要性,以及月结验收的挑战.

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

国内很多大厂都在用大型的ERP系统EBS或SAP。比如电商行业的阿里、京东、唯品会在用EBS,制造/物流/房地产等行业如联想、海尔、美的、万科、华为、上汽、顺丰、宝洁、施耐德也在用EBS。

国内很多公司互联网行业数据量庞大,虽然Oracle数据库单表在亿级数据量时,还保持着不错的性能,但是互联网行业有些业务表1个月就10+亿数据量,Oracle也扛不住,所以EBS系统面临着极大的挑战。

随着这几年国际形势的变化,科技无国界已经是空话。若要系统不被卡脖子,那就需要自研属于自己的ERP。

国内企业ERP重构

由于这些大厂是上司公司,ERP系统必须要符合审计要求。有换ERP系统,有上Oracle Exadata一体机,有被老美制裁Oracle停止服务。有能力的公司更倾向于自研重构EBS,有些公司迈出这步早一点,有些晚一点,但是我认为最终都要自研自己的ERP系统。

EBS的主要模块

以EBS系统为例,模块非常多,国内用的比较多得是制造、分销、财务涉及模块的功能。
下图是EBS的主要模块,以电商为例,电商主要是分销和财务,那么几个重要模块是PO采购、AP应付、INV库存、COST成本、OE订单、AR应收。以上模块最终都会流转到GL总账模块,此图少了一个总账前置的SLA子分类账模块。
在这里插入图片描述

进攻方向

模块重构的进攻方向可参考业务模块的数据流转方向,分三期进行。
一期如下图优先把对接上游的模块重构。

一期规划

在这里插入图片描述

二期规划

在这里插入图片描述
FMD财务主数据:如账套、法人实体、业务系统、库存组织、账户等等归为FMD财务主数据,相当于EBS的GL配置表、FND配置表等。
SLA子分类账:另外是GL总账前置的子分类账SLA也是一个重点,财务部门的很多业务系统都需要进行财务记账,记账的业务逻辑各式各样,中间的加工逻辑虽然不一样,但是最终输出都是来源、类型、期间、科目、借贷金额等等关键信息。

建议:如果开发资源足够,可以放到一期实现,因为SLA可以让库存、应收、应付的会计分录无需重复造轮子,只需要对接SLA进行自动会计,并且由SLA统一对接总账。但是需要设计一个支持分布式系统的SLA模块,至少让库存、应收、应付减少1/3的开发工作量。

三期规划

在这里插入图片描述把EBS总账,以及一些边角模块如FA资产重构掉。在三期规划时,就要拉上法务、审计进行沟通,要把系统设计得合规,上司公司还要考虑符合美准、中准。

第一期历程

重构业务模块,包括PO、INV、COST、AP、OE、AR,我们分为三个项目小组。
先锋队:基础架构、公共模块
库存小组:PO、INV、COST
应收小组:OE、AR
应付小组:AP、供应商结算

前期准备
技术选型

首先是我们先锋队进行技术选型,框架搭建。数据量非常大,我们需要分库分表,对于业财一体化的ERP系统,对于数据事务一致性要求非常高,所以我们选择了基于Sharding-JDBC进行二次封装,最终形成了dahu大禹组件。分库字段确定,这是一个重中之中的抉择,因为只有同库才能绝对保证事务一致性,就要让提交的数据都在落在一个数据库中。各个模块之间调用提供RPC服务,使用我司的OSP开发服务平台。缓存方面使用我司的Asgard数据服务平台。在业务模块很多业务处理是超大数据量的批处理,所以使用了我司的分布式作业调度系统Saturn和分布式系统消息中间件VOS,在应付的供应商结算模块我们选择了Spark。
最终选型如下:
分布式数据库中间件:基于Sharding-JDBC进行二次封装的dayu
分布式作业调度系统:Saturn
分布式系统消息中间件:VOS
开发服务平台:OSP
缓存:Asgard
海量数据实时计算:Spark
分库分表全局取号:自研idg全局取号服务

数据模型

由于表非常多,参与开发的人比较多,所以我们基于excel+VB设计一个适用于MySQL的数据模型管理小工具,可以在Oracle表查询后贴入转为Mysql表,也可以手工新建表,帮助我们快速建表,同时解决表结构版本管理问题。
建议分库分表必备字段:
在这里插入图片描述在这里插入图片描述
id作为mysql的主键,global_id作为本表所有分库的全局id,db_no作为分库编号,另外就是WHO字段相关。

开发效率

为了提高开发效率,我们部门一直在迭代代码生成项目,已经可以基于表结构生成后端domain、dao、servcie、controller、前端页面。然后基于生成的代码进行开发。

公共模块

把业务模块开发依赖到的公共模块建设好,至少前期要把涉及的表建好,基本的增删查改服务。由于EBS的基础信息表也非常多,所以我们搭建了一个数据同步任务域专门把EBS的基础信息表都定时同步到MySQL中。并且数据同步域也作为上线数据初始化的主要工具。

设计和开发

以库存模块为例,业务流程拆分成一个个批处理。库存的数据主要来自于WMS系统,对于WMS而言关注重点是实物管理,数据流转到财务的库存,需要进行一系列的账务处理。
我们建议库存相关的表都是采用item_no(物料编码)作为分库字段。(历史原因我们很多表定了使用po_no作为分库字段,并不是一个好的选择)

上线试运行

对于库存模块最困难是现有量表,对于成本模块最困难是物料成本表。因为这两张表是滚动变化的,一旦输出发生错误,就会越滚越大,运维修复成本很大。我们在试运行时经过2次全部铲掉数据,重新初始化数据跑业务。尽量控制重跑的范围,比如我们保证了库存事务处理接口表数据完整的情况下,那么可以只铲掉现有量,重新跑数据生成库存事务处理和加减现有量。

数据对账

要充分利用大数据进行对账,建议至少做3中通用场景的对账。
1、漏数对账
2、重复对账
3、汇总对账

系统监控

系统日志:作业要打印必要的日志,在日志系统中订阅系统错误日志。
业务监控:针对某些业务,数据量少可以写Mysql监控SQL,数据量比较大的写大数据的监控任务收集好数据,然后通过邮件监控发送给负责人。

定期归档

MySQL分库分表尽量让单表不超过2000W,128个分库。我们需要定期对数据进行归档。归档库存储历史数据,MySQL存储最新数据,数坊存储全量数据。

财务月结

ERP实施上线,只有财务月结验收通过才算真正项目切换成功。使用Java技术栈+MySQL分库分表,到了月结才叫真正考验人,如果选择的组件不成熟、分库分表不合理、事务一致性出问题、业务流程设计不合理等等,那么月结通宵是家常便饭。
建议在项目在设计阶段,要多考虑后期系统运行的运维工作,尽量让业务流程线性化、简单化。

第二期历程

重构基础数据、GL前置的模块,我们分为两个项目。
FMD财务主数据项目:后续分享…
SLA子分类账项目:后续分享…

第三期历程

重构GL模块、FA模块,规划中…

作者:黎法良

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值