架構師最常使用的5種架構模式及其適用場景分析

2020-12-13 騰訊網

好萊塢電影中有多少情節?一些電影評論家說只有五個。您可以採用幾種架構來實現應用程式?目前大多數程序都使用下面提到的五種架構之一。

在本文中,我將五種軟體架構模式的優缺點以及適合場景提煉出來作為快速參考。你可以在單個系統中使用多個架構模式,它們的組合既是計算機科學,也是一門藝術。

一、分層架構

這種方法可能是最常見的方法,因為它通常圍繞資料庫構建,並且業務中的許多應用程式自然會傾向於將信息存儲在RDBMS的表中。許多比較大的軟體框架(例如Java EE,Drupal和Express)都是在這種架構下實現的,因此使用它們構建的許多應用程式自然都來自分層體系結構。

Model-View-Controller(MVC)分層結構是大多數流行的Web框架提供的標準軟體開發方法,顯然是分層體系結構。數據持久層上方是服務層,它通常包含業務邏輯和有關資料庫中數據類型的信息。視圖層位於頂層,通常是CSS,JavaScript和帶有動態嵌入式代碼的HTML。在中間有一個控制層,該控制層具有用於轉換在視圖和模型之間移動的數據的各種規則和方法。

分層架構的優點:每個層可以只集中於自己的功能實現。這使得應用程式:

容易維護

容易單元測試

易於分配單獨的「角色」

易於更新和擴展

適當的分層體系結構將開發層面進行隔離,這些層不受其他層的更改的影響,從而使重構更加容易。劃分任務並定義單獨的層是架構師面臨的挑戰。當需求很好地適應了模式時,這些層將易於解耦或分層開發。

適合:

需要快速構建的新應用程式

傳統IT部門和流程的企業或業務應用程式

具有尚不了解其他架構的經驗不足的開發人員的團隊

需要嚴格的可維護性和可測試性標準的應用

二、事件驅動架構

事件驅動的體系架構根據數據生成一個「事件」,事件由「消息中間件」或「事件分發管理的中央單元」統一接收,並將事件分配特定類型的代碼處理。

使用JavaScript編程網頁涉及編寫對諸如滑鼠單擊或擊鍵之類的事件做出反應的小模塊。瀏覽器本身會協調所有輸入,並確保只有正確的代碼才能得到正確的事件。瀏覽器中常見許多不同類型的事件,但是模塊僅與相關的事件進行交互。這與分層體系結構非常不同,在分層體系結構中,所有數據通常都將穿過所有層。總體而言,事件驅動的體系結構:

容易適應複雜,混亂的業務環境

當出現新的事件類型時,很容易擴展

注意事項:

如果模塊之間可以相互影響,則[測試可能會很複雜

當模塊發生故障時,中央單元(或消息中間件)必須有一個事件備份計劃。

消息傳遞開銷可能會降低處理速度,消息中間件必須緩衝以突發形式到達的消息時。

當事件有非常不同的需求時,為事件開發數據結構可能會很複雜。

維護基於事務的一致性機制很困難,因為接收事件的模塊是解耦和獨立的。

適合:

具有異步數據流的異步系統

各個數據塊僅與多模塊中的少數模塊交互的應用程式

用戶界面

三、微內核-多插件架構

許多的應用程式都具有一組核心代碼,這些代碼在不同的模塊下反覆使用。例如,開發工具Eclipse將打開文件,批註,編輯文件並啟動後臺處理器。用於顯示文件和對其進行編輯的代碼是微內核的一部分。其他的插件擴展了Eclipse,從而擴展了其功能。

具體到解決方案就是將一些基本的核心的任務代碼推入微內核。然後,不同的業務部門可以根據不同類型的聲明編寫插件。

注意事項:

確定哪些代碼是微內核中的內容通常是一門藝術。它應該保留經常被使用的代碼。

一旦許多插件依賴微內核,修改微內核可能非常困難,甚至不可能。唯一的解決方案就是修改插件。

為內核函數選擇正確的粒度很難事先完成,也幾乎不可能在後期進行更改。

適合:

工具類軟體

在核心代碼與邊緣代碼之間有清晰區分的應用程式

具有一組固定的核心函數和一組動態規則的應用程式

四、微服務架構

小寶寶既可愛又有趣,但是一旦變大,就很難操縱並且難以維護。微服務架構旨在幫助開發人員避免讓自己的寶寶長大,笨拙,僵硬,煩人。它的目標不是創建一個大型程序,而是創建多個不同的小型程序。避免修改一個小bug,就需要重新部署整個大型應用的情況出現。

這種方法類似於事件驅動和微內核方法,但是主要用於解耦不同模塊及任務。在許多情況下,不同的任務可能需要不同的處理量,並且用途可能會有所不同。所以微服務的特點是便於修改、便於擴展。使用負載均衡及服務發現的機制,在用戶使用高峰期部署更多的微服務,保證服務的高可用;在用戶低頻服務時段縮減微服務,從而節省伺服器資源。

注意事項:

並非所有應用程式都可以拆分為相對獨立的微服務單元。

當任務分散在不同的微服務之間時,通信成本會更大。單個請求的響應時長會增加。

適合:

快速發展新業務團隊

大型Web應用程式

五、高速緩存架構

許多網站都是圍繞資料庫構建的,只要資料庫能夠滿足負載,它們就可以正常運行。但是當使用量達到頂峰,並且資料庫無法跟上用戶請求的速度時,整個網站就會癱瘓。將數據存儲在內存中可以使許多工作更快,從而大幅度提高用戶並發訪問的支撐能力。

注意事項:

對於內存資料庫,事務的支持更加困難。

開發專業的高速緩存數據的程序,對程式設計師的技術水平往往要求更高一些(至少比只會寫增刪改查的程式設計師要高)

適合:

高頻點擊數據流和用戶日誌之類的大量數據處理

低價值數據,有時可能會丟失而不會造成重大後果(比如用戶訪問量數據)

讀多寫少的數據。比如新聞數據,寫完之後幾乎不改,但是有很多的人看。

相關焦點

  • 硬核乾貨:一位菜鳥碼農的架構師「封神」之路!
    「不久前,高級架構師 Justin Miller 在 GitHub 上創建項目,介紹自己關於如何成為更好的軟體架構師的想法。該項目發布一天即獲得 1.4K star,現在已有近 5K star 量。根據我的經驗,兩者兼而有之是最有價值的。讓我們從理論開始:①了解基本的設計模式:設計模式是架構師設計開發可維護、可擴展系統的一項最重要工具。通過設計模式你可以設計解決通用問題的可重用方案。
  • 15 年架構設計經驗:我眼中的那些優秀架構師
    我是李智慧,現任某一線網際網路公司的首席架構師,曾擔任阿里巴巴技術專家、Intel 亞太研發中心架構師。我也是 Apache Spark 源碼貢獻者,長期從事大型網站架構、大數據的研發工作,著有《大型網站技術架構:核心原理與案例分析》。
  • 對比解讀五種主流大數據架構的數據分析能力
    缺點:Unifield架構實施複雜度更高,對於機器學習架構來說,從軟體包到硬體部署都和數據分析平臺有著非常大的差別,因此在實施過程中的難度係數更高。  適用場景:有著大量數據需要分析,同時對機器學習方便又有著非常大的需求或者有規劃的情況。
  • 汽車架構框架:沃爾沃汽車的經驗
    然後,架構框架建立了一個通用實踐,用於在特定的應用領域或利益相關者社區中創建、解釋、分析和使用架構描述,開發架構建模工具和架構方法,並建立流程來促進跨多個項目和/或組織[3]之間的溝通、承諾和互操作。如圖1所示,架構框架是由架構觀點標識的預製知識結構,架構師使用它將架構描述組織到架構視圖中。
  • 架構師不是你想的那樣!
    在英極的工作中, 處理 Excel 報表是很典型的一個場景,大家都是按照日本人給出的 Excel 報表樣式,用 POI 直接寫代碼畫表格並填充數據,後來,我哪天腦子「抽筋」, 就換了種工作方式, 將日本人給的報表樣式文件拿過來清理後,作為模板讀到程序裡,然後直接通過少量代碼設置數值就可以了, 效率大幅提升,後面大家就都依葫蘆畫瓢照著來了, 這算是我做的最小粒度的架構設計了吧。
  • 如何升級架構設計思維
    集團技術委員會主席,前轉轉二手交易平臺首席架構師。 01、怎麼談「架構」不耍流氓 有學生曾經問過玄姐一個問題:「孫老師,您作為前58技術委員主席、首席架構師,在成長為架構師的路上有哪些技能是必須要掌握的?」 玄姐結合自己百萬架構的經歷,總結了幾點架構師必備的核心能力。架構師需要具備業務抽象分析、架構設計、架構選型、容量規劃、代碼落地、架構治理等能力。這些能力中,最核心的能力是架構設計和架構選型。
  • 架構搭建的一個關鍵詞就是平衡
    架構是什麼我們總在說,我要做一個架構師,或者某某系統的架構是什麼什麼等。那麼,架構到底是什麼?一個項目,總是為了支撐某些業務場景而存在的。我們說,項目是為支持業務場景的,而技術架構,又是為支撐上層業務邏輯的。所以,搭建架構時,第一個要考慮的就是,要滿足業務場景,要考慮到業務的複雜程度,數據規模大小等。2. 結合實際成本。那是不是說只要滿足業務場景就OK了呢?並不是。假設某種業務場景,比如說商城,可能使用分布式微服務框架才能滿足其高並發和高可用。
  • 建信金融科技付曉巖:萬物皆有架構,架構復現萬物
    另一個特點是次生性,大部分金融需求都來自於企業生產、百姓生活中的某個場景,是被場景觸發而非主導其它場景,因此,主要的金融服務大部分在數位化時代都會「後臺」化。未來數位化轉型對銀行最大的衝擊是技術的進步能否降低新經濟模式對現行金融基礎設施模式的依賴性,也就是從底層產生真正的金融「脫媒」,金融牌照並不是免死金牌,就像蒸汽機帶動的機械化運輸必然替代馬車的運輸一樣。
  • IBM高級架構師結合Java多線程和Socket,帶你實戰微服務架構
    在對系統進行SOA改造時,一定要分析清楚。綜上所述,面向服務的架構是分布式架構中的-種。面向服務的架構一定是分布式架構,但分布式架構不一定面向服務。能夠對外提供服務的系統並不一定是面向服務的架構,面向服務架構的系統也不一定對外 暴露服務。
  • 【招聘】中原銀行信息技術部招系統架構師
    2017年7月19日,中原銀行在香港聯交所主板掛牌上市,刷新了國內金融機構從成立到H股上市的最快紀錄。  截至2019年6月末,中原銀行全行資產總額6520.25億元,較成立之初翻了三番。下轄18家分行和2家直屬支行,共有營業網點472家;作為主發起人,在省內設有9家村鎮銀行和1家消費金融公司。
  • 平安科技CTO方國偉:架構師如何提升技術敏感度?
    雲計算的標準,包括 IaaS、SaaS、PaaS 三種服務模式,公有雲、私有雲、混合雲部署模式等都是 NIST 提出來的。我通過前幾年的學習和實踐,我逐漸完善了對雲的認知。後面幾年更多的是將所學所想在實際場景應用起來,我自己對於雲的認知本身沒有太大變化,但可以看到現在市場對於雲的接受程度越來越快。你覺得在這十年裡,雲計算的應用情況可以分成哪幾個階段?
  • 阿里P8聯合多位業界大佬整合的架構寶典,真正的漲薪秘籍
    第5章:架構師的核心能力本章就架構師的核心能力提出了一些看法,希望能拋磚引玉,引導讀者對自身工作的範圍、能力邊界以及精進技藝進行思考,在以後的實踐中不斷摸索和總結,形成自己的思考和做事方法。第7章:微服務架構下的事務處理本章主要介紹了分布式系統的CAP理論,同時總結並對比了幾種分布式分解方案的優缺點。分布式事務本身是一個技術難題,沒有一種完美的方案可以應對所有場景,都要根據具體的業務場景來抉擇。
  • 美國國防部體系架構框架
    1998年-2001年,C4ISR架構框架在美國參聯會、軍兵種和國防部系統的下屬部門得到了廣泛應用,對提高美軍C4ISR系統的一體化水平起到了積極的推動作用。 2002年,美國國防部提出從「以威脅為基礎」向「以能力為基礎」的兵力計劃構想轉變。實現這一目標的最有效方法就是開發和使用一體化的架構。
  • 阿里P8架構師用項目經驗編寫SpringMVC+MyBatis從入門到項目實戰
    使用 Spring 可插入的 MVC 架構,從而在使用Spring進行WEB開發時,可以選擇使用Spring的SpringMVC框架或集成其他MVC開發框架,如Struts1,Struts2等。MyBatis是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。
  • 大數據架構流程圖
    還原產品,產品結構、核心流程體驗、核心頁面體驗的情況,而不僅僅是界面表層;從產品視角、用戶視角來分析,而不是自我感覺,撰寫報告,推出報告。產品體驗從產品現狀、目標用戶及場景、關鍵功能體驗程序流程圖程序流程圖又稱程序框圖,是用統一規定的標準符號描述程序運行具體步驟的圖形表示。
  • 五大常用軟體架構分析方案
    一、分層架構 分層架構(layered architecture)是最常見的軟體架構,也是事實上的標準架構。如果你不知道要用什麼架構,那就用它。
  • 如何從產品架構層面去定義一個SaaS產品?
    老王設定的場景是比如說我們做的是一個電商場景的SaaS,這個產品類似於有贊,那麼經過了一系列需求收集分析後,針對電商場景,簡單的劃分為前臺用戶端,後臺商家端。(做電商的朋友不要噴我哈,我知道並不是這麼簡單的兩個,裡面涉及的非常多,包括倉儲、物流、支付、分單等等,但是面試嘛,說多錯多。)
  • 阿里巴巴資深架構師熬幾個通宵肛出來的Spark+Hadoop+中臺實戰pdf
    >SQL on SparkSpark StreamingGr aphXMIlib4、Lamda架構日誌分析流水線日誌分析概述日誌分析指標>Lamda架構構建日誌分析數據流水線5、基於雲平臺和用戶日誌的推薦系統Azure雲平臺簡介系統架構構建Node. js應用數據收集與預處理Spark Str
  • CIO40: 「企業架構數位化轉型」 10000字有感
    3) 吉爾德定律(勝利者浪費定律): 最成功的的商業運作模式,是儘可能使用價格最低的資源,從而節約和保護更昂貴的資源。2-數位化和網際網路時代的定律:1) 反摩爾定律:計算機和新科技公司的產品,每18個月價值就會降低一半,發展節奏更快。
  • SWE.2的軟體架構設計
    [outcome4] 注2:動態行為由運行模式(如啟動、關機、正常模式、校準、診斷等)、過程和過程間通信、任務、線程、時間片、中斷等決定。 注3:在評估動態行為時,應考慮目標平臺和目標上的潛在負載。 SWE.2.BP5:定義資源消耗目標。在適當的層次級別上確定並記錄軟體架構設計的所有相關要素的資源消耗目標。