主数据之关于用户、组织、国家地区等的数据管理的设想和思考
一、前言目前,公司将现有的几个项目产品化,进度有一段时间了,需求、设计、开发、测试、管理等资源配置也相对完整,从6月份开始,就一直在做,但前期没有制定统一规划和规范,导致在项目做的过程中,做到某一个具体的功能时,或者项目进度到中期阶段时,才发现有些功能涉及多个系统交互,而在涉及到交互的功能中,有些功能已经开发完成,再来做交互的接口,项目组不再愿意改动。
在上述的功能,就包括用户、组织。目前公司已经上线几个系统,但各个系统之间的数据独立,特别是人员信息,一个新系统的上线,就要通过后台数据库的操作完成数据迁移,并且新增员工时,要到各个系统中去维护,基于这样的一个原因,才想统一将人员等其它共有的信息维护起来,以后所有系统的人员信息都从HR系统中获取,保证数据源的唯一性,人员和组织功能已经在HR系统中实现了,而公司想要开发一个独立的帐户管理平台,即4A(帐户、授权、验权、审计),目前已经实现的包括前三个,审计前期过类似的功能,但还木有完全整理到4A中。4A中的帐户管理中有涉及人员、组织、国家地区(人员所属地区),这部分的功能与HR中的人员管理、组织管理功能很类似,HR中木有涉及地域信息的维护(这部分数据简单讲可以通过数据库维护),前期设想是由4A团队开发完成,或者由HR团队将这部分功能从HR系统中抽取出来,作为独立的应用,但这两种方案都没有得到赞同,所采用另一种方法:是HR团队开放一个WebServices接口,将来通过走ESB的方式,4A的定时的获取人员、组织的信息,在获取信息的同时,将这两类信息即时的发送到其它系统中,例如办公、培训。
上在所述场景所要达到的目的:是期望保障数据来源的唯一性,公司内部有多个系统,其中有些功能是类似,数据也要一致的,保障人员能及时的通知或更新到各个相关的系统中去(有一定的实时要求),但是前期木有统一规划,造成一套信息多个地方维护,一个功能,多个项目在做。二、设想1、现有实现HR系统中已经有人员和组织信息的维护功能,而在4A开发前期,考虑到将来产品销售出去之后,客户不需要HR系统,那么4A中的帐户肿么维护(4A中的帐户是与人员的信息挂勾)呢?基于这样一个问题,在4A中增加了人员和组织信息是维护的功能,但是4A中的这两个功能非常简单,与HR系统中的功能相差比较远,当然4A不侧重这两个功能,所以才以能满足最基本的需求为准开发,本人一直不十分赞同这样的做法,少后说一下本人的想法。
4A中虽然增加了人员、组织的维护功能,但是通过权限或者在根据实际场景在发布的时候屏蔽这两个功能,只保留查看,而新增、修改通过HR完成,也就是4A中实际存在了两个版本,一个包括了人员和组织维护,一个是只有人员和组织查看功能。
现在有的接口和数据流说明:HR中显露WebService接口,一次取的数据量最大1000条,如果低于1000条,那就是全部取出;4A配置定时任务,每隔10秒钟调用HR的WebService接口,获得最新更新的数据,条件是用4A中最近更新日期与HR中匹配,HR中匹配的规则是大于等于4A中传递的最新更新时间,这样子设计就会造成取相同的数据,例如,我更新一条数据,时间为2012-11-23 17:00:00,这条数据会在4A调用HR接口的时候,同步到4A中,之后定时任务再去调用HR接口时,会将这个时间(2012-11-23 17:00:00)传给HR,HR就用这个时间匹配,大于等于这个时间的数据会发送给4A,这样造成刚同步的数据又会同步一次,这样的接口,虽然是完成了数据同步的功能,但是我觉得有两个问题,一是数据重复同步(第一次同步是新增,第二个同步是更新),二是数据量比较大,可以最大达到1000条的数据。
上面所述过程是数据从HR中到达4A,4A在取到HR中的数据之后,做了两件事情,一是保存或者更新到4A的库中,二是发送JMS,将变更或新增的数据实时的发送到其它系统中去,这样也会有重复发送的数据。
如果系统都部署在内网当中,这样的数据传送应该木有神马太大的问题,目前已经是这样子运行的,效率和性能还在接受的范围之内,但如果是外网,有待测试。
2、改进设想首先我们来看一个人员、组织等信息的特征,人员是一个系统中的基本信息,几乎所有的系统都需要,组织也是,一般的系统都会带有组织,国家地区信息,这类信息都有一个共同的特殊就是:几乎所有的系统都离不开,是一个系统正常运行所必需的,因此,我的想法是将这些信息维护做为一个独立的应用,可以与其它各个系统能自由组合。
从实际的角度来看,就是将这些信息的维护功能从HR和4A中都独立出来,开发一套相对稳定 ,且能满足大多数场景的功能,提供便宜、快捷、实时的接口,保障这些信息能磅到想要这些信息的系统中去。
3、设想实现的路径人员、组织、国家地区等一些共有信息的维护,组成一个独立的应用,这些应用一部分是自身数据的维护功能,一部分是对外提供接口,所有需要此类数据的系统,都必须通过这个该应用提供的接口获取,不再单独开发。
引起的问题:人员信息是常用到的,特别是在企业的管理系统中,因为有一些数据记录会涉及到创建人、更新人、操作人信息,不可能在显示这些数据时,去实时的取得用户的相关数据,我就需要开发独立的应用去维护人员信息功能(类似Server)的时候,还要开发一个client,client主要为使用到人员信息的系统开发,这些系统只是需要展示的时候使用,而不需要新增、更新的功能,并且需要的信息量也很少,一般最经常用的就是人员信息表中的主键及人员信息中的姓名,所以要开发一个client帮助各个系统及时的获取到最新的数据。
那肿么来保障client可以及时的获取到最新的人员等数据呢?一是在人员新增、更新的时候,通过消息服务机制通知各个client,让client也能及时的获得新增和更新到数据,以保证数据同步,二是client定时任务,根据最后更新时间获取所需要的数据。
将这上结信息维护的功能从各个系统中独立出来的另一个目的就是期望达到可以与任务一个系统集成,如果客户只需要OA系统,而不需要HR系统,这个时候这样的独立应用可以与OA系统一起匹配,如果客户只需要知识管理的系统,也可将独立的应用与知识管理匹配,而不需要强行的同HR一个销售,同时4A中的人员和组织等信息的维护功能清除掉,保障4A系统功能的单一性(所谓的单一,就是不要做与4A无关的事宜)
三、小结目前HR和4A都已经上线,本人只是根据自己的想法对现有状态表达一下个人想法,当然也希望各位看客能提供更好的解决办法,或者面对这样的数据或者面对这样的场景,如何做更好。