利用SOA构建图书馆采访微服务模型促进重用_soa论文

运用SOA构建促进复用的图书馆采访微服务模型,本文主要内容关键词为:复用论文,模型论文,采访论文,图书馆论文,SOA论文,此文献不代表本站观点,内容供学术参考,文章仅供参考阅读下载。

1 SOA研究现状综述

面向服务的架构(Service-Oriented Architecture,SOA)作为新的系统设计理论正在被各行各业研究使用并转化为实际生产力。它被应用到企业资源计划(Enterprise Resource Planning,ERP)中以弥补传统ERP系统体系结构缺少灵活性的不足[1];被用来构建网上银行用户评估系统以解决银行客户分布存在的“二八效应”问题[2];被用来整合物流信息以挖掘“第三利润源泉”[3]。银行、电信、移动等实力雄厚的信息行业引领者对于SOA推崇备至。上海电信已经实施了本地网业务系统整合项目,其服务系统担负16个地面局范围内所有电信业务的统一受理和集中处理工作。基于中国移动指定的战略前提,四川移动提出了加强信息资源管理,解决信息个人化、部门化、一数多据、数出多头等问题,他们选择的系统重构方法就是SOA。中国建设银行在信息化推进和资源整合方面的意识和实践很突出,他们在企业资源规划方面的工作起步很早,2005年就有意识地尝试了SOA理论在规划中的运用。

面向服务的架构在信息服务行业的应用已经突破了技术性试验阶段,正在进入标准制定阶段。在图书馆学领域,SOA的应用仍然是个新的研究课题。目前已经获得的研究成果还比较少。截止2010年4月在中国知网CNKI上检索以SOA和图书馆为主题的文献,只有43个结果。这些论文主要关注两方面问题,一是介绍SOA理论并论证其应用于本领域的可行性和必要性;二是主张构建SOA信息服务平台以达到资源整合的目的。但这些研究成果中关注到图书馆日常业务的很少,只有唐小新谈到运用SOA来整合多种图书采访模式[4]。长期以来,图书馆研究人员把更多的精力放在了接近终端用户的服务创新上,而图书馆基础业务系统则没有得到应有的重视。业务是服务的基础,图书馆一成不变的系统架构和资源组织方式将直接影响用户端服务的方式和质量。业务系统设计理念和资源组织方式落后,对于程序和数据的复用支持度不高,使得用户服务创新缺乏应有的应变机制支持,创新不可避免地带来大量的代码冗余、数据堆积和重复劳动。

本文以图书馆采访业务为研究对象,运用SOA分析方法对于图书馆基础业务系统进行重新架构,尝试建立促进复用的微服务模型。探索SOA针对图书馆业务系统应用的普适性方法,研究微服务复用的有效机制,促进图书馆低投入高产出的服务创新。

2 在采访业务中实施SOA分析方法

SOA分析方法,其理论依据是SOA理论中的方法论——面向服务设计范式(service-oriented design paradigm)。设计范式(design paradigm)是指设计方案逻辑的治理方法,它包含互为补充的一组规则或原则。这些规则或原则共同定义了该范式反复实施过程中的全局指导性方法。面向服务设计范式定义了SOA架构实施过程中的全局性方法,它包含了一系列SOA最基本的指导性原则,如松散耦合、独立自治、潜在可复用等。面向服务范式构建的是一个分布式方案,它将一个大规模问题分解为一组分离专注点(separation of concerns),这样的方法通常会使问题得到更加有效地解决[5]。SOA的分离关注点即“服务”。面向服务设计范式对业务需求进行逻辑分析,分离成一组较小问题——服务。再把服务进一步分解为更加细小的关注点——微服务。每一个微服务实现相对单一的功能,解决单一的问题。在SOA架构中,微服务是面向服务规则和原则的微观体现,它们是系统实现的关键节点。

图书馆大多数业务的展开都是围绕相应的流程进行。这些流程中会出现各种实体,例如图书、用户、数据等。正是因为这样的业务流程特性,可以参照面向服务范式将问题化解为分离关注点的思路,结合操作对象(实体)把流程打破,分解为细小的关注点,再优化分离关注点,使其能够具备SOA的本质特性。因此,图书馆业务的实际需要和SOA理论的结合演化为SOA实现图书馆业务的具体方法。其实施步骤设计如下:

(1)分析业务需求,整理并分解业务流程,生成微操作。

(2)根据微操作的特性对其进行分组,生成微操作分组。

(3)应用SOA的基本原则对微操作组进行改造和优化,生成微服务。

(4)封装微服务,定义微服务的交互接口,实现微服务的自由组配。

(5)建立模型,并实现促进复用功能。

2.1 采访业务的复用需求

采访业务是图书馆整体业务流程展开的起点,它的设计思路和系统实现方法必然会直接影响到后续业务的开展和操作。根据图书馆采访业务实际运行情况,归纳出工作流程为征订图书数据、订购图书、图书验收和数据交接。现有的图书馆业务系统也是遵循这样的流程来设计的,它将采访业务作为一个单独的系统功能模块来实现,模块功能设计如图1所示。

图1 现有图书馆采访业务功能模块示意图

图1中现有业务系统的采访模块包含四个子模块,每个子模块由若干个程序组成。每个程序调用多个存储过程,而存储过程和数据表之间存在着多对多关系。仔细研究采访业务的功能设计,我们发现现有采访业务系统存在几个问题:

(1)应用程序实现的功能有所重复。如订前批查重程序和订后批查重程序(图中黑底白字的图示)完成的任务非常近似,都是对于批量数据进行查重。但却被设计为两个完全隔离的独立程序。这样必然存在着相同代码的重复开发。造成两个程序不得不互相独立的原因是它们各自针对的数据对象不同,订前查重程序是将中心库数据和书商征订目录进行比较并查重;而订后程序是将中心库和订购目录进行比较和查重。它们调用的存储过程与数据表之间的关系非常复杂。正是由于这些蜘蛛网似的调用关系,很难在系统设计的同时将两个功能基本相同的程序合并,因此系统中就出现了这两个操作近似、代码冗余但很难重复利用的程序。

(2)许多功能在整体业务系统中有重复利用的机会,但都进行了重复开发,没有复用。如图1中灰底黑字图示表示的应用程序,它们不仅适用于采访业务,在其他业务流程中都会有复用的机会。其中数据导入和导出程序,几乎在业务系统中的每个功能模块中都会被用到。数据格式转换程序实现的操作是把数据从Marc、dbf、xls、mdb等格式转换为方便系统处理的定长文本格式。实际上这样的功能在图书馆业务系统的任何数据输入流程中都可能被用到。前面提到的数据批量查重功能则更加具有普适性。不仅在图书馆业务系统中会多次利用,甚至在其他的信息管理系统中复用率也非常高。再看为图书分配财产号和条码号程序,实质上就是为某一实体按照某一规则分配号码的操作。在图书馆业务系统中有很多为实体分配号码的操作,如为图书分配条码号、财产号、分类号;为用户分配读者证件号、条码号等都与采访业务中这一功能在代码实现层面非常近似。可见采访业务中开发的许多功能代码都有被重复利用的需求。

这些问题存在的原因是由于传统的系统设计思想限制了代码和数据被重复利用的可能性。兼顾复用会让开发人员的工作难度增大,二次利用原有功能甚至会比重复开发新代码需要更大的工作量。可见,实际业务需求与现有系统的设计方法和系统特性之间存在着很大矛盾,一方面采访业务中的很多功能和代码都有可能被重复利用,存在大量的复用需求;另一方面,系统自身特性限制了代码复用,对于二次开发的支持度也很有限。因此,我们不能被已经存在的框架所束缚,必须另辟蹊径寻求解决问题的方法。上述这些问题和矛盾都将会在SOA分析方法实施以后得到妥善的解决。

2.2 运用SOA创建可复用的采访微服务

根据图1描述的采访业务的整体流程和数据走向,运用SOA分析方法,首先分析业务流程中的每一步操作,再把操作拆分为细粒度的微操作。微操作将是SOA系统中的最小单元,可根据其自身特性合并同类项,作为微服务的候选雏形。采访业务拆分出的微操作如下所示:

(1)征订数据导入操作,把书商提供的征订数据导入图书馆系统,形成征订目录。

(2)征订数据格式转换操作,把Marc,dbf,xls,mdb等格式的数据转换为统一的定长文本字段数据。

(3)订购前数据批查重操作,将中心库数据与征订目录数据进行比较并查重。

(4)订购操作,轮询征订目录数据,获取实际订购图书信息,即订购目录。

(5)订购后数据批查重操作,将中心库数据与订购目录数据进行比较并查重。

(6)验收并催缺,检查实际到书和订购数据是否相同,并返回验证值。如果数据与书一致,则进入下一操作,如果不一致,则向书商发送Email催缺。

(7)分配财产号操作,为每一批图书数据分配该批次的流水号作为财产号。财产号可作为标识图书的唯一号。

(8)分配条码号操作,为图书分配条码号,条码号作为系统识别该书的认证号码。

(9)移交数据操作,把采访流程的数据移送到编目业务流程。

我们发现,采访业务流程分解出的九个微操作只针对两大实体进行操作,分别是批量数据和图书。征订数据的导入、格式转换、查重、数据移交和验收催缺都是针对数据的操作,而订购、分配财产号、条码号都是针对图书的操作。操作对象——实体可以作为微操作分组的依据,有利于形成微服务。此外,分解生成的很多微操作已经具备了潜在的复用可能,如数据导入、移交、批量查重,在各个业务流程中都有可能会用到;为图书分配财产号可能在期刊业务流程中也会有类似的操作;为图书分配条码号的操作对于给读者证件分配条码号也同样适用。分析微操作的各自特征,根据其操作的实体对象不同将其进行分组,并考虑其复用的可能性,如表1所示。

表1 微操作分组

形成了微操作分组以后,按照微服务分析方法中的步骤,应用SOA原则对操作分组进行改造和优化并生成微服务。这一过程是应用和落实面向服务设计范式基本原则的过程,也是SOA解决方案实施的重点和难点。在面向服务设计范式中规定微服务必须遵循标准化、独立自治、松散耦合、潜在可复用等原则。由于微服务在实现层面是基于开放标准的协议,因此标准化原则是微服务与生俱来的属性。前文中采访业务被划分为两个微操作分组,它们各自针对不同的实体,两个分组界限明确,因此独立自治的原则对于采访业务来说不难实现。松散耦合原则是微服务的重要特性,是指微服务之间即有关联又互相不受制约和影响。这需要以独立自治特性为基础,合理设计微服务交互接口来实现。潜在可复用性则需要适当抽象微操作,让微操作更加具备普适性,从而增加重复利用的可能。

先来分析针对批量数据的操作分组。微操作在优化时应尽量避免针对某一特定对象的特定操作。微操作的抽象性越强,则微服务的复用可能性越大。第一分组中的征订数据导入操作,本来是针对征订数据的专门操作。而在实际应用中,导入各类数据的操作区别不会很大,具备通用可能性。因此该操作可以抽象为更一般的批量数据导入操作。同时分组中的移交数据操作就是在不同的微服务之间转移数据的操作。它必须完成两个动作,分别是数据导入和数据导出。因此这两个微操作事实上都是针对批量数据的转移动作,转移包括导入和导出数据。把两个微操作合并,归纳为更加通用的数据批量转移操作。合并后的微操作抽象性很高,数据对象普适性也很高,因此其潜在复用的可能性很大。再看分组中的将数据从Marc,dbf,xls,mdb等格式转变为定长文本的操作,可改为将若干格式的数据转换为定长文本的操作,命名为数据格式转换。前文提到的订前批查重和订后批查重操作可以合并为数据批量查重操作。数据的验收并催缺可分为数据验收和催缺通知两步操作。数据验收是核对图书和数据是否吻合,可作为独立的微操作,这一微操作和业务相关度较高,复用可能性不大,在此不做优化。而催缺操作与批量数据对象没有必然的联系,不适合放在数据处理服务中,但催缺操作本身也具有复用性,因此考虑将其单列成微服务,暂命名为通知服务。综上所述,针对数据的操作分组演化成两个微服务——批量数据处理服务和通知服务,如图2所示。

图2 针对数据的操作分组生成微服务

再分析针对图书的操作分组。其中的订购操作实现对于征订目录的轮询并获取图书信息。可以优化为轮询新数据和发送新数据通知两个操作,单列为微服务。由于轮询和通知与前面设计的通知服务中的催缺操作在功能上有相近之处,为了避免系统产生过多微服务且职能划分不明,可将相似的服务合并,形成轮询通知服务。该微服务包含三个微操作:催缺、轮询和发送通知。分组中分配财产号和条码号的操作,在业务系统很多流程中都有被重复使用的可能,因此单列为新的微服务。由于无论分配怎样的号码,对于系统本身来说,其操作都很相似,所以把新的微服务优化为分配号码及代码服务,针对抽象的操作对象。针对图书的操作分组演化为两个微服务,如图3所示。

图3 针对图书的操作分组生成微服务

经过上面的分析,由两个微操作分组产生了三个微服务。另外还有一个很重要的操作是各类代码与数据库的交互。这一操作在任何业务流程中都会被使用。因此,单独封装为数据交互微服务适用于任何程序和数据表之间的连接和增、删、改操作。操作对象的控制由微服务给出的标准交互接口来实现。综上所述,根据对采访业务的分析,本文应用SOA分析方法共设计出四个SOA采访业务微服务,分别是批量数据处理服务、分配号码及代码服务、轮询通知服务和数据交互服务。

3 构建促进复用的采访微服务模型

实现微服务模型的关键在于怎样在系统中将每个微服务连接起来,微服务遵循怎样的机制组配并形成系统功能。微服务的组配需要体现SOA的松散耦合原则,合则完成业务任务,分则独立自治。组配关系还可以因地制宜,随需求而更改。微服务的拆分与重组可以实现微服务的高度复用,并产生新的系统功能。可见微服务之间组配机制的制定是完成建模的关键步骤。

3.1 实现微服务的自由组配机制

微服务的组配机制需要在代码层面最终实现标准化、独立自治、松散耦合等SOA基本原则。微服务遵循的Web Service开放标准协议包括:XML schema、WSDL(Web Service Definition Language)、SOAP(Simple Object Access Protocol)和UDDI(Universal Description,Discovery,and Integration)。

微服务组配和交互依赖的是服务所要处理的消息,因此,消息的定义表现得尤为重要。消息的传递跨越了多个Web Service协议。我们需要在WSDL types域中形式化地定义消息结构,同时在SOAP封装的Body部分携带有效负载数据。这些层次的消息传递事实上都可以依赖于XSD schema来完成。一个单独的schema可以嵌入到types结构中,也能够成为WSDL的定义基础。所有的微服务都可以接收或传输schema定义的文件。因此定义好标准化schema是微服务实现的关键。

以采访服务中的批量数据转移微服务为例,微操作需要交换的是批量数据(batch data)。批量数据的交互有两个复杂类型:一个是批量数据接收的请求消息所要求的搜索准则;另一个是服务返回的查询结果。这两个类型组成了batchdata.xsd schema文件。Batchdata schema提供complexType结构,用于建立获取和释放批量数据操作的表示。

示例1:

示例1中batchdata.xsd文件中派生出的schema并不表示BatchData实体,而只表示该服务交互的数据类型。为了提高可复用性,允许单独维护WSDL的每个schema文件,可以用XSD schema的语句import把两个schema的内容置入批量数据服务WSDL的types结构中。schema导入以后展开的WSDL types结构如示例2所示。

示例2:

上面的示例是以批量数据转移微服务为例。事实上这样的方法同样适用于各个采访微服务。此类代码形式实现的微服务在交互时不会影响到服务内部的操作,每个微服务始终保持着独立自治的状态。

3.2 促进复用的采访微服务模型

微服务间的组配依赖于它们的交互接口。组配关系具有松散耦合式的特性,多个微服务组配产生微服务群,从而完成更加完整的功能任务。而微服务群的拆分和微服务间的重新组配都将会异常简便。这为微服务的重复利用打下了牢固的系统基础,从而体现了SOA系统的优势。基于微服务的自由组配机制,建立图书馆采访业务模型,如图4所示。

图4 图书馆采访业务微服务模型

图4中显示,在SOA模型中最上面的编排服务层有着与业务需求相似的编排服务,它们表示业务流程,并将微服务合理组配完成完整的业务任务。采访编排服务组配了四个微服务。其中分配号码代码服务和批量数据处理服务由于和业务相关度较高,因此存在于SOA业务层。而轮询通知服务和数据交互服务由于抽象程度更高,复用可能性更大,因此存在于SOA应用层。采访编排服务将微服务按照业务流程连接起来。每个微服务又存在着两两组配的关系。

模型中的微服务凭借它们之间的组配与合作完成了采访业务的流程功能。但它们的可用价值绝不仅限于此。“分配号码与代码”在图书馆系统中会有很多需求,图书需要分配条码号、财产号、分类号,用户需要分配证件号、条码号,甚至运用于用户的各种规则本质上也是代码的分配。因此,分配号码代码服务会多次在其他业务流程中被复用。同样“批量数据处理”在图书馆业务流程中的需求也很大,可以说整体图书馆的业务流程实质上就是批量数据的流动过程。该微服务不可避免地会与业务流程中其他微服务组配完成别的系统功能。

同样“轮询通知”和“数据交互”作为SOA应用层的服务其与业务的联系相对松散,普适性则更加明显。轮询通知可以用作与用户和数据商的各种交互,而数据交互则几乎参与了业务系统中的所有操作。如此高效的复用性和多层次的组配关系将大大提高代码使用率并节省系统开发成本。SOA系统将根本上解决代码冗余、重复开发的问题。不仅如此,它的开放性和可扩展性都具有传统系统设计难以与之相比的优势。运用SOA创建的图书馆采访业务系统将促进复用,鼓励二次开发,并延长系统生命周期,为满足用户需求,创新服务奠定牢固的系统基础。

4 结语

本文就图书馆采访业务进行深入研究,运用SOA分析方法,架构了促进复用的采访业务微服务模型。解决了现有采访业务存在的技术难题,使得有效代码可以重复利用,系统使用效率得到提高,并缩减了二次开发投入,延长了系统的生命周期。由此可以看出,SOA相对于图书馆业务系统来说,是一套行之有效的解决方案。笔者相信不仅采访业务如此,其他图书馆业务,如编目、流通、典藏、期刊等都可以应用SOA理论和方法进行重新设计和架构。由于各个业务之间的需求差异性很大,SOA分析方法在不同的应用中可能会作相应的调整,但总体思路仍然是SOA面向服务式的分析。运用SOA方法创建的图书馆业务系统与现有系统相比,不仅可以促进复用节约成本,还会具有随需应变、支持无缝整合等更多有待发掘的优越特性。完成图书馆整体业务系统SOA式的蜕变需要大量的人力、物力和财力的投入,这有待图书馆人达成共识并共同努力。

收稿日期:2010-08-27

标签:;  ;  ;  

利用SOA构建图书馆采访微服务模型促进重用_soa论文
下载Doc文档

猜你喜欢