日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

做好設計:架構模式

來源: 責編: 時間:2024-02-05 09:32:13 277觀看
導讀在 “軟件設計要素初探”[1] 一文,嘗試從軟件設計的整體角度,綜合討論了軟件設計的各種要素。本文探討確定系統整體結構的架構模式。概述「架構模式是系統組件及組件交互的模式,決定了處理數據和領域對象的全局控制結構

在 “軟件設計要素初探”[1] 一文,嘗試從軟件設計的整體角度,綜合討論了軟件設計的各種要素。本文探討確定系統整體結構的架構模式。1wG28資訊網——每日最新資訊28at.com

概述

「架構模式是系統組件及組件交互的模式,決定了處理數據和領域對象的全局控制結構。」1wG28資訊網——每日最新資訊28at.com

架構模式包含三個要素:1wG28資訊網——每日最新資訊28at.com

  • 劃分方式:是在技術層面劃分,還是在領域層面劃分。
  • 核心組件:包含哪些核心組件,組件之間如何交互。
  • 設計重點:每一種架構模式都有其核心概念和設計重點。

架構模式評價

架構模式評價是指了解各種架構風格的優勢和劣勢,從而為業務選擇適合的架構。1wG28資訊網——每日最新資訊28at.com

  • 簡單性:理解、構建和維護系統的簡單性。越簡單越好。
  • 模塊化:模塊內內聚的程度(或模塊之間的耦合程度)。核心架構概念。《Fundamentals of Software Architecture》第三章專門探討了模塊化。后續單獨寫一篇文章。
  • 性能: 架構支持緩存、異步、并發、批量等性能手段的能力。
  • 高可用:故障恢復時長,不可用時間、不停機服務。出現局部故障時能否不影響服務可用性或者減少影響范圍。不可用時長越少越好,影響范圍越小越好。這很考驗互聯網企業的技術水平。最近兩年互聯網企業發生的幾起大規模不可用事件,也能給予人很好的啟發。支持高可用的技術主要有復制、冗余、負載均衡、異地多活等。
  • 可靠性:考慮各組件可靠性及網絡拓撲對整體系統可靠性的影響。如果任一組件失效都會導致系統失效,則可靠性為組件可靠性之積;如果所有組件失效才會導致系統失效,則可靠性為組件可靠性的最低值。此外,網絡流量大的系統要達到高可靠性需要付出更多的努力。
  • 可擴展:擴展新功能且對現有系統不影響的改動成本。越少越好。
  • 可伸縮:通過水平方式擴展系統能力(性能和容量)。越簡單越好。
  • 容錯:錯誤發生后影響系統服務的程度。越少越好。
  • 易測性:mock,單一模塊測試,自動化測試的難易程度。越容易越好。
  • 易部署性:整體系統部署成本及部署風險;改動后的部署成本和部署風險等。

架構模式清單

分層模式

圖片圖片1wG28資訊網——每日最新資訊28at.com

分層架構是一種基于職責的單體架構。體現了康威定律:組織結構決定系統設計和開發。當還沒有確定架構模式時,分層模式是一個好的起點。網絡棧協議是分層模式的典型應用。1wG28資訊網——每日最新資訊28at.com

將應用劃分為多層,定義各層的接口、職責,以及各層之間的通信與交互。業務系統通常會劃分為表現層、業務邏輯層、持久層、數據層。業務邏輯層還可以分離出領域層。應用分層模式時,為確保系統可維護性,通常第j+1層只依賴于第j層的接口和服務。在性能場合下,可能會有跨層依賴的情況;應對特殊場景的設計中,會有“第j層的服務依賴于第j+1層的服務”的反向依賴關系。但這是個反模式,最好不要這么做。1wG28資訊網——每日最新資訊28at.com

分層體現了關注點分離原則。設計重點在于層的開閉與隔離(是否允許跨層訪問)。開閉是指某一層的上一層能否直接繞過本層訪問其下一層。開是能夠,閉是不能。層的閉可以起到隔離作用,即層的下一層改動不會影響到層的上一層,從而起到解耦的作用。如果跨層訪問非常多,可能意味著分層模式不太適合。1wG28資訊網——每日最新資訊28at.com

分層模式的最大優點是簡單易用。定義好各層的職責和邊界,就可以愉快地編碼了。1wG28資訊網——每日最新資訊28at.com

設計要素:1wG28資訊網——每日最新資訊28at.com

  • 劃分方式:Technical-partitioned。
  • 核心組件:Layer
  • 設計重點:層的開閉。
  • 優點:單體應用;簡單,容易理解與構建。
  • 缺點:規模擴大后簡單性優點被削弱;少量代碼改動就需要整體重新編譯署和回歸測試,部署風險較高,可測試性低,可伸縮性低,容錯性低;需要手動添加負載均衡、多線程、緩存等方式來提升性能和高可用。

Pipeline模式

圖片圖片1wG28資訊網——每日最新資訊28at.com

管道-過濾器鏈是一種基于流程的可擴展的單體架構。一個請求沿著管道連接的鏈路,依次由鏈上的過濾器進行處理。過濾器可以有多種類型:數據轉換、數據過濾、數據收集、數據存儲、數據顯示等。1wG28資訊網——每日最新資訊28at.com

  • Shell 基于管道的命令組合是 Pipeline 模式的范例。
  • JavaWeb應用的Servlet架構模式是“過濾器-處理器鏈”的典型應用;
  • Java stream  也是 Pipeline 模式的應用。
  • 數據同步也適合采用 Pipeline 模式,

Pipeline 模式的最大優點是簡單性與可擴展性。只要在鏈路上添加新的過濾器,即可擴展鏈路的處理能力。1wG28資訊網——每日最新資訊28at.com

設計要素:1wG28資訊網——每日最新資訊28at.com

  • 劃分方式:Technical-partitioned。
  • 核心組件:Filter, Pipeline,Context。
  • 設計重點:Filter接口交互。
  • 優點:單體應用,細粒度的模塊化;簡單,容易理解、構建和部署;可擴展性良好(添加新的Filter即可);可伸縮性良好(可以針對Filter做水平擴展);可測試性良好(可針對Filter獨立測試)。
  • 缺點:少量代碼改動就需要整體重新編譯部署,部署風險高,容錯性中(一個 Filter 失敗可能無影響,可能會導致整體流程失敗);需要手動添加負載均衡、多線程、緩存等方式來提升性能和高可用。

微內核模式

圖片圖片1wG28資訊網——每日最新資訊28at.com

亦稱“插件模式”。是一種基于功能組合的可擴展可定制的單體架構設計。1wG28資訊網——每日最新資訊28at.com

微內核架構主要由兩種組件組成:1wG28資訊網——每日最新資訊28at.com

  • 核心系統組件:提供最小可用功能集及插件的注冊、加載和管理;
  • 插件:用于擴展和定制功能。插件通常是相互獨立的。插件可以是基于運行時或編譯時。運行時部署的插件的優點是靈活裝載與卸載,插件變化核心系統不需要重新編譯部署,缺點是不太好管理插件。編譯時部署的插件是容易管理,但插件有變化則要整體重新編譯部署。

核心系統組件和插件,既可以通過接口(同步)也可以通過消息中間件(異步)來交互。通過同步來通信的優點是可靠,能及時處理插件失敗,缺點是核心系統可能受某個插件運行的影響從而影響整體。通過異步來通信的優點在于解耦,缺點在于插件如果失敗的話,很難快速通知到核心組件。1wG28資訊網——每日最新資訊28at.com

微內核的最主要特點是可擴展性和可定制。通過插件實現功能的解耦。其設計重點是定義良好的插件接口及插件交互機制,開發者只要遵循規范編寫和調試具體的插件并融入到系統,即可為系統增加新功能和新特性。1wG28資訊網——每日最新資訊28at.com

使用微內核架構的系統通常是產品型系統,有 Eclipse, Emacs, Firefox, Chrome 等。1wG28資訊網——每日最新資訊28at.com

  • 劃分方式:Technical-partitioned,domain-partitioned。
  • 核心組件:Core-System, Plug-in Components
  • 設計重點:最小功能集設計、插件加載與管理。
  • 優點:單體應用,細粒度的模塊化;簡單,容易理解、構建和部署;定制性良好;運行時插件可動態裝載或卸載;可測試性良好(針對插件單獨測試);容錯性中等(某個插件失敗不影響整體,除非Core-System失敗)。
  • 缺點:可伸縮性中;需要手動添加負載均衡、多線程、緩存等方式來提升性能和高可用。

MVC模式

MVC ,“模型-視圖-控制”, 經典的 WebUI 架構模式。控制器處理請求從而更新模型和返回視圖,模型更新驅動視圖更新,視圖請求控制器處理。1wG28資訊網——每日最新資訊28at.com

經典的 JavaMVC 框架有 Struts2, SpringMVC, 前端 MVC 框架有Extjs4。1wG28資訊網——每日最新資訊28at.com

設計要素:1wG28資訊網——每日最新資訊28at.com

  • 劃分方式:Technical-partitioned。
  • 核心組件:Model, Viewer, Controller。
  • 設計重點:model, controller
  • 優點:單體應用,細粒度的模塊化,簡單,容易理解、構建和部署;前后端分離。
  • 缺點:可靠性較低,可伸縮性低。

微服務模式

圖片圖片1wG28資訊網——每日最新資訊28at.com

微服務模式是一種基于領域服務的高度解耦的可擴展可伸縮的分布式架構。1wG28資訊網——每日最新資訊28at.com

將單體應用分解為多個具有明確領域定義的業務子域,將每個相對獨立的業務子域實現成單獨的微服務。微服務獨立管理各自子域的問題,采用不同的架構和方案來適配自身領域的問題,最終所有微服務集成起來完成整體應用功能。實現獨立自治和發展、模塊化、分工協作等。微服務解決的是基礎服務和數據層的復用問題。1wG28資訊網——每日最新資訊28at.com

  • 領域與代碼復用。
  • 同一數據源的統一訪問。
  • 單獨擴容某個服務容易。

微服務適用于中大型互聯網應用。不過微服務也有一定的復雜性。微服務面臨的問題是服務治理。主要包括:限流/熔斷降級、配置管理、日志中心、監控預警、鏈路跟蹤、故障隔離、動態擴容、分流發布、全鏈路壓測、中間件支撐、團隊組織架構適配與管理。微服務意味著要搭建一整套成熟的技術體系。1wG28資訊網——每日最新資訊28at.com

微服務要面對的若干問題:1wG28資訊網——每日最新資訊28at.com

  • 拆分粒度:容易拆得太小。需要迭代出好的粒度。
  • 通信:讓某一個領域服務成為 Mediator 或 單獨構建一個 Mediator 服務。
  • 跨服務事務:增大服務粒度,使事務變成單體的;rollback;undo 機制。

設計要素:1wG28資訊網——每日最新資訊28at.com

  • 劃分方式:Domain-partitioned。
  • 核心組件:Domain, Bounded-context
  • 設計重點:拆分粒度、數據隔離、邊界劃分。
  • 優點:分布式系統,細粒度的模塊化;可伸縮性、可擴展、高可用、容錯性佳。
  • 缺點:較為復雜,實施成本較高,性能方面中等(有很多網絡調用);可靠性中等(占用網絡帶寬、網絡延遲)。

事件驅動模式

圖片圖片1wG28資訊網——每日最新資訊28at.com

事件驅動是一種基于消息的可擴展的分布式架構。1wG28資訊網——每日最新資訊28at.com

在系統內定義一系列的組件、事件及監聽器,組件發生變化時觸發事件,通知相應的監聽器處理事件更新組件,進而觸發新的事件,如此循環直至手動終止系統或系統崩潰。GUI 應用是事件驅動模式的典型范例。事件驅動模式通過消息進行解耦。從事件驅動模式可以衍生出訂閱-消費模式。大型互聯網應用中幾乎都存在訂閱和消費業務表更新或業務消息推送的子系統。需要高穩定可用的消息中間件,并仔細評估消息延遲對用戶活動造成的影響。新品消息推送、商品消費訂閱、發貨提醒等,我們正處于一個“消息/通知的訂閱-推送-被消費”的移動互聯網時代里。1wG28資訊網——每日最新資訊28at.com

從事件驅動模式還可以衍生出 Actor 模式。基于事件驅動的分布式的、異步并發的、可伸縮的、有故障恢復能力的大型消息處理架構。一個簡單例子可參見:“混合使用ForkJoin+Actor+Future實現一千萬個不重復整數的排序(Scala示例)”[2]1wG28資訊網——每日最新資訊28at.com

設計要素:1wG28資訊網——每日最新資訊28at.com

  • 劃分方式:Technical-partitioned。
  • 核心組件:Events, Queues(Channels), Event-processors 。
  • 設計重點:廣播機制、通知機制。
  • 優點:單體或分布式系統,細粒度的模塊化;解耦良好、性能優(異步+并行處理)、可擴展性好(容易添加新事件處理器)、可伸縮性好(負載均衡)、容錯性好(異步響應、重試、補償、最終一致性)。
  • 缺點:較為復雜、可測性低(異步,執行路徑不確定性、事件樹流圖的組合非常多)。

規則-工作流模式

將系統分析成一系列的工作流節點以及規則的解析匹配,使用規則引擎來控制和運行,通過添加規則及規則流,實現可擴展性和可配置性。規則-工作流模式實現了邏輯表達與執行的分離,計算組件的復用。優點在于可擴展、可推導、自解釋性,面向業務人員使用。可參閱使用規則引擎計算工資的簡單例子:“Java Drools5.1 規則流基礎【示例】”[3],“基于規則和規則引擎的系統”[4] 。1wG28資訊網——每日最新資訊28at.com

設計要素:1wG28資訊網——每日最新資訊28at.com

  • 劃分方式:Domain-partitioned。
  • 核心組件:Rule, Workflow。
  • 設計重點:規則、規則引擎,工作流引擎。
  • 優點:單體或分布式,細粒度的模塊化;容易理解和維護;可擴展性好;易于部署和使用。
  • 缺點:可測性中等,獨立規則容易測試,但組合規則可能出現非預期結果;性能取決于引擎性能。

Restful 模式

適合資源構建與共享的規范的可伸縮的架構模式,適合于構建API接口。1wG28資訊網——每日最新資訊28at.com

  • 全局規范一致的資源邏輯命名、尋址、返回碼定義,關注資源與數據而非行為或服務。
  • 無狀態的聲明式的請求;對客戶端隱藏實現細節。
  • 通用的數據返回格式(JSON),跨語言與平臺。
  • 使用名詞而非動詞作為路徑名。

設計要素:1wG28資訊網——每日最新資訊28at.com

  • 劃分方式:Domain-partitioned。
  • 核心組件:Rule, Workflow。
  • 設計重點:規則、規則引擎,工作流引擎。
  • 優點:單體或分布式,細粒度的模塊化;容易理解和維護;可擴展性好;易于部署和使用。
  • 缺點:可測性中等,獨立規則容易測試,但組合規則可能出現非預期結果;性能取決于引擎性能。

參考資料

  • 《Fundamentals of Software Architecture》[5]
  • 《架構之美》第5章:“Web:面向資源的架構”。

Reference

[1]“軟件設計要素初探”:https://www.cnblogs.com/lovesqcc/p/7572682.html1wG28資訊網——每日最新資訊28at.com

[2]“混合使用ForkJoin+Actor+Future實現一千萬個不重復整數的排序(Scala示例)”:http://www.cnblogs.com/lovesqcc/p/5540415.html1wG28資訊網——每日最新資訊28at.com

[3]“Java Drools5.1 規則流基礎【示例】”:http://www.cnblogs.com/lovesqcc/archive/2011/01/18/4037863.html1wG28資訊網——每日最新資訊28at.com

[4]“基于規則和規則引擎的系統”:http://www.cnblogs.com/lovesqcc/archive/2012/05/16/4037817.html1wG28資訊網——每日最新資訊28at.com

[5]《Fundamentals of Software Architecture》:https://book.douban.com/subject/35306892/1wG28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-73792-0.html做好設計:架構模式

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 輕松實現 SpringBoot 中的隱私數據脫敏處理

下一篇: 基于Mathlive將數學公式編輯器集成到可視化搭建平臺

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲免费成人av电影| 在线精品亚洲一区二区| 国产精品www| 国产精品一区在线观看| 国语自产精品视频在线看| 亚洲国产精品va在线看黑人动漫| 亚洲激情在线观看视频免费| 一区二区三区免费网站| 性欧美长视频| 欧美激情bt| 国产麻豆精品theporn| 伊人成人开心激情综合网| aa级大片欧美三级| 久久精品99国产精品酒店日本| 牛牛影视久久网| 国产精品久久久久免费a∨| 国产综合色产| 日韩网站在线| 欧美资源在线| 欧美伦理一区二区| 国产一区二区黄色| 99精品国产高清一区二区| 欧美诱惑福利视频| 欧美日韩大片| 一区国产精品| 亚洲欧美一区二区原创| 欧美国产日产韩国视频| 国产情侣一区| 亚洲视频久久| 欧美www视频| 国产乱人伦精品一区二区 | 久久国产福利| 欧美日韩一级黄| 伊人久久大香线蕉综合热线| 亚洲影院色无极综合| 免费看的黄色欧美网站| 国产精品一区亚洲| 99国产精品一区| 久久婷婷国产麻豆91天堂| 国产精品久久久久久久久久妞妞| 亚洲缚视频在线观看| 欧美在线一二三四区| 欧美午夜久久| 亚洲欧洲中文日韩久久av乱码| 欧美在线黄色| 国产精品高潮呻吟久久| 亚洲精品在线一区二区| 久久一区视频| 国产一区二区日韩精品| 亚洲天堂av电影| 欧美精品在线免费观看| 亚洲第一在线综合在线| 久久电影一区| 国产欧美日韩精品在线| 中文网丁香综合网| 欧美精品免费播放| 亚洲第一免费播放区| 久久精品国产99国产精品| 国产精品一级在线| 亚洲网站在线| 欧美色欧美亚洲另类二区| 亚洲美女视频| 欧美激情精品久久久久| 亚洲激情欧美激情| 免费久久99精品国产自在现线| 好吊日精品视频| 久久国产精品99国产精| 国产精品五月天| 亚洲一区二区3| 欧美三区免费完整视频在线观看| 亚洲人成人77777线观看| 免费高清在线视频一区·| 精品成人在线视频| 久久亚洲一区二区三区四区| 黄色一区二区三区四区| 久久黄色小说| 国产亚洲精品高潮| 欧美在线www| 国产一区二区| 久久久国产精品亚洲一区 | 久久久蜜臀国产一区二区| 国产日韩欧美亚洲一区| 性色av一区二区三区红粉影视| 国产精品女主播一区二区三区| 亚洲一区图片| 国产欧美精品| 久久国产精品一区二区三区| 国产在线播精品第三| 久久精品中文字幕免费mv| 国外成人免费视频| 久久男人资源视频| 亚洲国产欧美一区二区三区久久| 免费在线观看成人av| 亚洲人成人一区二区三区| 欧美精品日韩精品| 亚洲视频精选在线| 国产情人节一区| 久久久久久久久一区二区| 亚洲二区在线| 欧美日韩一区二区在线| 亚洲尤物影院| 国产综合色产| 欧美福利视频在线观看| avtt综合网| 国产精品一区二区三区免费观看 | 久久免费观看视频| 亚洲精品国产系列| 欧美性感一类影片在线播放 | 久久国产一区| 亚洲国产成人av| 欧美日韩视频一区二区| 午夜精品视频| 在线观看免费视频综合| 欧美日本中文| 亚洲专区欧美专区| 国外成人网址| 欧美日韩国产成人在线观看| 亚洲一区在线直播| 狠狠色狠狠色综合人人| 欧美精品电影| 性娇小13――14欧美| 在线精品国产成人综合| 欧美日韩在线播| 久久精品麻豆| 亚洲精品网址在线观看| 国产人久久人人人人爽| 欧美fxxxxxx另类| 亚洲欧美另类国产| 亚洲国产黄色片| 国产精品你懂的在线| 美国十次了思思久久精品导航| 亚洲最新在线视频| 国产一区二区精品久久99| 欧美精品日韩综合在线| 午夜伦欧美伦电影理论片| 亚洲国产精品一区二区第四页av| 国产精品wwwwww| 免费久久精品视频| 亚洲欧美一区二区激情| 亚洲人成精品久久久久| 国产欧美日韩一区| 欧美日韩成人综合天天影院| 久久福利资源站| 一区二区欧美激情| 亚洲福利一区| 国产区日韩欧美| 欧美视频日韩| 免费在线亚洲| 欧美影片第一页| av成人福利| 在线免费日韩片| 国产日韩欧美不卡在线| 欧美日韩一区二区欧美激情| 久久久久久高潮国产精品视| 亚洲视频一区在线观看| 亚洲福利视频一区| 国产伦精品一区二区三区高清版| 欧美黑人国产人伦爽爽爽| 欧美在线视频免费| 亚洲午夜小视频| 91久久线看在观草草青青| 国产真实乱偷精品视频免| 欧美视频在线观看免费| 亚洲视频高清| 久久国内精品自在自线400部| 日韩一级网站| 老司机免费视频久久| 亚洲欧美日韩国产综合| 欧美天堂亚洲电影院在线观看 | 久久精品国产第一区二区三区最新章节| 久久精品国产亚洲一区二区三区 | 欧美成人激情在线| 影音先锋久久久| 欧美国产日韩二区| 午夜日韩福利| 亚洲精品日韩精品| 欧美午夜性色大片在线观看| 羞羞答答国产精品www一本| 在线观看欧美日本| 国产精品视频一区二区高潮| 每日更新成人在线视频| 一本色道88久久加勒比精品| 国产日本欧美一区二区三区在线| 亚洲午夜视频在线| 国产精品一卡| 久久超碰97人人做人人爱| 欧美日韩一区二区三区免费| 性欧美在线看片a免费观看| 亚洲免费观看高清完整版在线观看熊 | 久久精品系列| 一区二区高清在线| 91久久国产综合久久| 精品51国产黑色丝袜高跟鞋| 国产亚洲制服色| 国产视频一区在线观看| 国产精品丝袜91| 欧美特黄视频| 国产精品扒开腿做爽爽爽视频| 欧美日韩高清区| 欧美xx视频| 久久久久久久网| 亚洲欧美成人一区二区三区| 樱桃国产成人精品视频| 久久久国产精品一区二区三区|