五大主流軟件架構模式
譯文【51CTO.com快譯】
在去年底召開的全球軟件架構峰會(Global Software Architecture Summit)上,全球各界開發(fā)人員齊聚一堂,廣泛地討論了各種業(yè)界常見的軟件架構模式。在此,我為您梳理并總結這些軟件架構師給我們帶來的精彩見解。
首先,什么是軟件架構模式?
架構模式是那些由軟件架構師通過持續(xù)實踐,進而總結出的、過往已驗證的、優(yōu)秀設計架構。它們往往能夠被重復地使用到其他項目或領域之中。更具體地說,架構模式是需要在實踐中反復發(fā)掘的一組設計決策。它具有明確定義的屬性,以及一套可以被重復使用與描述的架構。
其實,開發(fā)軟件架構可以被看作是針對模式進行選擇、定制和組合的一整套過程。而軟件架構師的任務就是要決定:如何實例化模式,如何使其與特定的上下文、以及問題的約束相適應。我們將在下文中進行詳細的討論。
Mark Richards在其著作--《軟件架構模式》一書中主要介紹了5種軟件架構模式,它們分別是:微內核、微服務、分層架構、基于事件(事件驅動)和基于空間。下面我們將根據(jù)這個順序逐一進行介紹。
1.微內核模式
微內核架構模式也稱為插件架構模式。它通常是在軟件團隊創(chuàng)建具有可互換性組件(interchangeable components)的系統(tǒng)時,被使用到。
該模式主要適用于那些必須能夠適應不斷變化需求的軟件系統(tǒng)。微內核模式能夠從擴展功能、以及特定于客戶的部件中,分離出最小的功能核心。作為一種套接字(socket),它能夠插入到各種擴展之中,并協(xié)調其相互之間的協(xié)作關系。
業(yè)界通常認為:微內核架構模式是一種可被用于實施基于產(chǎn)品的應用程序的自然模式。此處所謂基于產(chǎn)品的應用程序,是一種打包的應用程序,可以作為典型的第三方產(chǎn)品版本被下載。當然,許多公司也會據(jù)此來開發(fā)和發(fā)布其內部的業(yè)務應用,例如:各種軟件產(chǎn)品、版本、發(fā)布說明、以及可插入的功能等。
微內核架構模式允許您將其他應用程序的功能作為插件,添加到核心的應用程序上,進而提供可擴展性、以及功能上的分離(隔離)。
微內核架構模式通常由兩種類型的架構組件所組成:核心系統(tǒng)和各種插件模塊。我們需要將應用程序的邏輯,在各個獨立的插件模塊和基礎核心系統(tǒng)之間進行劃分,以提供基于應用功能,和自定義處理邏輯的可擴展性、靈活性和隔離性。在傳統(tǒng)概念上,微內核架構模式的核心系統(tǒng),僅包含那些系統(tǒng)運行所需的最少功能。
微內核架構的最佳示例是Eclipse IDE。通過下載基本的Eclipse產(chǎn)品,您只會獲得一個編輯器。而只有在您添加了各種插件之后,它才能成為一個高度可定制的、實用的產(chǎn)品。
優(yōu)勢:
- 具有極大的靈活性和可擴展性。
- 在某些實現(xiàn)場景中,允許應用程序在運行的時候被添加插件。
- 具有良好的可移植性。
- 易于部署。
- 能夠快速地響應不斷變化的環(huán)境。
- 插件模塊既可以單獨地被測試,又可以由核心系統(tǒng)來輕松地進行模擬,以演示或原型化某項特定的功能,進而達到對核心系統(tǒng)的盡少、甚至不做修改。
- 由于您可以通過自定義和簡化應用程序,來僅包括那些必需的功能,因此它能夠提供優(yōu)越的性能。
適合性:
- 那些需要從不同來源獲取數(shù)據(jù),并在轉換數(shù)據(jù)之后寫入不同目標的應用程序。
- 工作流程類應用程序。
- 任務與作業(yè)計劃類應用程序。
2.微服務模式
當您將應用程序作為一組微服務進行編寫時,實際上是在編寫可以協(xié)同工作的多個微型應用程序。每個微服務都有自己的“職責”,團隊可以獨立于其他微服務進行開發(fā)。他們之間唯一的依賴便是溝通。當微服務彼此進行通信時,您必須確保它們之間發(fā)送的消息能夠向后兼容。
優(yōu)勢:
- 您可以單獨地編寫,維護和部署每一個微服務。
- 您可以靈活地僅擴展那些需要的微服務。
- 由于應用程序的各個部分較小,并且與其他部分的耦合較寬松,因此您可以輕松地進行重寫。
- 新的團隊成員很容易快速上手。
- 能夠使得應用程序易于被理解和修改。
- 通過提供良好的可維護性和可測試性,以實現(xiàn)快速且頻繁的開發(fā)和部署。
- 團隊無需與其他團隊協(xié)調,便可獨立地部署其服務。
適合性:
- 適合帶有小型組件的站點。
- 有明確邊界的企業(yè)級數(shù)據(jù)中心。
- 快速發(fā)展的新業(yè)務和Web應用。
- 具有遍布全球的開發(fā)團隊。
3.分層架構模式
最常見的架構模式當屬分層架構模式。它是我們用來設計大多數(shù)軟件的傳統(tǒng)方法,同樣有具有一定的獨立性。分層架構模式是一種多層模式,每個層面上都有多個組件。這就意味著所有的組件雖然是互聯(lián)的,但是彼此之間并不依賴。在應用程序中,分層架構模式的每一層都有特定的角色和職責。例如:表示層將負責處理所有用戶界面和瀏覽器之間的通信邏輯,而業(yè)務層將負責執(zhí)行與請求相關的特定業(yè)務規(guī)則。
分層架構模式的主要特點在于各個組件各司其職,相互分離。也就是說,某個特定層面上的組件,僅會處理與該層有關的邏輯。
優(yōu)勢:
- 由于在該架構中,組件只屬于某個特定層面,而其他層面可以被模擬出來,因此該模式具有良好的易測試性。
- 由于該模式實現(xiàn)起來并不太復雜,而且大多數(shù)公司都能夠通過逐層分離的功能集,來開發(fā)應用程序,因此它非常易于被開發(fā),當然也就成為了大多數(shù)業(yè)務應用的自然選擇。
- 具有可維護性。
- 易于分配單獨的“角色”。
- 方便對不同層面進行單獨地更新與增強。
適合性:
- 標準化的業(yè)務線應用程序,且在功能上不限于CRUD(增刪改查)操作。
- 需要快速構建的新應用。
- 團隊中有并不了解其他架構、或經(jīng)驗不足的開發(fā)人員。
- 那些需要具有嚴格的可維護性和可測試性的應用。
4.基于事件(事件驅動)的模式
這是用于開發(fā)具有高度可擴展性系統(tǒng)的最常見分布式異步架構。該架構由那些可用于監(jiān)聽事件,并能夠異步處理事件的組件所組成。事件驅動類架構構建出一個能夠接收所有數(shù)據(jù)的中央單元。該單元可以被委托給那些具有處理特定類型能力的單獨模塊。
優(yōu)勢:
- 容易適應復雜且混亂的環(huán)境。
- 可被輕松地擴展。
- 當出現(xiàn)新的事件類型時,能夠方便地進行擴展。
適合性:
- 那些具有異步數(shù)據(jù)流的異步系統(tǒng)。
- 各種用戶界面。
5.給予空間的模式
基于空間的架構模式被專門設計為解決那些可擴展性和并發(fā)性的問題。對于那些具有不定因素和不可測并發(fā)用戶數(shù)的應用來說,它同樣也是一種非常實用的架構模式。該模式通過消除對中央數(shù)據(jù)庫的約束,以及使用可復制的內存中數(shù)據(jù)格(data grids),來實現(xiàn)良好的可擴展性。
此外,基于空間的架構可以通過在多個服務器之間進行拆分處理與存儲,以避免高負載下的功能性崩潰。
優(yōu)勢:
- 能夠快速地響應不斷變化的環(huán)境。
- 盡管該架構通常無法實現(xiàn)解耦和分布式,但它是動態(tài)的。那些基于云端的復雜工具,能夠將應用程序輕松“推送”到服務器處,以簡化部署。
- 可以通過內存中的數(shù)據(jù)訪問,以及該模式中內置的緩存機制,來達到高性能。
- 由于較小地、甚至并不依賴于集中式數(shù)據(jù)庫,因此該模式具有非常好的可擴展性。
適合性:
- 具有大體量數(shù)據(jù)的場景,例如:點擊流(clickstreams)和用戶日志。
- 低價值數(shù)據(jù)的偶爾丟失并不會造成嚴重后果的場景。
- 社交網(wǎng)絡環(huán)境。
總的說來,上述介紹的五種架構模式各有自己的優(yōu)勢和適用環(huán)境。您可以在程序設計與項目中,按照實際需求選擇不同的軟件架構模式,并實現(xiàn)復用。
原標題:5 Major Software Architecture Patterns,作者: Ekaterina Novoseltseva
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】