软件工程原理与实践(硕士)课件 6 软件架构设计_第1页
软件工程原理与实践(硕士)课件 6 软件架构设计_第2页
软件工程原理与实践(硕士)课件 6 软件架构设计_第3页
软件工程原理与实践(硕士)课件 6 软件架构设计_第4页
软件工程原理与实践(硕士)课件 6 软件架构设计_第5页
已阅读5页,还剩113页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高级软件工程

SoftwareEngineering软件架构设计软件架构设计软件架构是一系列重要决策的集合,这些决策关于:软件系统的组织;组成系统的结构元素和它们之间的接口,以及当这些元素相互协作时所体现的行为;如何组合这些些元素,使它们逐渐合成为更大的子系统;架构风格;这些元素以及它们的接口、协作和组合。Architecturedecisionsarethemostfundamentaldecisions,andchangingthemwillhavesignificanteffects.ArchitectureDesignImplementationCode2软件架构的主要建模方法文本语言建模方法基于非规范的图形表示的建模方法该图形表示不具有严格的标准,较为随意,具有一定方便交流的作用。如:盒线图(Box-LineDiagram)、PowerPoint风格图形等基于UML/SysML的建模方法

半形式化方法,UML/SysML

作为一个工业化标准的软件建模语言,支持多角度、多层次、多方面的建模需求,支持扩展,并有强大的工具支持基于AADL的建模方法半形式化方法,AADL是一个实时嵌入式软件系统的架构建模语言,适用于航天航空、汽车、自动化、医疗、核能等领域基于形式化的建模方法例如Petri-Net3软件架构设计的内容架构设计的内容:设计软件架构的多个视图物理视图、逻辑视图、进程视图、开发视图、技术视图、数据视图等选择软件质量属性的设计策略性能、可靠性、安全性、可移植性、可扩展性等架构设计的目标:使得软件系统在架构层面的设计上满足拟建软件的功能性和非功能性需求402-质量因素的架构设计战术01-软件架构的多个视图逻辑视图部署视图进程视图开发视图技术视图数据视图03-软件架构的质量5SoftwareArchitecture:The“4+1View”ModelProcessViewDeploymentViewLogicalViewUse-CaseViewImplementationViewEnd-userFunctionalityProgrammers

Softwaremanagement

PerformanceScalabilityThroughput

SystemintegratorsSystemtopology

Delivery,installationcommunicationSystemengineeringAnalysts/DesignersStructure

6LogicalView(逻辑视图)ProcessViewDeploymentViewLogicalViewUse-CaseViewImplementationViewEnd-userFunctionalityProgrammers

Softwaremanagement

PerformanceScalabilityThroughput

SystemintegratorsSystemtopology

Delivery,installationcommunicationSystemengineeringAnalysts/DesignersStructure

7Example1:Logicalview缺陷预测系统8基于非规范的图形表示的建模方法Example2:LogicalviewMiddleware<<layer>>BaseReuseglobalApplication<<layer>>BusinessServices<<layer>>NecessarybecausetheApplicationLayermusthaveaccesstothecoredistributionmechanismsprovidedwithJavaRMI.选课系统9基于UML的建模方法SecurityGUIFrameworkSecureInterfacesApplication<<layer>>BusinessServices<<layer>><<layer>>Application<<layer>>BusinessServicesExample:ApplicationLayerUniversityArtifactsRegistrationExternalSystemInterfaces10Middleware<<layer>>BusinessServices<<layer>>Example:BusinessServicesLayerContextjava.sqlcom.odi<<layer>>

MiddlewareBillingSystem<<subsystem>>CourseCatalogSystem<<subsystem>>ExternalSystemInterfacesUniversityArtifactsObjectStoreSupport<<layer>>

BusinessServicesGUIFrameworkSecureInterfacesSecurity<<subsystem>>SecurityManager11Example3:Logicalview12基于AADL的建模方法Example:飞行控制系统AADL架构13如何才能设计出好的软件架构?14复用现有的成功设计方案──设计模式(DesignPattern)的复用!软件设计模式1987年,模式的思想被引入软件工程方法学中。1995年,以ErichGamma为首的四人组(GangofFour,GoF)归纳发表了23种在软件开发中使用频率较高的设计模式,出版了《DesignPatterns:ElementsofReusableObject-OrientedSoftware》一书。软件设计的模式分类架构风格Architecturalstyle例如分层架构风格、MVC风格设计模式Designpattern例如Facade模式、工厂模式、单例模式编程惯用Idiom例如Java多线程编程模式15基于逻辑架构风格进行逻辑视图的设计表现层分离风格:MVC数据流风格(Dataflow):批处理序列、管道-过滤器风格(Pipe-and-Filter)调用/返回风格:主程序/子程序、面向对象风格(ADT)、多层(Layer)分布计算风格:多层(Tier)、代理、C/S、P2P独立构件风格:事件响应、消息总线、服务和微服务虚拟机风格:解释器、基于规则的系统仓库风格:数据库系统、超文本系统、黑板系统自适应风格:微内核、反射、控制反馈……161)MVC

模型Model:管理系统中存储的数据和业务规则,并执行相应的计算功能。视图View:根据模型生成提供给用户的交互界面,不同的视图可以对相同的数据产生不同的界面。控制器Control:接收用户输入,通过调用模型获得响应,并通知视图进行用户界面的更新。172)管道和过滤器(PipesandFilters)Inthisstyle,eachcomponenthasasetofinputsandasetofoutputs.Acomponentreadsstreamsofdataonitsinputsandproducesstreamsofdataonitsoutput.18举例Linux的Shell程序可以看做是典型的管道与过滤器架构的例子例如下面的Shell脚本:$catTestResults|sort|grepGood

会将TestResults文件的文本进行排序,然后找出其中包含单词Good的行,并显出在屏幕上。Shell命令cat、sort和grep依次执行,就构成了一个管道-过滤器架构。19举例203)面向对象风格这种风格建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。这种风格的构件是对象,或者说是抽象数据类型的实例。对象是一种被称作管理者的构件,因为它负责保持资源的完整性。对象是通过函数和过程的调用来交互的。214)层次架构(layeredarchitecture)风格GeneralfunctionalitySpecificfunctionalityDistinctapplicationsubsystemsthatmakeupanapplication—containsthevalueaddingsoftwaredevelopedbytheorganization.Businessspecific—containsanumberofreusablesubsystemsspecifictothetypeofbusiness.Middleware—offerssubsystemsforutilityclassesandplatform-independentservicesfordistributedobjectcomputinginheterogeneousenvironmentsandsoon.Systemsoftware—containsthesoftwarefortheactualinfrastructuresuchasoperatingsystems,interfacestospecifichardware,devicedrivers,andsoon.ApplicationSubsystemsBusiness-SpecificMiddlewareSystemSoftware上一层依赖下一层22不断提取共性!沉淀成为一层软件保持应用软件的复杂性相对稳定应用软件应用软件操作系统DBMS操作系统应用软件中间件操作系统应用软件DBMS中间件23中间件的分类1)数据访问中间件允许应用程序和本地或者异地的数据库进行通信,并提供一系列的应用程序接口(如ODBC、JDBC等)。该类中间件技术上最成熟,但局限于与数据库相关的应用。2)消息中间件可以屏蔽平台和协议上的差异进行远程通信,实现应用程序之间的协同,如IBM的MQSeries、BEA的MessageQ、SUN的JMS和微软的MSMQ等,其优点在于提供高可靠的同步和异步通信,缺点在于不同的消息中间件产品之间不能互操作。3)远程过程调用RPC中间件解决了平台异构的问题,但编程复杂且不支持异步操作。24中间件的分类(2)4)事务中间件是在分布、异构环境下提供保证事务完整性和数据完整性的一种平台,如BEA的TUXEDO、IBM的CICS、微软的MTS。其优势在于对关键业务的支持,但机制复杂、对用户要求较高。5)分布对象中间件在分布、异构的网络计算环境中,可以将各种分布对象有机地结合在一起,完成系统的快速集成。主流标准有Microsoft的DNA/COM+、OMG的OMA/CORBA、Sun的J2EE/EJB。Weblogic,Websphere,Jboss,.Net等应用服务器都包含了分布对象中间件,也有如Orbix、HPORB等独立产品。6)分布式服务中间件通过网络对松散耦合的业务服务进行分布式部署、组合和使用。Web服务中间件,其标准是SOA,应用服务器都包含了Web服务中间件,也有AXIS2、HPWebServicesPlatform等独立产品。微服务中间件,例如Dubbo。25层次架构实例26数字出纳员ATM出纳员付款开发票应用系统现金管理帐户管理发票管理特定业务银行客户管理ApplicationServerHPORBPlus中间件NTWorkstationMSSQLServer系统软件5)3Tiers表示层:负责向用户呈现界面,并接收用户请求发送给业务逻辑层;业务逻辑层:负责执行业务逻辑以处理用户请求,并调用数据访问层提供的持久性操作;数据访问层:负责执行数据库持久性操作。27表示层业务逻辑层数据访问层数据库举例286)基于事件的隐式调用构件不直接调用另一个构件,而是触发或广播一个或多个事件。系统中的其它构件订阅一个或多个事件,当一个事件被触发,系统自动调用订阅这个事件的所有构件,这样,一个事件的触发就导致了另一构件的调用。这种风格的主要特点是事件的触发者并不知道哪些构件会被这些事件影响。29举例IDE:编辑器和变量监视器可以登记相应Debugger的断点事件。当Debugger在断点处停下时,它声明该事件,由系统自动调用处理程序,如编辑器可以卷屏到断点,变量监视器刷新变量数值。而Debugger本身只声明事件,并不关心哪些过程会启动,也不关心这些过程做什么处理。307)消息总线系统的连接件,负责消息的分派、传递和过滤以及处理结果的返回。各个构件(或系统、服务等)挂在消息总线上,向总线订阅感兴趣的消息类型。构件根据需要发布消息,由消息总线把该消息分派到系统中所有对此感兴趣的消息类型,消息是构件之间通信的唯一方式。31举例328)基于容器的微服务风格33服务架构风格服务的抽象性(基于接口的编程)服务的自治性(实现分布式应用)服务间的松耦合式绑定,基于消息进行通信单体架构VS微服务架构MonolithicapplicationVs.

Microservices34举例:单体架构(网络订餐系统)

35将应用程序构建为单个可执行和可部署组件随着业务的扩张,代码仓库急剧膨胀,构建和部署变慢,敏捷开发和快速交付很难实现。举例:微服务架构(网络订餐系统)

36通过API网关对来自移动应用的服务请求进行路由围绕业务能力组织服务服务数据私有基于轻量级通信协议的服务APISpringCloud微服务开发相关组件

37Zuul为外部的客户端应用访问后台服务提供了统一的接入点,实现了反向代理和服务端负载均衡,同时还实现了认证、鉴权、限流等网关管理功能Eureka服务端以服务的形式提供服务注册和发现功能,客户端以一种透明的方式为每个服务实例实现与Eureka服务端的交互,包括服务注册、心跳消息发送以及服务注册信息的拉取和本地缓存Ribbon实现了客户端负载均衡,提供了随机选择、轮询等不同的负载均衡算法,同时还实现了服务调用超时和重试等机制Hystrix为服务调用方实现了服务调用的熔断降级功能SpringCloudSecurityOAuth2为客户端提供认证和授权服务SpringCloudConfig为微服务应用提供了统一的配置数据管理服务微服务架构风格微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,通过轻量的通讯机制联系,经常是基于HTTP资源API,这些服务基于业务能力构建,能够通过自动化部署方式独立部署,这些服务自己有一些小型集中化管理,可以是使用不同的编程语言编写。和SOA不同:SOA倡导粗粒度服务,而它是细粒度服务。同时,微服务采用“智能终端和哑管道”,它们拥有自己的领域逻辑,以类似Unix管道过滤方式运行,接受到一个请求,使用相应的逻辑,产生一个响应,这些都可以使用RESTful方式编排,而不是使用复杂的协议如WS-Choreography或BPEL或ESB指挥控制。和构件不同:它从内存方法调用转换到RPC远程方法调用,每个服务运行在自己的进程。优点:易于敏捷的开发、更新与部署,高度可扩展和可靠性38容器微服务的管理问题:因为服务通常部署在多个主机上,很难持续跟踪指定服务究竟运行在某台主机上。因为微服务架构使用的主机容量往往小于Monolithic架构,随着微服务架构不停的横向扩展,主机数量将以一个非常恐怖的速度增长。解决方案:容器不同容器共享相同的内核,容器的共享和发布非常简单容器之间进行了完全的隔离,简易了不同语言开发的微服务代码部署例如:Docker等39微服务容器镜像构建及实例创建

40镜像描述(如Docker容器的Dockerfile)指定了基础容器镜像(其中包含基础运行环境,例如Java运行时环境JRE),同时描述了一些软件安装和容器配置指令及容器实例创建时的初始化脚本在运行阶段,每台虚拟机实例上的容器运行时根据指令从容器镜像仓库中拉去不同服务的容器镜像(一般还需要指定版本)然后创建相应的容器实例(其中运行着对应的服务实例)仓库中可以包含同一服务的不同版本的镜像B容器编排与集群管理

微服务的容器化部署经常需要容器编排和集群管理工具的支持服务之间经常会存在依赖关系,同时服务还有可能依赖于消息代理和数据库等基础服务,因此仅仅以单个服务为单位进行实例创建和管理经常是不够的需要将一组相关的容器作为一个整体进行编排和管理容器编排与集群管理系统DockerCompose:可以在单个服务器或主机上创建并管理多个容器DockerSwarm:可以在多个服务器或主机上创建并管理容器集群Kubernetes:使用最广泛的大规模Docker编排和集群管理工具419)仓库风格和黑板风格仓库风格是以数据为中心的系统架构,它细分为:数据库系统以数据库为核心,各个构件存取数据。超文本系统用超链接的方法,将各种不同空间的文字、图片等信息组织在一起的网状文本黑板系统

为参与问题解决的知识源提供了共享的数据表示,这些数据表示是与应用相关的。在黑板系统中,控制流是由黑板数据的状态决定的,而并非按照某个固定的顺序执行。42黑板系统黑板系统专门针对没有确定的解决方法的问题,例如信号处理和模式识别,它通过多个知识源的协作来解决问题,而这种协作完全是状态驱动的,因此各个知识源具有公平的机会获取并更新黑板中的状态数据。黑板系统主要由三部分组成:知识源。知识源中包含独立的、与应用程序相关的知识,知识源之间不直接进行通讯,它们之间的交互只通过黑板来完成。黑板数据结构。黑板数据是按照与应用程序相关的层次来组织的解决问题的数据,知识源通过不断地改变黑板数据来解决问题。控制。控制完全由黑板的状态驱动,黑板状态的改变决定使用的特定知识。43举例撞击地球后产生的爆炸当量数据;第三类专家Expert3在看到新的数据后,根据自己的知识计算出了爆炸造成的破坏程度的数据,以此类推,最终所有的专家在一起得到了小行星撞击地球的应对方案。在整个过程中,控制流完全由黑板中的数据驱动,这就是黑板架构的特点。举例2:Siri系统最核心部分就是“黑板系统”,驱动调用大部分其他数据、模型和功能。类似于人的记忆系统的“工作记忆”,提供当前分析内容相关激活的本体等信息的临时存储以及集成调用各种模块进行处理。举例1:在系统中当黑板中初始数据是第一类专家Expert1根据自己的知识计算的有关小行星的质量、速度和运行轨迹等数据;第二类专家Expert2在看到这些数据后,根据自己的知识计算出了小行星4410)解释器架构解释器架构用于仿真当前不具备的计算环境,通常包含四个组成部分:用来解释伪码程序的解释引擎、包含待解释程序的内存、解释引擎的控制状态,以及被仿真程序的当前状态:45Example:JVM46基于规则的架构基于规则的架构是一种解释器架构风格,它将人类专家的问题解决知识编码成规则,这些规则在系统执行计算满足指定的条件时被执行或激活,通过规则不断地被执行和激活,最终使得问题被解决。由于这些规则不能被计算机系统直接执行,因此需要通过解释器来解释它们。4711)微内核风格微内核概念来源与操作系统领域。微内核是提供了操作系统核心功能的内核,它只需占用很小的内存空间即可启动,并向用户提供了标准接口,以使用户能够按照模块化的方式扩展其功能。现在大多数操作系统都采用了微内核架构。4812)开环和闭环控制风格49举例50DeploymentView(部署视图)TheDeploymentViewisan“architecturallysignificant”sliceoftheDeploymentModel.ProcessViewDeploymentViewLogicalViewUse-CaseViewImplementationViewEnd-userFunctionalityProgrammers

Softwaremanagement

PerformanceScalabilityThroughput

SystemintegratorsSystemtopology

Delivery,installationcommunicationSystemengineeringAnalysts/DesignersStructure

51又称为物理视图部署架构风格Client/Server3-tierFatClientFatServerDistributedClient/ServerServerlessPeer-to-peer(P2P)52Thinnerclient,thickerserverDatabaseServer(s)ApplicationBusinessObjectServicesClientABusinessObjectEngineClientCWWWBrowserClientBApplicationWebServerHTMLCGIASPJavaBusinessObjectServicesBusinessObjectEngineBusinessObjectServicesBusinessObjectEngineBusinessObjectServerDCOMADO/RCORBABeansCOMMTSBeansETS1)Client/ServerArchitectures53Example1:DeploymentDiagraminUML<<legacyRDBMS>>CourseCatalog<<CampusLAN>><<CampusLAN>><<CampusLAN>><<applicationserver>>RegistrationServer<<clientworkstation>>PCBillingSystem<<legacy>>0..200011111选课系统C/S54Example2:B/S和C/S混搭应用实例:B/S结构和C/S结构组合——“内外有别”模型55应用实例:B/S结构和C/S结构组合——“查改有别”模型56Example3:DeploymentDiagram环境远程监控系统57Example4:物联网的云边端一体化架构58云是指位于核心网中具有高可扩展的强大算力的计算中心;边缘侧是在移动网络边缘部署的服务器,它们靠近产生数据的移动终端,具备一定的数据存储和处理能力;端通常是指移动终端,它们具有更为受限的存储和计算能力,但是会产生大量的数据和数据处理任务。2)Serverless架构风格Serverless是一种基于互联网的技术架构,采用FAAS(FunctionasaService)架构,通过功能组合来实现应用程序逻辑。同时,Serverless架构能够让开发者在构建应用的过程中无需关注计算资源的获取和运维,由平台来按需分配计算资源并保证应用执行的SLA,按照调用次数进行计费,有效节省应用成本。Serverless特点:弹性伸缩、按需付费、事件驱动、无需运维59一个典型的C/S三层应用程序转变为60基于无服务器架构的应用在无服务器架构中,没有单一的传统后端。通过API网关,应用程序的前端直接与服务、数据库或计算函数进行联系。613)P2PArchitecture所有计算机节点都是对等的,可相互调用。多种风格的混搭?B/S架构,Server端用P2P架构62ProcessView(进程视图)TheProcessViewisan“architecturallysignificant”sliceoftheprocessesandthreadsoftheDesignModelProcessViewDeploymentViewLogicalViewUse-CaseViewImplementationViewEnd-userFunctionalityProgrammers

Softwaremanagement

PerformanceScalabilityThroughput

SystemintegratorsSystemtopology

Delivery,installationcommunicationSystemengineeringAnalysts/DesignersStructure

63Example1:ModelingProcesses64composition<<process>>CourseCatalogSystemAccess<<thread>>CourseCache<<process>>CourseRegistrationProcess<<thread>>OfferingCachedependency1111<<process>>StudentApplicationExample2:ModelingProcessesinUML选课系统65进程间交互进程交互关系可以使用时序图(SequenceDiagram)来描述交互的参与方激活状态(即交互参与方在此期间处于激活状态)同步请求消息异步请求消息请求返回消息66ImplementationView(开发视图)ProcessViewDeploymentViewLogicalViewUse-CaseViewImplementationViewEnd-userFunctionalityProgrammers

Softwaremanagement

PerformanceScalabilityThroughput

SystemintegratorsSystemtopology

Delivery,installationcommunicationSystemengineeringAnalysts/DesignersStructure

TheImplementationViewisan“architecturallysignificant”sliceoftheComponentModel.67WhatIsaComponentDiagram?AdiagramthatshowstheorganizationsanddependenciesamongcomponentsCourse68Howmanyviews?SimplifiedmodelstofitthecontextNotallsystemsrequireallviews:Singleprocessor:dropdeploymentviewSingleprocess:dropprocessviewVerySmallprogram:dropimplementationviewAddingviews:Technicalview,Dataview,securityview69技术视图Technicalview技术选型:编程语言操作系统数据库框架中间件库....70技术视图描述方式:文本技术视图在逻辑视图上标注在物理视图上标注....选择合适的编程语言命令式(imperative)语言冯.诺伊曼C,Ada,Fortran…面向对象Smalltalk,Eiffel,C++,Java…脚本式Perl,Python,PHP…说明式(declarative)语言函数式Lisp/Scheme,ML,Haskell,Clean,Erlang,Miranda…数据流Id,Val…逻辑式或基于约束的Prolog,spreedsheets…基于模板的XSLT…量子编程语言Q#,Quipper,Sliq…71编程语言的排名TIOBEProgrammingCommunityIndex(/tiobe-index/)72选择合适的框架/中间件/库1.MVC框架SpringMVC、Struts2、JSF、Grails、GoogleWebToolkit(GWT)2.ORM框架MybatisHibernate、SpringDataJPA3.Web前端框架CSS框架:Bootstrap,FundationJS框架:VUE.JS,React.js,AngularJS,Ember.js4.并行计算框架

Hadoop,Spark,MapReduce5.服务与微服务框架

JAX-RS1.0+Jersey/CXF,SpringCloud,Dubbo6.深度学习框架

PyTorch,TensorFlow,Caffe等等73数据视图DataViewItisoptional.IftherearesomepersistentobjectsthatrequirepersistentstorageStorageMechanismsObjectdatabasesRelationaldatabasesNoSQLdatabasesOtherflatfilesXMLstructuresPalmOSPDBfileshierarchicaldatabasesandsoon74RelationalDataModelGenerateRelationalDataModel(conceptualdatamodelorphysicaldatamodel)fromObjectOrientedModelThenimproveitNote:Youcanalsogenerateitduringobjectorientedanalysisphase.75Example:RelationalDataModelERDiagram76O-RMappingTheProblem:Aswithrelationaldatabases,arepresentationmismatchexistsbetweenobjectsandthesenon-object-orientedformats.TheSolution:O-RMappingserviceapersistenceservicetranslateobjectsintorecordsandsavetheminadatabase,andtranslaterecordsintoobjectswhenretrievingfromadatabaseO-RMappingMiddlewareorPersistenceFrameworkSuchasHibernate,iBatis7702-质量因素的架构设计战术01-软件架构的多个视图03-软件架构的质量78质量因素的架构设计战术可用性和可靠性战术可维护性战术性能战术安全性战术可测试性战术易用性战术79可用性(availability)战术刺激响应战术80错误检测查错方法被动式查错在程序中需要进行检查的部位设置监测点,若实际执行结果满足接收判断,则判定程序运行正常,否则则出错。主动式查错设计一个检测监视器,在规定时间或规定的时间间隔内,或者是在系统处于闲置或等待的状态下,主动对系统进行检测。查错技术命令/响应:ping/echo一个组件发送ping,期望在预期时间内收到被审查组件的响应心跳:heartbeat组件定期发送消息(心跳),如果另一个组件没有收到,则通知纠错组件。异常:exceptions异常处理的程序接收判断:judgment日志和监控:logging/monitoring81被动式查错原则零信任原则在设计任何一个单元或者模块时,需要假设和它相互关联的单元或者模块存在错误。当该单元或者模块接收到数据时,首先假设该数据是一个出错数据,无论该数据来源于何处,然后尽力去证实该假设是否成立。对硬件错误进行检测设计例如电源失效、电磁干扰、系统不稳定、接口故障、干扰信号以及错误操作等的设计。数据检测设计按照已知的数据极限,检查数据范围。82错误恢复——修复接收表决,即N版本程序(NVP)技术冗余处理器的每个进程都有相同的输入,它们计算并发送给表决者一个输出值。(如果检测到某个错误,就停止该处理器)表决规则可以是“多数规则”或“首选组件”等注意多样性问题——冗余组件运行不同算法主动冗余(热重启)所有冗余组件都以并行的方式对事件做出反应(仅用其一)发生错误,就切换到某一个组件利用可靠传输协议,将传递给任何一个冗余组件的消息,都传递给其他所有组件被动冗余(暖重启/多重冗余)由一个组件负责对事件作出响应,并通知其他组件更新状态出错后,在继续提供服务之前,确保备用状态是最新的可以经常切换“主组件”,保持新状态备件(冷重启)替换各种的出现故障的组件定期对备件进行备份、设定检查点,出错后重新初始化。恢复时间可能稍长冗余技术83示例:航空控制软件的N版本程序(NVP)设计要求

根据系统安全评估,软件级别分为:A级软件:软件的失效或故障可能导致灾难性事故发生;B级软件:软件的失效或故障可能导致危险性事故发生;C级软件:软件的失效或故障不会导致人身安全问题,但会对机组造成较大影响;D级软件:对飞行安全的影响已降低到较小的程度;E级软件:无安全影响。NVP设计A级软件,推荐的失效容限为2,要进行5版本程序设计;B级软件,推荐的失效容限为1,要进行3版本程序设计;C和D级,无需软件冗余。84错误恢复——重新引入影子Shadow以前出现故障的物体,在恢复之前,模仿工作组件的内容状态再同步组件重新提供服务之前,需要更新其状态检查点/回滚使用上一个一致的检查点85错误预防软件运维时运行监测利用监视进程检查进程中存在的错误,监视进程可以删除没有在运行的进程。从服务中删除执行某些活动,防止预期可能发生的错误重启,防止内存泄露软件研发时减少和控制软件的程序复杂度模块化设计冗余设计提高数据传递和转换的精确性改善信息传递方式软件健壮性设计事务:将一些有序的步骤绑定为事务86可维护性战术刺激响应战术87局部化变更维持语义一致性语义,指的是模块内各责任之间的关系要确保这些责任能够协调一致地工作,而不过多地依赖其他模块耦合、内聚的程度是度量一致性的一个指标同时还应该根据是否支持预期的变更,来判断一致性程度预期可能的变更在实践中,往往很难预期所有重要的变更(经验)泛化该模块使模块能根据输入计算更广泛的功能可以把输入看作是为该模块定义了一种语言,对其进行解释限制可能的选择实际中可选范围往往很大,可能会影响很多模块例如,处理器的变更,可以限制使用相同家族的成员正交88防止连锁反应信息隐藏信息隐藏,就是把某个实体的责任分解为更小的部分,并选择使哪些信息成为公有的,哪些私有,目的是使变更被隔离在一个模块内维持现有接口创建抽象接口,与具体实现相分离添加接口:提供最新的服务或数据添加适配器:给A添加适配器,把A包装起来,提供原始A的信息限制通信路径限制与给定模块A共享数据的模块。即减少两类模块的数量,1,使用由A生产的数据的模块数量。2,给A提供数据的模块的数量仲裁者的使用对于非语义型的依赖,可以在A、B间插入一个仲裁者,管理与该依赖相关的活动89推迟绑定时间支持部署时(变更)及非开发人员的修改运行时注册即插即用。但需要额外的管理注册的开销配置文件在开机启动时,根据其设置参数多态允许方法调用的后期绑定组件更换允许载入时绑定遵守已定义的协议允许各个独立进程在运行时绑定90性能战术刺激响应战术91资源需求提高计算效率改进关键算法。用一种资源换取另一种资源减少计算开销例如删除一些仲裁者管理事件速率降低对环境监视的强度控制采样频率限制执行时间限制队列的大小92资源管理引入并发不同的线程上处理不同的事件流维持数据或计算的多个副本(注意一致性)例:高速缓存。增加可用资源提供额外的处理器、内存、速度更快的网络等。93资源仲裁:对竞争的资源进行调度常见的调度策略FIFO:适用于相同优先级固定优先级调度:可能使低优先级请求等待过多时间。常见优先级策略为:语义重要性时限时间:时限短(到期)的请求优先级高速率单调:对于周期任务,选择周期短的优先级高动态优先级轮转时限优先静态(脱机)调度系统执行前,基于被调度任务的时间参数来安排调度适用具有确定性时间要求的系统,例如空管。94示例:实时嵌入式软件的性能战术跳过操作系统直接访问硬件软硬件协同,利用硬件来实现软件的功能,例如进程间通信发挥硬件性能计算和IO的并行化用空间换时间,例如cache内存池进程池、线程池……95示例:淘宝的性能和可用性战术应用服务器微服务架构容器、集群和弹性扩容负载均衡和无状态服务CDN数据库读写分离分库分表集群内存数据库NoSQL数据库设计战术多级缓存消息队列、异步处理和限流异地多活熔断和降级……96安全性战术刺激响应战术97抵抗攻击对用户身份进行验证确保用户或计算机是它所声称的用户或计算机密码、数字证书对用户进行授权经过身份验证的用户,有什么样的访问权限访问控制维护数据的机密性加密数据,VPN,SSL维护完整性限制暴露信息限制访问防火墙根据消息源或目的端口,来限制访问98检测攻击将网络通信模式与数据库中的进行对比检测攻击的“传感器”将各传感器进行融合记录日志分析工具和控制台99100从攻击中恢复恢复状态(防守性)维持重要副本数据识别攻击者(惩罚性)维持审计追踪示例:平安银行系统的安全性战术101可测试性战术刺激响应战术102可测试性战术管理输入输出记录/回放:捕获跨接口的信息,将其作为测试专用软件的输入将接口和实现分离占位程序可以使得系统剩余部分得到检测特化访问路线/接口测试工具独立地捕获某些变量值内部监视内置监视器103易用性战术刺激响应战术104易用性战术运行时用户主动:撤销混合主动:提供进展指示器系统主动:预测与用户相关的某些信息维持任务的一个模型维持用户的一个模型维持系统的一个模型设计时将用户接口(可能频繁改变)与应用的其余部分分离开支持该战术的架构模式:MVC、PAC、Seeheim、Arch/Slinky105多目标权衡不同质量属性之间往往存在冲突,例如:性能VS.安全性可靠性VS.灵活性可维护性VS.高效性……排出优先级,进行多目标权衡106讨论你的大作业项目中哪个非功能需求(质量因素)最重要?采用哪些设计战术?10702-质量因素的架构设计战术01-软件架构的多个视图03-软件架构的质量108CharacteristicsofaGoodArchitectureResilientSimpleApproac

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论