軟件架構風格是描述某一特定應用領域中系統組織方式的慣用模式,按照軟件架構風格,物聯網系統屬于( )軟件架構風格。
A:層次型
B:事件系統
C:數據線
D:C2
答案:A
解析:
物聯網分為多個層次,一般有感知層、網絡層、應用層等
◆軟件體系結構風格是描述某一特定應用領域中系統組織方式的慣用模式。架構風格定義一個系統家族,即一個架構定義、一個詞匯表和一組約束。詞匯表中包含一些構件和連接件類型,而這組約束指出系統是如何將這些構件和連接件組合起來的。
◆架構風格反映了領域中眾多系統所共有的結構和語義特性,并指導如何將各個模塊和子系統有效地組織成一個完整的系統。對軟件架構風格的研究和實踐會促進對設計的重用,一些經過實踐證實的解決方案也可以可靠地用于解決新的問題。
◆架構設計的一個核心問題是能否達到架構級的軟件復用。
◆架構風格定義了用于描述系統的術語表和一組指導構建系統的規則。
◆數據流風格:面向數據流,按照一定的順序從前向后執行程序,代表的風格有批處理序列、管道-過濾器
◆調用/返回風格: 構件之間存在互相調用的關系,一般是顯式的調用,代表的風格有 主程序/子程序、面向對象、層次結構。
◆獨立構件風格: 構件之間是互相獨立的,不存在顯式的調用關系,而是通過某個事件觸發、異步的方式來執行,代表的風格有 進程通信、事件驅動系統(隱式調用)
◆虛擬機風格: 自定義了一套規則供使用者使用,使用者基于這個規則來開發構件,能夠跨平臺適配,代表的風格有 解釋器、基于規則的系統。
◆倉庫風格: 以數據為中心,所有的操作都是圍繞建立的數據中心進行的,代表的風格有 數據庫系統、超文本系統、黑板系統。
軟件體系結構風格是描述某一特定應用領城中系統組織方式的慣用模式。其中,在批處理風格軟件體系結構中,每個處理步驟是一個單獨的程序,每一步必須在前一步結束后才能開始,并且數據必須是完整的,以(1)的方式傳遞,基于規則的系統包括規則集、規則解釋器、規則/數據選擇器及(2)。
1-A:迭代 1-B:整體
1-C:統一風格 1-D:遞增
2-A:解釋內存 2-B:虛擬機
2-C:數據 2-D:工作內存
答案:1-B、2-D
解析:
批處理風格:
- 每個處理步驟是一個單獨的程序;
- 每一步必須在前一步結束后才能開始;
- 數據必須是完整的;
- 以整體的方式傳遞。
基于規則的系統包括規則集、規則解釋器、規則/數據選擇器及工作內存,一般用于人工智能和決策支持系統中。
1、數據流風格
數據流風格
◆批處理序列: 構件為一系列固定順序的計算單元,構件之間只通過數據傳遞交互。每個處理步驟是一個獨立的程序,每一步必須在其前一步結束后才能開始,數據必須是完整的,以整體的方式傳遞。
◆管道-過濾器: 每個構件都有一組輸入和輸出,構件讀取輸入的數據流,經過內部處理,產生輸出數據流。前一個構件的輸出作為后一個構件的輸入,前后數據流關聯。過濾器就是構件,連接件就是管道。
◆早期編譯器就是采用的這種架構(數據流),要一步一步處理的,均可考慮此架構風格
◆二者區別在于批處理前后構件不一定有關聯,并且是作為整體傳遞,即必須前一個執行完才能執行下一
管道-過濾器是前一個輸出作為后一個輸入,前面執行到部分可以開始下一個的執行。
批處理:必須是一件一件的處理,先處理第一件,然后第二件,然后第三件…,前一件結束了,下一件才能開始。
? 構件1、構件2、構件3…它們是一個整體。
管道-過濾器:比如流媒體,邊看變緩存、邊看邊下載的這種方式就是管道過濾器;而必須先下載完才能看的這是批處理。這里就可以把緩存和看視頻看成兩個構件。
構件可以理解為一個功能,一個類模塊…
2、調用/返回風格
調用/返回風格
◆主程序/子程序: 單線程控制,把問題劃分為若干個處理步驟,構件即為主程序和子程序,子程序通常可合成為模塊。過程調用作為交互機制,充當連接件的角色。
◆面向對象: 構件是對象,對象是抽象數據類型的實例。連接件即是對象間交互的方式,對象是通過函數和過程的調用來交互的。
◆層次結構: 構件組成一個層次結構,連接件通過決定層間如何交互的協議來定義。每層為上一層提供服務,使用下一層的服務,只能見到與自己鄰接的層。修改某一層,最多影響其相鄰的兩層(通常只能影響上層)。
◆層次結構優點:
1、支持基于可增加抽象層的設計,允許將一個復雜問題分解成一個增量步驟序列的實現。
2、不同的層次處于不同的抽象級別,越靠近底層,抽象級別越高。
3、由于每一層最多只影響兩層,同時只要給相鄰層提供相同的接口,允許每層用不同的方法實現,同樣為軟件復用提供了強大的支持。
◆缺點:
1、并不是每個系統都可以很容易的劃分為分層的模式
2、很難找到一個合適的、正確的層次抽象方法
越靠近底層,抽象級別越高。 的意思是 越底層,越跟業務關系不大,越偏向通用的數據結構、通用的算法等。
1、層次架構風格
1、兩層 C/S架構
◆兩層C/S架構: 客戶端和服務器都有處理功能,現在已經不常用,原因有:開發成本較高、客戶端程序設計復雜、信息內容和形式單一、用戶界面風格不一、軟件移植困難、軟件維護和升級困難、新技術不能輕易應用、安全性問題、服務器端壓力大難以復用。
這里表示層為客戶端;數據層為服務端。
2、三層C/S架構
表示層負責用戶接口;
功能層(業務邏輯層)負責功能處理;
數據層負責數據持久存儲;
◆三層C/S架構:將 處理功能獨立出來,表示層和數據層都變得簡單。 表示層在客戶機上,功能層在應用服務器上,數據層在數據庫服務器上。即將兩層C/S架構中的數據從服務器中獨立出來了。其優點下面四點:
◆ 各層在邏輯上保持相對獨立,整個系統的邏輯結構更為清晰,能提高系統和軟件的可維護性和可擴展性;
◆允許 靈活有效的選用相應的平臺和硬件系統,具有良好的可升級性和開放性
◆各層可以 并行開發,各層也可以選擇各自最適合的開發語言
◆功能層有效的隔離表示層與數據層,為嚴格的安全管理奠定了堅實的基礎, 整個系統的管理層次也更加合理和可控制
◆三層C/S架構設計的關鍵在于各層之間的通信效率,要慎重考慮三層間的通信方法、通信頻度和數據量,否則即使分配給各層的硬件能力很強,性能也不高。
3、三層B/S架構
◆三層B/S架構是三層C/S架構的變種,將客戶端變為用戶客戶端上的瀏覽器,將應用服務器變為網絡上的WEB服務器,又稱為0客戶端架構,雖然不用開發客戶端,但有很多缺點:
◆B/S架構缺乏對動態頁面的支持能力,沒有集成有效的數據庫處理功能
◆安全性難以控制;
◆在數據查詢等響應速度上,要遠遠低于C/S架構:
◆數據提交一般以頁面為單位,數據的動態交互性不強,不利于OLTP應用
4、混合架構風格
◆混合架構風格
內外有別模型:企業內部使用C/S,外部人員訪問使用B/S.
查改有別模型:采用B/S查詢,采用C/S修改。
混合架構實現困難,且成本高。
5、富互聯網應用RIA(即小程序)
富互聯網應用RIA
◆彌補三層B/S架構存在的問題,RIA是一種用戶接口,比用HTML實現的接口
更加健壯,且有可視化內容,本質還是網站模式,其優點如下:
◆RIA結合了C/S架構反應速度快、交互性強的優點與B/S架構傳播范圍廣及容易傳播的特性;
◆RIA簡化并改進了B/S架構的用戶交互
◆數據能夠被緩存在客戶端,從而可以實現一個比基于HTML的響應速度更快且數據往返于服務器的次數更少的用戶界面。
◆本質還是0客戶端,借助于高速網速實現必要插件在本地的快速緩存。增強頁面對動態頁面的支持能力,典型的如小程序。
6、MVC 架構
MVC架構
(1)控制器(Controller):是應用程序中處理用戶交互的部分。通常控制器負責從視圖讀取數據,控制用戶輸入,并向模型發送數據。
(2)模型(Model):是應用程序中用于處理應用程序數據邏輯的部分。通常模型對象負責在數據庫中存取數據。模型表示業務數據和業務邏輯。
(3)視圖(View):是應用程序中處理數據顯示的部分。通常視圖是依據模型數據創建的。是用戶看到并與之交互的界面。視圖向用戶顯示相關的數據,并能接收用戶的輸入數據,但是它并不進行任何實際的業務處理:
7、MVP 架構
MVP:MVP是把MVC中的Controller換成了Presenter(呈現),目的就是為了完全切斷view跟Model之間的聯系,由Presenter充當橋梁,做到View-Model之間通信的完全隔離。
MVP特點:
1、M、V、P之間雙向通信
2、View與 Model不通信,都通過 Presenter傳遞。Presenter完全把Model和View進行了分離,主要的程序邏輯在Presenter里實現:
3、View 非常薄,不部署任何業務邏輯,稱為”被動視圖”(PassiveView)。即沒有任何主動性,而 Presenter非常厚,所有邏輯都部署在那里
4、Presenter與具體的View是沒有直接關聯的,而是通過定義好的接口進行交互,從而使得在變更View時候可以保持Presenter的不變,這樣就可以重用。
這里 MVP 架構雷同于 三層C/S架構。
8、MVVM
MVVM:MVVM模式和MVC模式類似,主要目的是分離視圖(View)和模型(Model),有幾大優點:
1、低耦合,視圖(View)可以獨立于Model變化和修改,ViewModel可以綁定到不同的”View"上,當View變化的時候Model可以不變,當Model變化的時候View也可以不變。
2、可重用性,可以把一些視圖邏輯放在一個ViewModel里面,讓很多view重用這段視圖邏輯。
3、獨立開發,開發人員可以專注于業務邏輯和數據的開發(ViewModel),設計人員可以專注于頁面設計。
4、可測試,界面向來是比較難于測試的,而現在測試可以針對ViewModel來寫。
3、獨立構件風格
◆進程通信: 構件是獨立的進程,連接件是消息傳遞。構件通常是命名過程,消息傳遞的方式可以是點對點、異步或同步方式,以及遠程過程(方法)調用(RPC)等。
◆事件驅動系統(隱式調用): 構件不直接調用一個過程,而是觸發或廣播一個或多個事件。構件中的過程在一個或多個事件中注冊,當某個事件被觸發時系統自動調用在這個事件中注冊的所有過程。一個事件的觸發就導致了另一模塊中的過程調用。這種風格中的構件是匿名的過程,它們之間交互的連接件往往是以過程之間的隱式調用來實現的。典型的比如:中斷。
◆主要優點是為軟件復用提供了強大的支持,為構件的維護和演化帶來了方便;缺點是構件放棄了對系統計算的控制(因為是隱式控制,只能被動控制)。
4、虛擬機風格
虛擬機風格
◆解釋器: 通常包括一個完成解釋工作的解釋引擎、一個包含將被解釋的代碼的存儲區、一個記錄解釋引擎當前工作狀態的數據結構,以及一個記錄源代碼被解釋執行的進度的數據結構。具有解釋器風格的軟件中含有一個虛擬機,可以仿真硬件的執行過程和一些關鍵應用,缺點是執行效率低。
◆基于規則的系統: 包括規則集、規則解釋器、、規則/數據選擇器和工作內存,一般用在人工智能領域和DSS(決策支持)中。
架構風格和設計模式:架構風格好比裝修時的整體風格,比如歐式分風格;設計模式是在這個歐式風格下,開始對每個房間進行設計(不同房間可能是歐式風格下的不同類型)。
5、倉庫風格
倉庫風格,又叫數據共享風格,它是以數據為中心的。
◆數據庫系統: 構件主要有兩大類,一類是中央共享數據源,保存當前系統的數據狀態;另一類是多個獨立處理單元,處理單元對數據元素進行操作。 數據庫系統就是常說的數據庫。
◆黑板系統: 包括知識源、黑板和控制三部分。知識源包括若干獨立計算的不同單元,提供解決問題的知識。知識源響應黑板的變化,也只修改黑板; 黑板是一個全局數據庫,包含問題域解空間的全部狀態,是知識源相互作用的唯一媒介;知識源響應是通過黑板狀態的變化來控制的。黑板系統通常應用在對于解決問題沒有確定性算法的軟件中(信號處理、問題規劃和編譯器優化等)。 黑板系統就好比老師在黑板上寫方程等知識;知識源就是老師。
◆超文本系統: 構件以網狀鏈接方式相互連接,用戶可以在構件之間進行按照人類的聯想思維方式任意跳轉到相關構件。是一種非線性的網狀信息組織方法,它以節點為基本單位,鏈作為節點之間的聯想式關聯。通常應用在互聯網領域。HTTP 就是超文本協議。
◆現代編譯器的集成開發環境一般采用數據倉庫(即以數據為中心的架構風格)架構風格進行開發,其中心數據就是程序的語法樹。
6、閉環控制
當軟件被用來操作一個物理系統時,軟件與硬件之間可以粗略的表示為一個反饋循環,這個反饋循環通過接受一定的輸入,確定一系列的輸出,最終使環境達到一個新的狀態,適合于嵌入式系統,涉及連續的動作與狀態,
比如典型的就是:空調。當前空調是30°,然后立即調到26°,此時房間的溫度會慢慢的降到26°,而不會立即使房間降到26°。這個過程中空調會不斷地調整冷氣量等(不斷地反饋),直到房間溫度基本維持在26°。
比如典型的:汽車的自適應巡航。
7、C2 風格
C2體系結構風格可以概括為: 通過連接件綁定在一起的按照一組規則運作的并行構件網絡。 C2風格中的系統組織規則如下:
(1)系統中的構件和連接件都有一個頂部和一個底部;
(2)構件的頂部應連接到某連接件的底部,構件的底部則應連接到某連接件的頂部,而構件與構件之間的直接連接是不允許的;
(3)一個連接件可以和任意數目的其它構件和連接件連接;
(4)當兩個連接件進行直接連接時,必須由其中一個的底部到另一個的頂部,
架構風格名 | 常考關鍵字及實例 | 簡介 |
---|---|---|
數據流-批處理 | 傳統編譯器,每個階段產生的 | 一個接一個,以整體為單位 |
數據流-管道-過濾器 | 結果作為下一個階段的輸入, 區別在于整體。 | 一個接一個,前一個輸出是后一個輸入。 |
調用/返回-主程序/子程序 | 顯示調用,主程序直接調用子程序。 | |
調用/返回-面向對象 | 對象是構件,通過對象調用封裝的方法和屬性。 | |
調用/返回-層次結構 | 分層,每層最多影響其上下兩層,有調用關系。 | |
獨立構件-進程通信 | 進程間獨立的消息傳遞,同步異步 | |
獨立構件-事件驅動 (隱式調用) | 事件觸發推動動作,如程序語言的語法高亮、語法錯誤提示 | 不直接調用,通過事件驅動。 |
虛擬機-解釋器 | 自定義流程,按流程執行,規則隨時改變,靈活定義,業務靈活組合。 機器人。 | 解釋自定義的規則,解釋引擎、存儲區、數據結構。執行效率低 |
虛擬機-規則系統 | 自定義流程,按流程執行,規則隨時改變,靈活定義,業務靈活組合。 機器人。 | 規則集、規則解釋器、選擇器和工作內存,用于 DSS 和人工智能、專家系統。 |
倉庫-數據庫 | 現代編譯器的集成開發環境IDE,以數據為中心。又稱為數據共享風格 | 中央共享數據源,獨立處理單元。 |
倉庫-超文本庫 | 現代編譯器的集成開發環境IDE,以數據為中心。又稱為數據共享風格 | 網狀鏈接,多用于互聯網。 |
倉庫-黑板 | 現代編譯器的集成開發環境IDE,以數據為中心。又稱為數據共享風格 | 語音識別、知識推理等問題復雜、解空間很大、求解過程不確定的這一類軟件系統,黑板、知識源、控制。 |
閉環-過程控制 | 汽車巡航定速,空調溫度調節設定參數,并不斷調整 | 發出控制命令并接受反饋,循環往復達到平衡。 |
C2 風格 | 構件和連接件、頂部和底部 | 通過連接件綁定在一起按照一組規則運作的并行構件網絡。 |
8、面向服務的架構風格
◆SOA是一種粗粒度、松耦合服務架構,服務之間通過簡單、精確定義接口進行通信,不涉及底層編程接口和通信模型。
◆在SOA中,服務是一種為了滿足某項業務需求的操作、規則等的邏輯組合,它包含一系列有序活動的交互,為實現用戶目標提供支持。
◆SOA并不僅僅是一種開發方法,還具有管理上的優點,管理員可直接管理開發人員所構建的相同服務。多個服務通過企業服務總線提出服務請求,由應用管理來進行處理,如下:
粗粒度:就是功能包含的越來越多;松耦合:就是服務之間是相互分離的
ESB 服務總線:比如服務1要調用服務2、服務3,而服務2又調用了服務3、服務4。不使用服務總線時,一般會想著直接在服務1里調用服務2、服務3,但是服務1調用的服務2、服務3中,服務2又同時調用了服務3、服務4,這個時候都在服務內部調用就比較麻煩、繁瑣了。而服務總線就是將所有服務都掛在上面,任何服務想要調用別的服務,就要先給服務總線發消息,然后由服務總線轉發消息給要調用的服務,進而調用對應服務。
這樣就從原本的服務1里調用服務2、服務3這樣的多對多變成了服務1發消息給服務總線,服務總線發消息給要調用的服務變成了一對多。
◆實施SOA的關鍵目標是實現企業IT資產重用的最大化,在實施SOA過程中要牢記以下特征:可從企業外部訪問、隨時可用(服務請求能被及時響應)、粗粒度接口(粗粒度提供一項特定的業務功能,而細粒度服務代表了技術構件方法)、服務分級、松散耦合(服務提供者和服務使用者分離)、可重用的服務及服務接口設計管理、標準化的接口(WSDL、SOAP、XML是核心)、支持各種消息模式、精確定義的服務接口。
◆從基于對象到基于構件再到基于服務,架構越來越松散耦合,粒度越來越粗,接口越來越標準。
◆基于服務的構件與傳統構件的區別有四點:
①服務構件粗粒度,傳統構件細粒度居多;
②服務構件的接口是標準的,主要是WSDL接口,而傳統構件常以具體API形式出現;
③服務構件的實現與語言是無關的,而傳統構件常綁定某種特定的語言,
④服務構件可以通過構件容器提供QoS的服務,而傳統構件完全由程序代碼直接控制。
SOA 中應用的關鍵技術如下表:
功能 | 協議 |
---|---|
發現服務 | UDDI、DISCO |
描述服務 | WSDL、XML Schema |
消息格式層 | SOAP、REST |
編碼格式層 | XML(DOM,SAX) |
傳輸協議層 | HTTP、TCP/IP、SMTP等 |
◆UDDI: 是一套基于WEB的、分布式的、為Webservice提供的、信息注冊中心的實現標準規范,同時也包含一組使企業能將自身提供的Webservice注冊,以使別的企業能夠發現的訪問協議的實現標準,用于WEB服務注冊統一描述、發現及集成。
◆WSDL(Web Service描述語言): 將Web服務描述定義為一組服務訪問點,客戶端可以通過這些服務訪問點對包含面向文檔信息或面向過程調用的服務進行訪問(類似遠程調用),用于描述服務。
◆SOAP(簡單對象訪問協議): 是用于交換XML編碼信息的輕量級協議,用于傳遞信息,實現 Web 服務的遠程調用。
◆XML(可擴展標記語言): 是WebService平臺中表示數據的基本格式,用于數據交換
◆BPEL(面向Web服務的業務流程執行語言):用于將分散的、功能單一的 Web 服務組織成一個復雜的有機應用。使用BPEL,用戶可以通過組合、編排和協調Web服務自上而下實現面向服務的體系結構(SOA)。BPEL提供了一種相對簡單易懂的方法,可將多個Web服務組合到一個新的復合服務(稱作業務流程)中。
1、SOA 的三種實現方式
1、WEB Service
服務提供者、服務注冊中心(中介,提供交易平臺,可有可無)、服務請求者。服務提供者將服務描述發布到服務注冊中心,供服務請求者查找,查找到后,服務請求者將綁定查找結果。如圖:
2、服務注冊表
(1)服務注冊: 應用開發者(服務提供者)在注冊表中公布服務的功能。
(2)服務位置: 服務使用者(服務應用開發者),幫助他們查詢注冊服務,尋找符合自身要求的服務。
(3)服務綁定: 服務使用者利用檢索到的服務接口來編寫代碼,所編寫的代碼將與注冊的服務綁定,調用注冊的服務,以及與它們實現互動。
3、ESB
◆企業服務總線ESB:簡單來說是一根管道,用來連接各個服務節點。 ESB的存在是為了集成基于不同協議的不同服務,
ESB 做了消息的轉化、解釋以及路由的工作,以此來讓不同的服務互聯互通。
◆包括: 客戶端(服務請求者)、基礎架構服務(中間件)、核心集成服務(提供服務)
◆ESB的特點:
1、SOA的一種實現方式,ESB在面向服務的架構中起到的是總線作用,將各種服務進行連接與整合;
2、描述服務的元數據和服務注冊管理
3、在服務請求者和提供者之間傳遞數據,以及對這些數據進行轉換的能力,并支持由實踐中總結出來的一些模式如同步模式、異步模式等:
4、發現、路由、匹配和選擇的能力,以支持服務之間的動態交互,解耦服務請求者和服務提供者。高級一些的能力,包括對安全的支持、服務質量保證、可管理性和負載平衡等。
面向服務系統構建過程中,()用于實現Web服務的遠程調用,()用來將分散的、功能單一的Web服務組織成一個復雜的有機應用。
A.UDDl(Universal Description, Discovery and Integration)
B.WSDL(Web Service Description Language)
C.SOAP(Simple Object Access Protocol)
D.BPEL(Business Process Execution Language)
A.UDDl(Universal Description, Discovery and Integration)
B.WSDL(Web Service Description Language)
C.SOAP(Simple Object Access Protocol)
D.BPEL(Business Process Execution Language)
答案:C、D