zoukankan      html  css  js  c++  java
  • SOA面向服务的架构

    面向服务的体系架构

    摘要: SOA 的需要来源于需要使业务 IT 系统变得更加灵活,以适应业务中的改变。通过允许强定义的关系和依然灵活的特定实现,IT 系统既可以利用现有系统的功能,又可以准备在以后做一些改变来满足它们之间交互的需要。在软件开发的过程中我们都知道为了减低程序的耦合性,可以采用函数的方式,上层在需要时只需要调用下层函数,让下层函数去提供服务即可,系统只需要知道一个函数名即可,通过函数调用就能实现相应的功能。再往大发展就是模块的概念了,其实成熟的模块也就是我们所调用的类库了,大家也都使用过类库了,都仅仅是一条引入语句即可,使用时直接调用类库中的方法名,最多也就是关注于方法中需要哪些类型,根本不必在意到底是怎么实现的。总以为SOA多么神秘,其实这就是SOA思想的体现了。SOA本质上是面向服务的思想在企业 IT 架构方面的应用,其核心特征就是以松耦合、粗粒度的服务单元来构建软件。

    关键字:1)SOA (2)松耦合、粗粒度 (3)面向服务(4)IT架构

    Service Oriented Architecture

    Gaoyu

    Shijiazhuang Tiedao University

    Absrtact: the need for SOA comes from the need to make business IT systems more flexible to adapt to changes in the business. By allowing strong defined relationships and specific implementations that are still flexible, IT systems can take advantage of existing system functionality and be prepared to make changes later to meet their interaction needs. In the process of software development, we all know that in order to reduce the coupling of the program, we can use the function mode. The upper layer only needs to call the lower layer functions when necessary, so that the lower layer functions can provide services. The system only needs to know a function name, and the corresponding functions can be realized through function call. Further development is the concept of module. In fact, the mature module is the class library we call. Everyone has also used the class library. It's just an introduction statement. When using it, directly call the method name in the class library. At most, it focuses on the types needed in the method, and doesn't care how to implement it at all. I always think SOA is so mysterious. In fact, this is the embodiment of SOA. SOA is essentially the application of service-oriented idea in enterprise IT architecture. Its core feature is to build software with loosely coupled, coarse-grained service units.

    Keywords: (1) SOA (2) loose coupling, coarse granularity (3) service oriented (4) it architecture

     

    引言:SOA作为软件开发过程中一个重要的开发框架,在IT实际项目开发过程中非常重要,SOA将能够帮助软件工程师们站在一个新的高度理解企业级架构中的各种组件的开发、部署形式,它将帮助企业系统架构者以更迅速、更可靠、更具重用性架构整个业务系统。较之以往,以SOA架构的系统能够更加从容地面对业务的急剧变化,事实上SOA 的实施就是以程序员的视角把公司的业务拆分成一个个服务标准件,然后再选择合适的标准件“组装”成各种应用软件系统。有了一定规模的服务标准件库后,“组装”应用系统就显得异常简单快捷了。一个公司的软件应用系统越多、越复杂,实施 SOA 就越有价值,因为每个服务标准件得到重复使用的概率就越高。下面是我对SOA的一下理解,以及通过一个曾经接触过的项目应用SOA进行分析。

    一.SOA的定义以及主要特征

    1.SOA的定义

    面向服务的体系结构(service-oriented architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台,操作系统和编程语言.它使得构建在各种这样系统中的服务可以以一种统一和通用的方式进行交互.它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。

    2. SOA的特征

    SOA的实施具有几个鲜明的基本特征:可从企业外部访问随时可用粗粒度的服务接口分级松散耦合可重用的服务服务接口设计管理标准化的服务接口支持各种消息模式精确定义的服务契约

    SOA服务具有平台独立的自我描述XML文档。Web服务描述语言WSDLWeb Services Description Language)是用于描述服务的标准语言。

    SOA 服务用消息进行通信,该消息通常使用XML Schema来定义(也叫做XSDXML Schema Definition)。消费者和提供者或消费者和服务之间的通信多见于不知道提供者的环境中。服务间的通讯也可以看作企业内部处理的关键商业文档。

    在一个企业内部,SOA服务通过一个扮演目录列表(directory listing)角色的登记处(Registry)来进行维护。应用程序在登记处(Registry)寻找并调用某项服务。统一描述,定义和集成(UDDIUniversal DescriptionDefinitionand Integration)是服务登记的标准。

    二.实例分析

    在简要介绍面向服务架构的软件开发理论的基础上,给出了一个基于SOA架构的系统开发流程实例.下面以一个医疗软件的实例对此进行分析。

    1.项目背景

    在此系统的项目背景是,上级医疗主管部门为了能够统一的监管医院,促进各个医院的合理用药、降低医疗事故率,特制定了一个医药管理系统,建立了自己的用药规则库,为了更好应用及监管各个医院的用药系统,所以必须与各个医院的药物监管系统,相连,然而由于各个医院所主要面向的患者不同(例如有肿瘤医院、骨科医院、妇幼保健院等等),各个医院有着自己的用药规则系统,且大不相同,这就使得药品的种类繁多,用药的规则繁多,药品的用药规则还需要根据时间的被修改。这就需要由主管部门设计统一的标准,避免各个医院重复的录入用药标准。但是如果要将所有的医院系统都整合到主管系统中会导致重复性增加,主管系统可能会重复开发多段的录入程序,所以这就需要引入面向服务的架构思想对系统进行设计了。

    2.项目分析

    对于各个医院自己的医疗系统还需要正常的运作,但是需要利用接口,对上层监管部门的系统进行服务。即,当医生进行开药时要受到两个系统的监管,首先要通过自己医院常用的用药规则的监管,然后通过向上层提供服务,有上层的监管系统对比成功之后才能完成开药。这要通过这种面相服务的方式,既重用了医院原有的系统,也将服务整合到了主管部门的监管系统中。这样就将不同的系统连接在了一起,避免了独立的使用两套系统,简化了两个系统的对比操作,降低两个系统之间的耦合,使得通过SOA服务就能够建立二者的连接

    3.如何使用SOA

    在此系统中主要涉及4个角色,医生、院长、管理员和上级主管部门,在此上级的主管部门是服务的提供者,由他指定统一的用药规则,向各个医院提供用药指导的服务;管理员是服务的注册者:有管理员对授予各个角色不同的服务权限,系统再根据权限提供不同的服务(医生查看用药的规则,院长产看用药记录,多条件查询),并且及时的更新用药规则库。医生和院长在此就是服务的查看者,由管理员对其进行不同的注册之后,医生和院长就可根据权限查看自己所能得到的服务。在此服务中采用的是WSDL服务标准,通过web服务端,传递消息,在主系统中调用相关的方法,然后将消息返回,进行判断并进行后期的才做,其次还需要用到xml的消息传输技术定义了松散耦合的协议堆栈,该堆栈由可靠传输 (WS-Reliability) 和 安全 (WS-Security) 的各个规范组成。

    此系统中的总线(ESB)就是主管系统的服务处理机制,他可以管理底层的用药规则的标准数据库,可以有管理员进行注册,由规定的人员,根据角色的不同查看不同都信息,可以在接收到服务请求后,及时准确的将结果信息反馈给请求者,另外,还可以对请求者以及请求信息进行监控、记录,提供事件的触发及时的做出响应。

    当然在系统设计时候的业务流程至关重要,在此系统中流程较为简单,各个系统角色用户之间没有直接的交互,几乎都是通过调用系统的服务完成的,对于医生来说,主要就是开药流程,首先医生要根据对病人的病情的分析,确定用药,然后就需要通过医院自己的系统根据本地的用药规则进行审查,通过对比无误后方可向主管部门的用药监管系统进行服务的请求,然后由接收服务的内容,接收服务内容后判断是否通过,通过之后即可完成开药,打印注意事项。倘若其中一个环节出现错误都无法实现。

    为了方便服务的请求者系统还需要根据角色的不同提供各自统一的界面,当请求查看服务时,可以根据自己注册的信息登录,系统会自动根据角色的不同展现不同的界面。既保证服务的安全性,也为请求者提供方便快捷的服务。

    四.总结

    SOA编程是软件软件实际开发过程中一个极其重要的开发思想,将复杂的系统划分为一个一个小的服务,对于需要用到的业务功能来说只需要调用相关的服务即可,并不用担心起具体的实现,这样无论是对业务子系统进行更改,还是对总系统的更改都减低了他们之间的耦合度了实现起来变得相对容易了。这让我想到了主任一直向我们提的分而治之的思想,一个模块只实现一个特定的功能,我想这就是一个SOA开发思想的最简单体现了

     

    参考文献

     

    [1] 百度百科面向服务的架构(SOA)

    [2] C语言中文网SOA(面向服务的架构)是什么

  • 相关阅读:
    IP地址分类
    Python 加密 shellcode 免杀
    java翻译到mono C#实现系列(2) mono实现GridView 横向滚动
    Hello Jexus(转并修改)
    @using (Html.BeginForm())和@{Html.BeginForm();}@{Html.EndForm();}对比
    FindLine把多行查找改为多行替换
    java翻译到mono C#实现系列(1) 重写返回键按下的事件
    mono 的System.Data.SqlClient小记录
    架构文件夹说明
    Xamarin Mono For Android 4.6.07004看不到新建android
  • 原文地址:https://www.cnblogs.com/1gaoyu/p/13050922.html
Copyright © 2011-2022 走看看