基于质量需求的SOA设计模式选择方法∗
2020-07-13韩宛彤何江波黄继红
韩宛彤 何江波 赵 恒 黄继红
(中国船舶重工集团公司第七〇九研究所 武汉 430000)
1 引言
软件设计的目标是满足系统的功能性需求和质量需求(非功能性需求)。功能性需求是软件系统将要实现的功能和提供的服务,质量需求是软件产品为满足用户业务需求而必须具有且除功能性需求以外的特性。相对于满足功能性需求的软件设计,针对质量需求的软件设计往往更困难,如何设计出高质量的软件系统是软件设计师所面临的一个重要问题。
软件设计模式(Design Pattern),又称设计模式,是一套被反复使用、经过分类编目的、代码设计经验的总结。使用设计模式可提高软件复用性、代码易读性,保证代码的可靠性。
面向服务的体系结构(Service Oriented Archi⁃tecture,SOA)是一种特殊的软件体系结构也是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和合约联系起来。接口是采用中立的方式进行定义的,它独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。SOA具有接口中立、松耦合等特点,这些特性使得系统更易维护、具有更高的可用性和更好的伸缩性。因此,SOA技术得到了广泛应用。随之SOA设计模式也越来越多。软件设计师如何更好地应用SOA设计模式设计出满足系统质量需求的软件系统,提高软件设计效率和质量是本文的研究重点。
本文首先对软件质量需求的类型进行了综合分析;对36种SOA软件设计模式按所能满足的质量需求进行了分类,提出一种基于软件质量需求的SOA设计模式应用方法,通过一个资源管理中心系统的软件体系结构设计实例,说明了该方法的有效性。
2 基于质量需求的SOA设计模式分类
软件质量需求通常用来描述软件系统功能性需求之外的,诸如性能、可靠性、扩展性等的软件系统所要满足的质量属性[1]。ANSI/IEEE Std 729-1983《软件工程术语的IEEE标准术语表》(Glossary of software engineering terminology)定义软件质量为“与软件产品满足规定的和隐含的需求的能力有关的特征或特征的全体”。M.J.Fisher教授定义软件质量为“所有描述计算机软件优秀程度的特性的组合”。软件质量是各种特性的复杂组合,随着应用和用户提出的质量要求的不同而不同,软件质量模型就是这些质量特性的组合。ISO 25010软件质量模型[2]描述了功能性、安全性、互用性、可靠性、可用性、效率、可维护性和可移植性这8个质量特性以及它们所包含的36个质量子特性,如图1。
一般而言,一个模式有四个基本要素[3]:
1)模式名称(pattern name):一个助记名,它用一两个词来描述模式的问题、解决方案和效果;
2)问题(problem):描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件;
3)解决方案(solution):描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题;
4)效果(consequences):描述了模式应用的效果及使用模式应权衡的问题,它对于评价设计选择和理解使用模式的代价及好处具有重要意义。模式效果中还包括它对软件质量需求的影响。
SOA设计模式关注于与面向服务计算相关的策略目标,是经过实践证明具有有效性和可复用性的软件体系结构设计经验,以开发和交付高品质的软件系统为根本目的。
本文根据每种SOA设计模式的设计目标(即问题)、解决方案及效果,对常用的36种SOA设计模式的软件质量需求的满足能力进行了分析,根据分析结果对它们进行了分类及并给出能表示它们在系统运行时综合能力的能力系数(取值范围为0到1),如表1,以辅助SOA系统架构师根据系统的质量需求来选择适合采用的SOA设计模式。
以表1中可靠性分类下的企业服务总线模式和组合自治模式为例说明本文对SOA设计模式满足质量需求能力和能力系数分析的方法。企业服务总线模式的问题是如何使消费者能够调用供应者提供的服务,解决方案是使用总线基础服务架构、集成不同的平台和编程语言,效果是可以提供互操作性、数据格式转换和路由,可以保证数据传输的可靠性和可扩展性。企业服务总线模式是SOA设计模式的基础设施,使用企业服务总线对系统的负面影响很小,并且可以提供很多功能,在能力系数评分时,将企业服务总线评为满分1分,表示一种SOA设计模式的最理想状态。将其他SOA设计模式与企业服务总线在对系统的负面影响上进行比较,并给出相应的分数。组合自治模式的问题是组合控制器服务在委托组合服务处理任务时会失去自治权,其中一些服务可以在多个组合中共享。解决方案是通过将组合的所有参与者进行分离使组合整体的自治性最大化。效果是组合中的服务和任务服务可以一起在隔离的环境中冗余的实现,满足了可靠性,对系统的负面影响是会增加基础设施成本和管理的责任。组合自治与企业服务总线相比会增加系统的负担,但不会使系统处于不安全的状态,也可以很好地满足可靠性,所以给组合自治的能力系数评分为0.9。
对于其他模式的满足质量需求的能力和能力系数的分析以此类推,可以得出每一种SOA所能满足的质量需求和能力系数,经过总结发现,常用的36种SOA设计模式可以分别满足可靠性、安全性、可复用性和可扩展性这四种质量需求。表1中的分类结果是下文提出的基于质量需求的SOA设计模式选择方法的主要依据。
3 基于质量需求的SOA设计模式选择
系统架构师在进行软件设计时,应首先明确软件系统需要满足的功能性需求,然后根据软件系统的功能性需求,分析出这些功能所对应需要满足的质量需求,最后根据质量需求和功能性需求选择合适的SOA设计模式。通常单一的SOA设计模式不可能完全满足软件系统设计需求的多样性和复杂性,系统架构师需要选择多种SOA设计模式进行组合设计。然而并不是所有的SOA设计模式都可以组合在一起,有些SOA设计模式在功能上互补、结构上相似,则可以组合在一起,而有些SOA设计模式基本属性相斥,则不能组合在一起。本文根据文献[5]中提出的SOA设计模式相关关系,总结了表1中提到的36种SOA设计模式的相关关系得到表2。系统架构师可以根据软件系统的实际设计需求进行组合。
系统架构师在表1中查找能满足所需质量需求的SOA设计模式,在能满足同一质量需求的所有SOA设计模式中,根据这些SOA设计模式的设计目标(即问题)、解决方案及效果选择出能够满足该质量需求所对应的功能性需求的SOA设计模式。如遇到有多种SOA设计模式能同时满足相同的功能性需求和质量需求的情况,本文建议系统架构师选择能力系数较大的模式,因为能力系数越大的模式对系统的消极影响越小。系统架构师在遇到需要选择多种SOA设计模式进行组合满足软件系统设计需求的情况时,可以根据在表2中依据相关关系查找SOA设计模式进行组合来满足软件系统的功能性需求和对应的质量需求。通过上述方法辅助软件架构师设计SOA软件系统,提高开发效率和软件设计质量。
本文所提及的只是部分常用的SOA设计模式,没有覆盖全部SOA设计模式。随着SOA技术的发展,SOA设计模式也越来越多,系统架构师可以按照本文提出的方法对其它SOA设计模式进行分析和研究,将结果添加到本文提出的表1和表2中,从而更好地帮助软件架构师提高软件设计效率,降低软件设计的难度,更好地设计出可以满足软件设计需求多样性和复杂性的软件系统。
4 资源管理服务中心系统案例研究
本节通过一个资源管理服务中心系统的软件体系结构设计实例来说明该方法的应用。资源管理服务中心系统是一个可以为用户提供资源实时共享的服务平台。作为一个服务平台需要满足的功能点非常之多,在此仅对用户发布、订阅资源功能进行功能性需求分析和质量需求分析,并使用本文所提出方法进行设计。
用户在平台发布、订阅资源,平台应能接收和发送不同数据格式的资源,以保证用户发出的请求都能被可靠地传递和处理,并且需要将请求的处理结果反馈给用户;需要平台应能快速的处理多个用户的请求;平台应能对用户身份进行验证,只有身份安全的用户才能发布和订阅资源,以保证数据的安全性;平台在增加功能时应能保证不对原有架构和代码进行修改。因此,在实现这些功能时需要考虑系统的可靠性、安全性和可扩展性等质量需求。
软件架构师在进行软件设计时,首先在表1查找能够同时满足尽可能多质量需求、且能力系数大的SOA设计模式。在本例中,企业服务总线模式能同时满足可靠性和可扩展性,因此首选企业服务总线模式。
为保证消息的可靠传输,在表2中选择与企业服务总线模式相关的可信消息模式,通过引入中间可信机制和将消息存储到持久存储库中,以实现消息即使通过不可靠的传递协议进行传递或是在不可靠的环境中进行传递也能保证消息进行可靠的传递。同理,为实现快速处理多个用户的请求功能,可选择异步队列模式,从而达到提高系统吞吐量的目的。
为保证数据的安全性,在安全性类别中选择直接认证模式验证消费者的身份凭据,只有安全身份才能访问和传输数据的功能,防止服务被攻击和破坏,保证了数据的安全性。
通过将企业服务总线、可信消息模式、异步队列模式和直接认证模式四种SOA设计模式组合即完成资源管理服务中心系统的架构设计,如图2所示。
图2 资源管理中心系统
5 结语
本文提出的基于质量需求选择SOA设计模式的方法旨在辅助系统架构师快速高效地使用SOA设计模式进行SOA软件系统设计。通过一个资源管理服务中心系统的软件设计实例说明了该方法的有效性。虽然本文只给出的常用的36种SOA设计模式的选择方法,但该方法具有一定的通用性,不局限于SOA设计模式,还可扩展到其它类型的软件设计模式。下一步工作是使用知识图谱的工具构建可视化图谱来展示SOA设计模式更多的属性和关系,为系统架构师提供更全面的帮助。