当前,各式各样的信息化系统由于开发的软硬件不同,采用的接口协议不同,彼此之间相互孤立,造成了各种资源的极大浪费。对此,笔者认为,整合资源,建立统一的信息化平台,可以追求接口标准的统一,新应用程序按统一的接口标准开,老的应用程序继续使用,并在接口处进行转换。既然是统一的接口标准,那么必然要求统一数据格式和指令格式。对于接口处收发数据,大家很容易理解,但对于接口处是否需要收发指令,大家可能还有疑问。这里举一个简单的例子:CIQ2000系统和电子监管系统相互之间是有关联的,对于拦截的批次,一旦在电子监管系统中完成登记,CIQ2000系统就会自动完成结果登记、证稿拟制、证稿审核等工作,而且这一过程要求响应速度非常快。如果单纯依靠数据传输来实现,一来需要耗费大量的资源(把是否放行也看做每一批次的一个属性,从数据上表述就是“1”放行,“0”仍然拦截,CIQ2000系统不断地去读取所有拦截批的这个属性,直到发现他们从“0”变为“1”为止),二来同步性差(对数据的采集更新有一定的周期),所以在这里采用同步指令的方式会更加合适。
一、一种数据共享的信息化平台
下图是笔者构思的一种数据共享信息化平台的简略框架图,它的基本思想是把所有有用的检验检疫信息存储到一个统一的数据平台上,所有应用程序和外部接口既是数据采集点,也是数据调用端。需要说明的是,由于只是为了说明数据流向,这个框架图中省略了很多模块(特别是技术处理上的),譬如各模块前置的缓存(Buff)、请求应答信号(REQ、ACK)、读写多通道等等。
图中的“CIQ应用程序1”~“CIQ应用程序N”模块代表了检验检疫各个现存的信息化系统,如CIQ2000系统、电子监管系统、退运系统等;“外部数据1”~“外部数据M”则代表了检验检疫系统对外接口的输入输出数据,如发改委、商务局、海关等提供或者需要的数据,可以把它们看作CIQ的一个应用程序;而“统一数据平台”模块则存储了当前检验检疫所有的有用信息(所有信息都可以用数值表示,如字符可以通过ASCⅡ码表示)。整个平台运行过程中,关于数据有两个并行的进程,一个是数据采集更新进程,另一个是数据调用进程。
数据采集更新进程,就是每隔一段时间,“CIQ应用程序1”~“CIQ应用程序N”中的有用数据就会从存储器(如数据库)内输出,通过不同的正转换程序成为相同格式的数据,并进入“统一数据平台”进行更新与存储。同样的,对于有用的外部数据,发出采集指令,“外部数据1”~“外部数据M”输入,通过不同的正转换程序成为相同格式的数据,并进入“统一数据平台”进行更新与存储。
而数据调用进程则正好相反,一旦某个应用程序需要调用数据,则发出调用指令,“统一数据平台”接到指令后输出相应数据,经过不同的逆转换程序转化为应用程序所需的数据格式。同样的,一旦外部需要调用数据,“统一数据平台”输出相应数据,经过不同的逆转换程序转化为外部所需的数据格式。
针对这两个进程举个例子:对于CIQ2000系统的某报检批信息,一段时间后会上传到统一数据平台,并转化为统一格式的数据进行存储。当在把关成效系统的某客户端输入报检号并点击“提取”,把关成效系统会向统一数据平台发送一个指令,统一数据平台就会取出该报检批的相关数据进行格式转换,并下载到把关成效系统,至于在哪一个客户端显示,则是由把关成效系统自己内部控制的。
在此,笔者还有以下几点说明:
1.对于需要联动的应用程序要做同步,通过传送指令实现,并且指令采用相同格式。
2.针于不同应用程序,可以采用不同的数据采集频率,实时性要求高的采集频率就高,反之采集频率可以低一点。
3.对于正转换、逆转换程序,可以集成到应用程序端(如打补丁或外挂小程序),也可以集成到“统一数据平台”模块中,甚至可以通过硬件实现(如FPGA)。
4.对于数据采集频率,需要考虑需求和技术因素,而针对吞吐量的瓶颈,可以对框架图方框1中的所有模块采用硬件替代的方法,应用程序端也可以加速(如采用PCI接口传输数据)。
二、采用编码方式实现统一的数据和指令格式
对于“统一数据平台”中的数据,我们采用“本体+属性”的格式。对于“本体”,我们采用类似网络IP地址的方式进行编码,如我们把“4.0.0.0”~“4.255.255.255”(即“00000100.00000000.00000000. 00000000”~“000001
00.11111111. 11111111. 11111111”)分配给批次,那就可以表示224=16777216批货物。而属性则是指“本体”的各种信息,如该批货物的金额、数量、施检部门等,可以也用二进制表示。显然对应一个IP会有好几个属性,我们必须具体地规定含义,如第一个表示金额,第二个表示数量,第三个表示施检部门等,从而确定该“本体”的数据结构。如“4.0.0.10”的数据表示可能是“10000001 100 ……”,它表示了报检号为“4.0.0.10”货物的金额为129美金((10000001)二进制=(129)十进制)、数量为4件((100)二进制=(4)十进制)。同样的,对于业务、人事、财务等涉及的各种“主体”,都可以采用分配IP地址的方式进行编码,一开始建立的时候,各部门根据自己的需要提出申请数目,由顶层统一分配相应的IP段。
对于指令我们则采用“本体+参数”的格式。对于“本体”,仍然采用类似IP地址的方式进行编码,如我们定义 “0.0.0.1”(即“00000000.00000000.00000000. 00000001”)为数据调用命令,它可以含有3个参数,分别是目标应用程序(也是一个数据“本体”)、被调用数据的“本体”、被调用数据的“属性”。如“0.0.0.1 1.0.0.1 4.0.0.10 10”这个命令,“0.0.0.1”表示调用数据命令,“1.0.0.1”表示把关成效系统,“4.0.0.10”表示报检批,“10”表示第二个属性(即“数量”),即把关成效系统调用报检号为“4.0.0.10”货物的数量。
关于这种编码方式,与直接采用某个数据库软件等相比,有以下优点:
1.如果直接采用某数据库软件实现统一的数据和指令格式,处理仍然处于应用层,需要PC等设备进行支撑。当数据量大时,容易产生瓶颈,并且由于对底层没有清晰的了解,较难向硬件实现方向靠拢。而采用笔者这种编码方式来实现,则较好地克服了这些问题。
2.在物理底层永远只有两个数,一个是“0”,一个是“1”,任何其他信息在底层都会转化到“0”和“1”进行存储。因此,编码方式虽然位数多,但用的是二进制,并且已经优化了,实际占用的硬件资源反而少。
3.扩展性强,既可以横向扩展(如将IPv4扩展为IPv6),也可以纵向扩展(采用树形结构建立级级“子网”)。
4.IP技术已经是成熟技术,用这种编码方式来实现,可以借鉴很多现成的先进技术,节省了大量的开发时间和实现资源。
5.自主开发,拥有核心知识产权,可以向外推广。如把检验检疫仅作为其中的一个“二级子网”,“主网”向更大范围扩展。
信息化建设中,科学分析除了需要收集精确的信息,更要注意数学模型的建立。一方面,这是我们数据分析的需要。如采用时间序列分析的方法处理退运系统、风险采集系统、质量分析等收集的数据,只需要调用R函数,我们就能通过ARIMA模型进行预测,从而建立预警机制;另一方面,数学模型的建立可以使复杂问题简单化。如人力资源分配问题,把检验检疫的内容抽掉,其实这就是一个线形优化的问题(在满足若干线性约束条件下,使线性目标函数最优),使用Matlab程序可以轻松实现。