軟件工程原理與實踐(碩士)課件 6 軟件架構(gòu)設(shè)計_第1頁
軟件工程原理與實踐(碩士)課件 6 軟件架構(gòu)設(shè)計_第2頁
軟件工程原理與實踐(碩士)課件 6 軟件架構(gòu)設(shè)計_第3頁
軟件工程原理與實踐(碩士)課件 6 軟件架構(gòu)設(shè)計_第4頁
軟件工程原理與實踐(碩士)課件 6 軟件架構(gòu)設(shè)計_第5頁
已閱讀5頁,還剩113頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

高級軟件工程

SoftwareEngineering軟件架構(gòu)設(shè)計軟件架構(gòu)設(shè)計軟件架構(gòu)是一系列重要決策的集合,這些決策關(guān)于:軟件系統(tǒng)的組織;組成系統(tǒng)的結(jié)構(gòu)元素和它們之間的接口,以及當這些元素相互協(xié)作時所體現(xiàn)的行為;如何組合這些些元素,使它們逐漸合成為更大的子系統(tǒng);架構(gòu)風格;這些元素以及它們的接口、協(xié)作和組合。Architecturedecisionsarethemostfundamentaldecisions,andchangingthemwillhavesignificanteffects.ArchitectureDesignImplementationCode2軟件架構(gòu)的主要建模方法文本語言建模方法基于非規(guī)范的圖形表示的建模方法該圖形表示不具有嚴格的標準,較為隨意,具有一定方便交流的作用。如:盒線圖(Box-LineDiagram)、PowerPoint風格圖形等基于UML/SysML的建模方法

半形式化方法,UML/SysML

作為一個工業(yè)化標準的軟件建模語言,支持多角度、多層次、多方面的建模需求,支持擴展,并有強大的工具支持基于AADL的建模方法半形式化方法,AADL是一個實時嵌入式軟件系統(tǒng)的架構(gòu)建模語言,適用于航天航空、汽車、自動化、醫(yī)療、核能等領(lǐng)域基于形式化的建模方法例如Petri-Net3軟件架構(gòu)設(shè)計的內(nèi)容架構(gòu)設(shè)計的內(nèi)容:設(shè)計軟件架構(gòu)的多個視圖物理視圖、邏輯視圖、進程視圖、開發(fā)視圖、技術(shù)視圖、數(shù)據(jù)視圖等選擇軟件質(zhì)量屬性的設(shè)計策略性能、可靠性、安全性、可移植性、可擴展性等架構(gòu)設(shè)計的目標:使得軟件系統(tǒng)在架構(gòu)層面的設(shè)計上滿足擬建軟件的功能性和非功能性需求402-質(zhì)量因素的架構(gòu)設(shè)計戰(zhàn)術(shù)01-軟件架構(gòu)的多個視圖邏輯視圖部署視圖進程視圖開發(fā)視圖技術(shù)視圖數(shù)據(jù)視圖03-軟件架構(gòu)的質(zhì)量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缺陷預(yù)測系統(tǒng)8基于非規(guī)范的圖形表示的建模方法Example2:LogicalviewMiddleware<<layer>>BaseReuseglobalApplication<<layer>>BusinessServices<<layer>>NecessarybecausetheApplicationLayermusthaveaccesstothecoredistributionmechanismsprovidedwithJavaRMI.選課系統(tǒng)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:飛行控制系統(tǒng)AADL架構(gòu)13如何才能設(shè)計出好的軟件架構(gòu)?14復(fù)用現(xiàn)有的成功設(shè)計方案──設(shè)計模式(DesignPattern)的復(fù)用!軟件設(shè)計模式1987年,模式的思想被引入軟件工程方法學(xué)中。1995年,以ErichGamma為首的四人組(GangofFour,GoF)歸納發(fā)表了23種在軟件開發(fā)中使用頻率較高的設(shè)計模式,出版了《DesignPatterns:ElementsofReusableObject-OrientedSoftware》一書。軟件設(shè)計的模式分類架構(gòu)風格Architecturalstyle例如分層架構(gòu)風格、MVC風格設(shè)計模式Designpattern例如Facade模式、工廠模式、單例模式編程慣用Idiom例如Java多線程編程模式15基于邏輯架構(gòu)風格進行邏輯視圖的設(shè)計表現(xiàn)層分離風格:MVC數(shù)據(jù)流風格(Dataflow):批處理序列、管道-過濾器風格(Pipe-and-Filter)調(diào)用/返回風格:主程序/子程序、面向?qū)ο箫L格(ADT)、多層(Layer)分布計算風格:多層(Tier)、代理、C/S、P2P獨立構(gòu)件風格:事件響應(yīng)、消息總線、服務(wù)和微服務(wù)虛擬機風格:解釋器、基于規(guī)則的系統(tǒng)倉庫風格:數(shù)據(jù)庫系統(tǒng)、超文本系統(tǒng)、黑板系統(tǒng)自適應(yīng)風格:微內(nèi)核、反射、控制反饋……161)MVC

模型Model:管理系統(tǒng)中存儲的數(shù)據(jù)和業(yè)務(wù)規(guī)則,并執(zhí)行相應(yīng)的計算功能。視圖View:根據(jù)模型生成提供給用戶的交互界面,不同的視圖可以對相同的數(shù)據(jù)產(chǎn)生不同的界面??刂破鰿ontrol:接收用戶輸入,通過調(diào)用模型獲得響應(yīng),并通知視圖進行用戶界面的更新。172)管道和過濾器(PipesandFilters)Inthisstyle,eachcomponenthasasetofinputsandasetofoutputs.Acomponentreadsstreamsofdataonitsinputsandproducesstreamsofdataonitsoutput.18舉例Linux的Shell程序可以看做是典型的管道與過濾器架構(gòu)的例子例如下面的Shell腳本:$catTestResults|sort|grepGood

會將TestResults文件的文本進行排序,然后找出其中包含單詞Good的行,并顯出在屏幕上。Shell命令cat、sort和grep依次執(zhí)行,就構(gòu)成了一個管道-過濾器架構(gòu)。19舉例203)面向?qū)ο箫L格這種風格建立在數(shù)據(jù)抽象和面向?qū)ο蟮幕A(chǔ)上,數(shù)據(jù)的表示方法和它們的相應(yīng)操作封裝在一個抽象數(shù)據(jù)類型或?qū)ο笾小_@種風格的構(gòu)件是對象,或者說是抽象數(shù)據(jù)類型的實例。對象是一種被稱作管理者的構(gòu)件,因為它負責保持資源的完整性。對象是通過函數(shù)和過程的調(diào)用來交互的。214)層次架構(gòu)(layeredarchitecture)風格GeneralfunctionalitySpecificfunctionalityDistinctapplicationsubsystemsthatmakeupanapplication—containsthevalueaddingsoftwaredevelopedbytheorganization.Businessspecific—containsanumberofreusablesubsystemsspecifictothetypeofbusiness.Middleware—offerssubsystemsforutilityclassesandplatform-independentservicesfordistributedobjectcomputinginheterogeneousenvironmentsandsoon.Systemsoftware—containsthesoftwarefortheactualinfrastructuresuchasoperatingsystems,interfacestospecifichardware,devicedrivers,andsoon.ApplicationSubsystemsBusiness-SpecificMiddlewareSystemSoftware上一層依賴下一層22不斷提取共性!沉淀成為一層軟件保持應(yīng)用軟件的復(fù)雜性相對穩(wěn)定應(yīng)用軟件應(yīng)用軟件操作系統(tǒng)DBMS操作系統(tǒng)應(yīng)用軟件中間件操作系統(tǒng)應(yīng)用軟件DBMS中間件23中間件的分類1)數(shù)據(jù)訪問中間件允許應(yīng)用程序和本地或者異地的數(shù)據(jù)庫進行通信,并提供一系列的應(yīng)用程序接口(如ODBC、JDBC等)。該類中間件技術(shù)上最成熟,但局限于與數(shù)據(jù)庫相關(guān)的應(yīng)用。2)消息中間件可以屏蔽平臺和協(xié)議上的差異進行遠程通信,實現(xiàn)應(yīng)用程序之間的協(xié)同,如IBM的MQSeries、BEA的MessageQ、SUN的JMS和微軟的MSMQ等,其優(yōu)點在于提供高可靠的同步和異步通信,缺點在于不同的消息中間件產(chǎn)品之間不能互操作。3)遠程過程調(diào)用RPC中間件解決了平臺異構(gòu)的問題,但編程復(fù)雜且不支持異步操作。24中間件的分類(2)4)事務(wù)中間件是在分布、異構(gòu)環(huán)境下提供保證事務(wù)完整性和數(shù)據(jù)完整性的一種平臺,如BEA的TUXEDO、IBM的CICS、微軟的MTS。其優(yōu)勢在于對關(guān)鍵業(yè)務(wù)的支持,但機制復(fù)雜、對用戶要求較高。5)分布對象中間件在分布、異構(gòu)的網(wǎng)絡(luò)計算環(huán)境中,可以將各種分布對象有機地結(jié)合在一起,完成系統(tǒng)的快速集成。主流標準有Microsoft的DNA/COM+、OMG的OMA/CORBA、Sun的J2EE/EJB。Weblogic,Websphere,Jboss,.Net等應(yīng)用服務(wù)器都包含了分布對象中間件,也有如Orbix、HPORB等獨立產(chǎn)品。6)分布式服務(wù)中間件通過網(wǎng)絡(luò)對松散耦合的業(yè)務(wù)服務(wù)進行分布式部署、組合和使用。Web服務(wù)中間件,其標準是SOA,應(yīng)用服務(wù)器都包含了Web服務(wù)中間件,也有AXIS2、HPWebServicesPlatform等獨立產(chǎn)品。微服務(wù)中間件,例如Dubbo。25層次架構(gòu)實例26數(shù)字出納員ATM出納員付款開發(fā)票應(yīng)用系統(tǒng)現(xiàn)金管理帳戶管理發(fā)票管理特定業(yè)務(wù)銀行客戶管理ApplicationServerHPORBPlus中間件NTWorkstationMSSQLServer系統(tǒng)軟件5)3Tiers表示層:負責向用戶呈現(xiàn)界面,并接收用戶請求發(fā)送給業(yè)務(wù)邏輯層;業(yè)務(wù)邏輯層:負責執(zhí)行業(yè)務(wù)邏輯以處理用戶請求,并調(diào)用數(shù)據(jù)訪問層提供的持久性操作;數(shù)據(jù)訪問層:負責執(zhí)行數(shù)據(jù)庫持久性操作。27表示層業(yè)務(wù)邏輯層數(shù)據(jù)訪問層數(shù)據(jù)庫舉例286)基于事件的隱式調(diào)用構(gòu)件不直接調(diào)用另一個構(gòu)件,而是觸發(fā)或廣播一個或多個事件。系統(tǒng)中的其它構(gòu)件訂閱一個或多個事件,當一個事件被觸發(fā),系統(tǒng)自動調(diào)用訂閱這個事件的所有構(gòu)件,這樣,一個事件的觸發(fā)就導(dǎo)致了另一構(gòu)件的調(diào)用。這種風格的主要特點是事件的觸發(fā)者并不知道哪些構(gòu)件會被這些事件影響。29舉例IDE:編輯器和變量監(jiān)視器可以登記相應(yīng)Debugger的斷點事件。當Debugger在斷點處停下時,它聲明該事件,由系統(tǒng)自動調(diào)用處理程序,如編輯器可以卷屏到斷點,變量監(jiān)視器刷新變量數(shù)值。而Debugger本身只聲明事件,并不關(guān)心哪些過程會啟動,也不關(guān)心這些過程做什么處理。307)消息總線系統(tǒng)的連接件,負責消息的分派、傳遞和過濾以及處理結(jié)果的返回。各個構(gòu)件(或系統(tǒng)、服務(wù)等)掛在消息總線上,向總線訂閱感興趣的消息類型。構(gòu)件根據(jù)需要發(fā)布消息,由消息總線把該消息分派到系統(tǒng)中所有對此感興趣的消息類型,消息是構(gòu)件之間通信的唯一方式。31舉例328)基于容器的微服務(wù)風格33服務(wù)架構(gòu)風格服務(wù)的抽象性(基于接口的編程)服務(wù)的自治性(實現(xiàn)分布式應(yīng)用)服務(wù)間的松耦合式綁定,基于消息進行通信單體架構(gòu)VS微服務(wù)架構(gòu)MonolithicapplicationVs.

Microservices34舉例:單體架構(gòu)(網(wǎng)絡(luò)訂餐系統(tǒng))

35將應(yīng)用程序構(gòu)建為單個可執(zhí)行和可部署組件隨著業(yè)務(wù)的擴張,代碼倉庫急劇膨脹,構(gòu)建和部署變慢,敏捷開發(fā)和快速交付很難實現(xiàn)。舉例:微服務(wù)架構(gòu)(網(wǎng)絡(luò)訂餐系統(tǒng))

36通過API網(wǎng)關(guān)對來自移動應(yīng)用的服務(wù)請求進行路由圍繞業(yè)務(wù)能力組織服務(wù)服務(wù)數(shù)據(jù)私有基于輕量級通信協(xié)議的服務(wù)APISpringCloud微服務(wù)開發(fā)相關(guān)組件

37Zuul為外部的客戶端應(yīng)用訪問后臺服務(wù)提供了統(tǒng)一的接入點,實現(xiàn)了反向代理和服務(wù)端負載均衡,同時還實現(xiàn)了認證、鑒權(quán)、限流等網(wǎng)關(guān)管理功能Eureka服務(wù)端以服務(wù)的形式提供服務(wù)注冊和發(fā)現(xiàn)功能,客戶端以一種透明的方式為每個服務(wù)實例實現(xiàn)與Eureka服務(wù)端的交互,包括服務(wù)注冊、心跳消息發(fā)送以及服務(wù)注冊信息的拉取和本地緩存Ribbon實現(xiàn)了客戶端負載均衡,提供了隨機選擇、輪詢等不同的負載均衡算法,同時還實現(xiàn)了服務(wù)調(diào)用超時和重試等機制Hystrix為服務(wù)調(diào)用方實現(xiàn)了服務(wù)調(diào)用的熔斷降級功能SpringCloudSecurityOAuth2為客戶端提供認證和授權(quán)服務(wù)SpringCloudConfig為微服務(wù)應(yīng)用提供了統(tǒng)一的配置數(shù)據(jù)管理服務(wù)微服務(wù)架構(gòu)風格微服務(wù)架構(gòu)風格是一種使用一套小服務(wù)來開發(fā)單個應(yīng)用的方式途徑,每個服務(wù)運行在自己的進程中,通過輕量的通訊機制聯(lián)系,經(jīng)常是基于HTTP資源API,這些服務(wù)基于業(yè)務(wù)能力構(gòu)建,能夠通過自動化部署方式獨立部署,這些服務(wù)自己有一些小型集中化管理,可以是使用不同的編程語言編寫。和SOA不同:SOA倡導(dǎo)粗粒度服務(wù),而它是細粒度服務(wù)。同時,微服務(wù)采用“智能終端和啞管道”,它們擁有自己的領(lǐng)域邏輯,以類似Unix管道過濾方式運行,接受到一個請求,使用相應(yīng)的邏輯,產(chǎn)生一個響應(yīng),這些都可以使用RESTful方式編排,而不是使用復(fù)雜的協(xié)議如WS-Choreography或BPEL或ESB指揮控制。和構(gòu)件不同:它從內(nèi)存方法調(diào)用轉(zhuǎn)換到RPC遠程方法調(diào)用,每個服務(wù)運行在自己的進程。優(yōu)點:易于敏捷的開發(fā)、更新與部署,高度可擴展和可靠性38容器微服務(wù)的管理問題:因為服務(wù)通常部署在多個主機上,很難持續(xù)跟蹤指定服務(wù)究竟運行在某臺主機上。因為微服務(wù)架構(gòu)使用的主機容量往往小于Monolithic架構(gòu),隨著微服務(wù)架構(gòu)不停的橫向擴展,主機數(shù)量將以一個非??植赖乃俣仍鲩L。解決方案:容器不同容器共享相同的內(nèi)核,容器的共享和發(fā)布非常簡單容器之間進行了完全的隔離,簡易了不同語言開發(fā)的微服務(wù)代碼部署例如:Docker等39微服務(wù)容器鏡像構(gòu)建及實例創(chuàng)建

40鏡像描述(如Docker容器的Dockerfile)指定了基礎(chǔ)容器鏡像(其中包含基礎(chǔ)運行環(huán)境,例如Java運行時環(huán)境JRE),同時描述了一些軟件安裝和容器配置指令及容器實例創(chuàng)建時的初始化腳本在運行階段,每臺虛擬機實例上的容器運行時根據(jù)指令從容器鏡像倉庫中拉去不同服務(wù)的容器鏡像(一般還需要指定版本)然后創(chuàng)建相應(yīng)的容器實例(其中運行著對應(yīng)的服務(wù)實例)倉庫中可以包含同一服務(wù)的不同版本的鏡像B容器編排與集群管理

微服務(wù)的容器化部署經(jīng)常需要容器編排和集群管理工具的支持服務(wù)之間經(jīng)常會存在依賴關(guān)系,同時服務(wù)還有可能依賴于消息代理和數(shù)據(jù)庫等基礎(chǔ)服務(wù),因此僅僅以單個服務(wù)為單位進行實例創(chuàng)建和管理經(jīng)常是不夠的需要將一組相關(guān)的容器作為一個整體進行編排和管理容器編排與集群管理系統(tǒng)DockerCompose:可以在單個服務(wù)器或主機上創(chuàng)建并管理多個容器DockerSwarm:可以在多個服務(wù)器或主機上創(chuàng)建并管理容器集群Kubernetes:使用最廣泛的大規(guī)模Docker編排和集群管理工具419)倉庫風格和黑板風格倉庫風格是以數(shù)據(jù)為中心的系統(tǒng)架構(gòu),它細分為:數(shù)據(jù)庫系統(tǒng)以數(shù)據(jù)庫為核心,各個構(gòu)件存取數(shù)據(jù)。超文本系統(tǒng)用超鏈接的方法,將各種不同空間的文字、圖片等信息組織在一起的網(wǎng)狀文本黑板系統(tǒng)

為參與問題解決的知識源提供了共享的數(shù)據(jù)表示,這些數(shù)據(jù)表示是與應(yīng)用相關(guān)的。在黑板系統(tǒng)中,控制流是由黑板數(shù)據(jù)的狀態(tài)決定的,而并非按照某個固定的順序執(zhí)行。42黑板系統(tǒng)黑板系統(tǒng)專門針對沒有確定的解決方法的問題,例如信號處理和模式識別,它通過多個知識源的協(xié)作來解決問題,而這種協(xié)作完全是狀態(tài)驅(qū)動的,因此各個知識源具有公平的機會獲取并更新黑板中的狀態(tài)數(shù)據(jù)。黑板系統(tǒng)主要由三部分組成:知識源。知識源中包含獨立的、與應(yīng)用程序相關(guān)的知識,知識源之間不直接進行通訊,它們之間的交互只通過黑板來完成。黑板數(shù)據(jù)結(jié)構(gòu)。黑板數(shù)據(jù)是按照與應(yīng)用程序相關(guān)的層次來組織的解決問題的數(shù)據(jù),知識源通過不斷地改變黑板數(shù)據(jù)來解決問題??刂???刂仆耆珊诎宓臓顟B(tài)驅(qū)動,黑板狀態(tài)的改變決定使用的特定知識。43舉例撞擊地球后產(chǎn)生的爆炸當量數(shù)據(jù);第三類專家Expert3在看到新的數(shù)據(jù)后,根據(jù)自己的知識計算出了爆炸造成的破壞程度的數(shù)據(jù),以此類推,最終所有的專家在一起得到了小行星撞擊地球的應(yīng)對方案。在整個過程中,控制流完全由黑板中的數(shù)據(jù)驅(qū)動,這就是黑板架構(gòu)的特點。舉例2:Siri系統(tǒng)最核心部分就是“黑板系統(tǒng)”,驅(qū)動調(diào)用大部分其他數(shù)據(jù)、模型和功能。類似于人的記憶系統(tǒng)的“工作記憶”,提供當前分析內(nèi)容相關(guān)激活的本體等信息的臨時存儲以及集成調(diào)用各種模塊進行處理。舉例1:在系統(tǒng)中當黑板中初始數(shù)據(jù)是第一類專家Expert1根據(jù)自己的知識計算的有關(guān)小行星的質(zhì)量、速度和運行軌跡等數(shù)據(jù);第二類專家Expert2在看到這些數(shù)據(jù)后,根據(jù)自己的知識計算出了小行星4410)解釋器架構(gòu)解釋器架構(gòu)用于仿真當前不具備的計算環(huán)境,通常包含四個組成部分:用來解釋偽碼程序的解釋引擎、包含待解釋程序的內(nèi)存、解釋引擎的控制狀態(tài),以及被仿真程序的當前狀態(tài):45Example:JVM46基于規(guī)則的架構(gòu)基于規(guī)則的架構(gòu)是一種解釋器架構(gòu)風格,它將人類專家的問題解決知識編碼成規(guī)則,這些規(guī)則在系統(tǒng)執(zhí)行計算滿足指定的條件時被執(zhí)行或激活,通過規(guī)則不斷地被執(zhí)行和激活,最終使得問題被解決。由于這些規(guī)則不能被計算機系統(tǒng)直接執(zhí)行,因此需要通過解釋器來解釋它們。4711)微內(nèi)核風格微內(nèi)核概念來源與操作系統(tǒng)領(lǐng)域。微內(nèi)核是提供了操作系統(tǒng)核心功能的內(nèi)核,它只需占用很小的內(nèi)存空間即可啟動,并向用戶提供了標準接口,以使用戶能夠按照模塊化的方式擴展其功能。現(xiàn)在大多數(shù)操作系統(tǒng)都采用了微內(nèi)核架構(gòu)。4812)開環(huán)和閉環(huán)控制風格49舉例50DeploymentView(部署視圖)TheDeploymentViewisan“architecturallysignificant”sliceoftheDeploymentModel.ProcessViewDeploymentViewLogicalViewUse-CaseViewImplementationViewEnd-userFunctionalityProgrammers

Softwaremanagement

PerformanceScalabilityThroughput

SystemintegratorsSystemtopology

Delivery,installationcommunicationSystemengineeringAnalysts/DesignersStructure

51又稱為物理視圖部署架構(gòu)風格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選課系統(tǒng)C/S54Example2:B/S和C/S混搭應(yīng)用實例:B/S結(jié)構(gòu)和C/S結(jié)構(gòu)組合——“內(nèi)外有別”模型55應(yīng)用實例:B/S結(jié)構(gòu)和C/S結(jié)構(gòu)組合——“查改有別”模型56Example3:DeploymentDiagram環(huán)境遠程監(jiān)控系統(tǒng)57Example4:物聯(lián)網(wǎng)的云邊端一體化架構(gòu)58云是指位于核心網(wǎng)中具有高可擴展的強大算力的計算中心;邊緣側(cè)是在移動網(wǎng)絡(luò)邊緣部署的服務(wù)器,它們靠近產(chǎn)生數(shù)據(jù)的移動終端,具備一定的數(shù)據(jù)存儲和處理能力;端通常是指移動終端,它們具有更為受限的存儲和計算能力,但是會產(chǎn)生大量的數(shù)據(jù)和數(shù)據(jù)處理任務(wù)。2)Serverless架構(gòu)風格Serverless是一種基于互聯(lián)網(wǎng)的技術(shù)架構(gòu),采用FAAS(FunctionasaService)架構(gòu),通過功能組合來實現(xiàn)應(yīng)用程序邏輯。同時,Serverless架構(gòu)能夠讓開發(fā)者在構(gòu)建應(yīng)用的過程中無需關(guān)注計算資源的獲取和運維,由平臺來按需分配計算資源并保證應(yīng)用執(zhí)行的SLA,按照調(diào)用次數(shù)進行計費,有效節(jié)省應(yīng)用成本。Serverless特點:彈性伸縮、按需付費、事件驅(qū)動、無需運維59一個典型的C/S三層應(yīng)用程序轉(zhuǎn)變?yōu)?0基于無服務(wù)器架構(gòu)的應(yīng)用在無服務(wù)器架構(gòu)中,沒有單一的傳統(tǒng)后端。通過API網(wǎng)關(guān),應(yīng)用程序的前端直接與服務(wù)、數(shù)據(jù)庫或計算函數(shù)進行聯(lián)系。613)P2PArchitecture所有計算機節(jié)點都是對等的,可相互調(diào)用。多種風格的混搭?B/S架構(gòu),Server端用P2P架構(gòu)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選課系統(tǒng)65進程間交互進程交互關(guān)系可以使用時序圖(SequenceDiagram)來描述交互的參與方激活狀態(tài)(即交互參與方在此期間處于激活狀態(tài))同步請求消息異步請求消息請求返回消息66ImplementationView(開發(fā)視圖)ProcessViewDeploymentViewLogicalViewUse-CaseViewImplementationViewEnd-userFunctionalityProgrammers

Softwaremanagement

PerformanceScalabilityThroughput

SystemintegratorsSystemtopology

Delivery,installationcommunicationSystemengineeringAnalysts/DesignersStructure

TheImplementationViewisan“architecturallysignificant”sliceoftheComponentModel.67WhatIsaComponentDiagram?AdiagramthatshowstheorganizationsanddependenciesamongcomponentsCourse68Howmanyviews?SimplifiedmodelstofitthecontextNotallsystemsrequireallviews:Singleprocessor:dropdeploymentviewSingleprocess:dropprocessviewVerySmallprogram:dropimplementationviewAddingviews:Technicalview,Dataview,securityview69技術(shù)視圖Technicalview技術(shù)選型:編程語言操作系統(tǒng)數(shù)據(jù)庫框架中間件庫....70技術(shù)視圖描述方式:文本技術(shù)視圖在邏輯視圖上標注在物理視圖上標注....選擇合適的編程語言命令式(imperative)語言馮.諾伊曼C,Ada,Fortran…面向?qū)ο骃malltalk,Eiffel,C++,Java…腳本式Perl,Python,PHP…說明式(declarative)語言函數(shù)式Lisp/Scheme,ML,Haskell,Clean,Erlang,Miranda…數(shù)據(jù)流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,F(xiàn)undationJS框架:VUE.JS,React.js,AngularJS,Ember.js4.并行計算框架

Hadoop,Spark,MapReduce5.服務(wù)與微服務(wù)框架

JAX-RS1.0+Jersey/CXF,SpringCloud,Dubbo6.深度學(xué)習(xí)框架

PyTorch,TensorFlow,Caffe等等73數(shù)據(jù)視圖DataViewItisoptional.IftherearesomepersistentobjectsthatrequirepersistentstorageStorageMechanismsObjectdatabasesRelationaldatabasesNoSQLdatabasesOtherflatfilesXMLstructuresPalmOSPDBfileshierarchicaldatabasesandsoon74RelationalDataModelGenerateRelationalDataModel(conceptualdatamodelorphysicaldatamodel)fromObjectOrientedModelThenimproveitNote:Youcanalsogenerateitduringobjectorientedanalysisphase.75Example:RelationalDataModelERDiagram76O-RMappingTheProblem:Aswithrelationaldatabases,arepresentationmismatchexistsbetweenobjectsandthesenon-object-orientedformats.TheSolution:O-RMappingserviceapersistenceservicetranslateobjectsintorecordsandsavetheminadatabase,andtranslaterecordsintoobjectswhenretrievingfromadatabaseO-RMappingMiddlewareorPersistenceFrameworkSuchasHibernate,iBatis7702-質(zhì)量因素的架構(gòu)設(shè)計戰(zhàn)術(shù)01-軟件架構(gòu)的多個視圖03-軟件架構(gòu)的質(zhì)量78質(zhì)量因素的架構(gòu)設(shè)計戰(zhàn)術(shù)可用性和可靠性戰(zhàn)術(shù)可維護性戰(zhàn)術(shù)性能戰(zhàn)術(shù)安全性戰(zhàn)術(shù)可測試性戰(zhàn)術(shù)易用性戰(zhàn)術(shù)79可用性(availability)戰(zhàn)術(shù)刺激響應(yīng)戰(zhàn)術(shù)80錯誤檢測查錯方法被動式查錯在程序中需要進行檢查的部位設(shè)置監(jiān)測點,若實際執(zhí)行結(jié)果滿足接收判斷,則判定程序運行正常,否則則出錯。主動式查錯設(shè)計一個檢測監(jiān)視器,在規(guī)定時間或規(guī)定的時間間隔內(nèi),或者是在系統(tǒng)處于閑置或等待的狀態(tài)下,主動對系統(tǒng)進行檢測。查錯技術(shù)命令/響應(yīng):ping/echo一個組件發(fā)送ping,期望在預(yù)期時間內(nèi)收到被審查組件的響應(yīng)心跳:heartbeat組件定期發(fā)送消息(心跳),如果另一個組件沒有收到,則通知糾錯組件。異常:exceptions異常處理的程序接收判斷:judgment日志和監(jiān)控:logging/monitoring81被動式查錯原則零信任原則在設(shè)計任何一個單元或者模塊時,需要假設(shè)和它相互關(guān)聯(lián)的單元或者模塊存在錯誤。當該單元或者模塊接收到數(shù)據(jù)時,首先假設(shè)該數(shù)據(jù)是一個出錯數(shù)據(jù),無論該數(shù)據(jù)來源于何處,然后盡力去證實該假設(shè)是否成立。對硬件錯誤進行檢測設(shè)計例如電源失效、電磁干擾、系統(tǒng)不穩(wěn)定、接口故障、干擾信號以及錯誤操作等的設(shè)計。數(shù)據(jù)檢測設(shè)計按照已知的數(shù)據(jù)極限,檢查數(shù)據(jù)范圍。82錯誤恢復(fù)——修復(fù)接收表決,即N版本程序(NVP)技術(shù)冗余處理器的每個進程都有相同的輸入,它們計算并發(fā)送給表決者一個輸出值。(如果檢測到某個錯誤,就停止該處理器)表決規(guī)則可以是“多數(shù)規(guī)則”或“首選組件”等注意多樣性問題——冗余組件運行不同算法主動冗余(熱重啟)所有冗余組件都以并行的方式對事件做出反應(yīng)(僅用其一)發(fā)生錯誤,就切換到某一個組件利用可靠傳輸協(xié)議,將傳遞給任何一個冗余組件的消息,都傳遞給其他所有組件被動冗余(暖重啟/多重冗余)由一個組件負責對事件作出響應(yīng),并通知其他組件更新狀態(tài)出錯后,在繼續(xù)提供服務(wù)之前,確保備用狀態(tài)是最新的可以經(jīng)常切換“主組件”,保持新狀態(tài)備件(冷重啟)替換各種的出現(xiàn)故障的組件定期對備件進行備份、設(shè)定檢查點,出錯后重新初始化?;謴?fù)時間可能稍長冗余技術(shù)83示例:航空控制軟件的N版本程序(NVP)設(shè)計要求

根據(jù)系統(tǒng)安全評估,軟件級別分為:A級軟件:軟件的失效或故障可能導(dǎo)致災(zāi)難性事故發(fā)生;B級軟件:軟件的失效或故障可能導(dǎo)致危險性事故發(fā)生;C級軟件:軟件的失效或故障不會導(dǎo)致人身安全問題,但會對機組造成較大影響;D級軟件:對飛行安全的影響已降低到較小的程度;E級軟件:無安全影響。NVP設(shè)計A級軟件,推薦的失效容限為2,要進行5版本程序設(shè)計;B級軟件,推薦的失效容限為1,要進行3版本程序設(shè)計;C和D級,無需軟件冗余。84錯誤恢復(fù)——重新引入影子Shadow以前出現(xiàn)故障的物體,在恢復(fù)之前,模仿工作組件的內(nèi)容狀態(tài)再同步組件重新提供服務(wù)之前,需要更新其狀態(tài)檢查點/回滾使用上一個一致的檢查點85錯誤預(yù)防軟件運維時運行監(jiān)測利用監(jiān)視進程檢查進程中存在的錯誤,監(jiān)視進程可以刪除沒有在運行的進程。從服務(wù)中刪除執(zhí)行某些活動,防止預(yù)期可能發(fā)生的錯誤重啟,防止內(nèi)存泄露軟件研發(fā)時減少和控制軟件的程序復(fù)雜度模塊化設(shè)計冗余設(shè)計提高數(shù)據(jù)傳遞和轉(zhuǎn)換的精確性改善信息傳遞方式軟件健壯性設(shè)計事務(wù):將一些有序的步驟綁定為事務(wù)86可維護性戰(zhàn)術(shù)刺激響應(yīng)戰(zhàn)術(shù)87局部化變更維持語義一致性語義,指的是模塊內(nèi)各責任之間的關(guān)系要確保這些責任能夠協(xié)調(diào)一致地工作,而不過多地依賴其他模塊耦合、內(nèi)聚的程度是度量一致性的一個指標同時還應(yīng)該根據(jù)是否支持預(yù)期的變更,來判斷一致性程度預(yù)期可能的變更在實踐中,往往很難預(yù)期所有重要的變更(經(jīng)驗)泛化該模塊使模塊能根據(jù)輸入計算更廣泛的功能可以把輸入看作是為該模塊定義了一種語言,對其進行解釋限制可能的選擇實際中可選范圍往往很大,可能會影響很多模塊例如,處理器的變更,可以限制使用相同家族的成員正交88防止連鎖反應(yīng)信息隱藏信息隱藏,就是把某個實體的責任分解為更小的部分,并選擇使哪些信息成為公有的,哪些私有,目的是使變更被隔離在一個模塊內(nèi)維持現(xiàn)有接口創(chuàng)建抽象接口,與具體實現(xiàn)相分離添加接口:提供最新的服務(wù)或數(shù)據(jù)添加適配器:給A添加適配器,把A包裝起來,提供原始A的信息限制通信路徑限制與給定模塊A共享數(shù)據(jù)的模塊。即減少兩類模塊的數(shù)量,1,使用由A生產(chǎn)的數(shù)據(jù)的模塊數(shù)量。2,給A提供數(shù)據(jù)的模塊的數(shù)量仲裁者的使用對于非語義型的依賴,可以在A、B間插入一個仲裁者,管理與該依賴相關(guān)的活動89推遲綁定時間支持部署時(變更)及非開發(fā)人員的修改運行時注冊即插即用。但需要額外的管理注冊的開銷配置文件在開機啟動時,根據(jù)其設(shè)置參數(shù)多態(tài)允許方法調(diào)用的后期綁定組件更換允許載入時綁定遵守已定義的協(xié)議允許各個獨立進程在運行時綁定90性能戰(zhàn)術(shù)刺激響應(yīng)戰(zhàn)術(shù)91資源需求提高計算效率改進關(guān)鍵算法。用一種資源換取另一種資源減少計算開銷例如刪除一些仲裁者管理事件速率降低對環(huán)境監(jiān)視的強度控制采樣頻率限制執(zhí)行時間限制隊列的大小92資源管理引入并發(fā)不同的線程上處理不同的事件流維持數(shù)據(jù)或計算的多個副本(注意一致性)例:高速緩存。增加可用資源提供額外的處理器、內(nèi)存、速度更快的網(wǎng)絡(luò)等。93資源仲裁:對競爭的資源進行調(diào)度常見的調(diào)度策略FIFO:適用于相同優(yōu)先級固定優(yōu)先級調(diào)度:可能使低優(yōu)先級請求等待過多時間。常見優(yōu)先級策略為:語義重要性時限時間:時限短(到期)的請求優(yōu)先級高速率單調(diào):對于周期任務(wù),選擇周期短的優(yōu)先級高動態(tài)優(yōu)先級輪轉(zhuǎn)時限優(yōu)先靜態(tài)(脫機)調(diào)度系統(tǒng)執(zhí)行前,基于被調(diào)度任務(wù)的時間參數(shù)來安排調(diào)度適用具有確定性時間要求的系統(tǒng),例如空管。94示例:實時嵌入式軟件的性能戰(zhàn)術(shù)跳過操作系統(tǒng)直接訪問硬件軟硬件協(xié)同,利用硬件來實現(xiàn)軟件的功能,例如進程間通信發(fā)揮硬件性能計算和IO的并行化用空間換時間,例如cache內(nèi)存池進程池、線程池……95示例:淘寶的性能和可用性戰(zhàn)術(shù)應(yīng)用服務(wù)器微服務(wù)架構(gòu)容器、集群和彈性擴容負載均衡和無狀態(tài)服務(wù)CDN數(shù)據(jù)庫讀寫分離分庫分表集群內(nèi)存數(shù)據(jù)庫NoSQL數(shù)據(jù)庫設(shè)計戰(zhàn)術(shù)多級緩存消息隊列、異步處理和限流異地多活熔斷和降級……96安全性戰(zhàn)術(shù)刺激響應(yīng)戰(zhàn)術(shù)97抵抗攻擊對用戶身份進行驗證確保用戶或計算機是它所聲稱的用戶或計算機密碼、數(shù)字證書對用戶進行授權(quán)經(jīng)過身份驗證的用戶,有什么樣的訪問權(quán)限訪問控制維護數(shù)據(jù)的機密性加密數(shù)據(jù),VPN,SSL維護完整性限制暴露信息限制訪問防火墻根據(jù)消息源或目的端口,來限制訪問98檢測攻擊將網(wǎng)絡(luò)通信模式與數(shù)據(jù)庫中的進行對比檢測攻擊的“傳感器”將各傳感器進行融合記錄日志分析工具和控制臺99100從攻擊中恢復(fù)恢復(fù)狀態(tài)(防守性)維持重要副本數(shù)據(jù)識別攻擊者(懲罰性)維持審計追蹤示例:平安銀行系統(tǒng)的安全性戰(zhàn)術(shù)101可測試性戰(zhàn)術(shù)刺激響應(yīng)戰(zhàn)術(shù)102可測試性戰(zhàn)術(shù)管理輸入輸出記錄/回放:捕獲跨接口的信息,將其作為測試專用軟件的輸入將接口和實現(xiàn)分離占位程序可以使得系統(tǒng)剩余部分得到檢測特化訪問路線/接口測試工具獨立地捕獲某些變量值內(nèi)部監(jiān)視內(nèi)置監(jiān)視器103易用性戰(zhàn)術(shù)刺激響應(yīng)戰(zhàn)術(shù)104易用性戰(zhàn)術(shù)運行時用戶主動:撤銷混合主動:提供進展指示器系統(tǒng)主動:預(yù)測與用戶相關(guān)的某些信息維持任務(wù)的一個模型維持用戶的一個模型維持系統(tǒng)的一個模型設(shè)計時將用戶接口(可能頻繁改變)與應(yīng)用的其余部分分離開支持該戰(zhàn)術(shù)的架構(gòu)模式:MVC、PAC、Seeheim、Arch/Slinky105多目標權(quán)衡不同質(zhì)量屬性之間往往存在沖突,例如:性能VS.安全性可靠性VS.靈活性可維護性VS.高效性……排出優(yōu)先級,進行多目標權(quán)衡106討論你的大作業(yè)項目中哪個非功能需求(質(zhì)量因素)最重要?采用哪些設(shè)計戰(zhàn)術(shù)?10702-質(zhì)量因素的架構(gòu)設(shè)計戰(zhàn)術(shù)01-軟件架構(gòu)的多個視圖03-軟件架構(gòu)的質(zhì)量108CharacteristicsofaGoodArchitectureResilientSimpleApproac

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論