再谈主数据管理系统(9.23)

对于MDM主数据管理在我前两年的博客文章中谈的比较多,由于MDM一直不是我们重点研发的一个产品,因此最近关注的并不太多,但是对于SOA或ESB的应标会经常遇到客户有MDM主数据管理的需求,因此对于主数据管理系统的建设再做下简单的说明。

基础层应该具备的两个关键功能-ETL和流程引擎

对于主数据管理系统的基础层应该具备两个关键能力,一个是ETL,一个是流程引擎。

对于ETL主要完成存量数据的数据集成,在这个完成中重点又是完成数据的清洗后初始化入库。里面除了标准的ETL应该具备的数据抽取,清洗,数据转换,调度和任务管理能力外,最重要的就是数据清洗。实际上对于数据清洗很多时候靠标准的ETL工具的功能很难完成,基本还是需要自己编写相关的代码或脚本进行数据的清洗,比对,去重最终入库。对于数据完整性我们又可以理解为两个方面,一个是表内数据完整性,一个是表间数据完整性,表内数据包括了参考完整性和类似去重这种行间完整性检查。表间完整性主要是关联依赖类检查,表间业务规则约束类检查等。

流程引擎是另外一个主数据管理系统必须具备的功能,涉及到后续的主数据对象的申请创建,变更,废弃等一系列的流程都需要通过流程引擎来进行流程配置并完成。一个灵活的主数据平台既可以使用自己内置的流程引擎,也应该做到能够使用甲方标准的公共流程平台流程引擎能力。

应用层覆盖主数据全生命周期管理

应用层简单来说就是应该服务主数据的全生命周期管理。最开始就是主数据对象建模,一个灵活可扩展的主数据平台要做的就是模型全部可以动态创建出来,创建的主数据对象模型再生成为数据库对应的表对象。在数据建模的过程中同时完成数据对象属性定义,数据规则和完整性定义,数据存储,数据分发定义等多方面的内容。

数据建模完成后才应该进行主数据的内容管理,这本身有两种做法,一个就是类似完全的快速开发平台,表单界面间建模,规则建模全部包括,即基本不用写代码就可以完成一个主数据对象新增,变更功能的配置并挂接到具体的工作流引擎。另外一种做法就是主数据申请,变更功能还是代码开发,然后再挂接到具体的流程引擎。由于主数据在申请创建过程中往往涉及到复杂的业务规则处理,因此比较可行的方法还是自行开发相关的功能。

数据质量管理是主数据平台另外一个关键功能,即对于主数据进行数据检查和质量管控,这个一方面是在数据入库前就基于主数据建模设定好的业务规则和参考完整性规则进行数据质量检查,一个是在数据入库后再定期运行数据质量检查任务进行数据稽核。而定期运行数据检查任务也应该是一种灵活可配置的方式,即先定义好数据检查项和具体的检查规则,然后在定期运行检查任务,输出最终的检查结果报表。

数据分发和数据能力开放

一个主数据平台实际上我们看到关键是两点,一个是前期通过数据集成,数据内容管理等各种方式形成一个完整的主数据视图,第二点是将完整的主数据视图共享开放出去供其它业务系统使用。

完整的主数据视图的开放当前又存在两种方式,一种是提供主数据的查询服务接口能力,一种是对主数据信息,包括主数据新增和变更信息通过接口实时分发给各个业务系统。而第一种方式本身又存在两个子类型,一个是数据实时查询不落地,另外一种是数据定时查询增量同步落地。

注意在数据落地模式下,当前最好的方式还是数据分发,同时数据分发最好的方式又是通过消息中间件进行1对多实时分发处理。在这种模式可以最大限度的保证数据的实时性,同时又充分的利用了消息中间件异步实时,支持重试,充分解耦的技术能力。

另外,在采用数据查询方式的时候我们基本无法做多系统的主数据稽核操作,但是在采用数据分发模式的时候我们可以基于分发成功失败情况第一时间的进行数据稽核和跨系统数据完整性检查。这个也是采用数据分发模式带来的优势。当前业务系统间经常出现主数据不一致的情况,在采用数据分发集成模式下,至少主数据管理系统可以做出初步的分析和判断。

主数据系统和SOA的进一步自动化集成

这个在我前面谈主数据的文章也谈到过,可以做到主数据平台和SOA平台的进一步无缝集成。其中包括了如下一些关键的集成点。第一,对于主数据建模完成的对象,我们可以将该主数据对象通过配置的方式灵活的发布为一个主数据查询服务接口并注册到SOA平台;第二,对于主数据平台的新增或变更分发,我们可以灵活的配置将增量数据适配到哪个JMS接口或者哪个WS服务导入接口。

对于数据集成过程中,我们还可以配置自动化定时的去调用哪个WS服务接口,同时将采集到的数据适配并写入到主数据系统本地的数据库表。对于ETL调度任务,我也可以配置通过WS服务的方式进行自动化触发,类似Oracle ODI方式来实现ETL和WS服务接口的集成能力。