在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

從分層架構到微服務架構介紹(二)

jf_78858299 ? 來源:元閏子的邀請 ? 作者:元閏子 ? 2023-05-10 16:57 ? 次閱讀

前言

軟件剛出現的時候,還是大型計算機的年代,一個軟件系統一般都只會運行在一臺機器上。隨著軟硬件技術的革新,計算機體積和成本逐漸變小,此時工程師們發現一個軟件系統只運行在單臺機器上會存在各種瓶頸。如果將系統按照功能劃分成前端和后端,分別部署在兩臺服務器上,問題得到了緩解,于是便有了Client/Server架構的出現。

隨后,個人電腦的興起帶動了眾多富桌面應用(rich desktop application)的出現,它們基于操作系統上的user interface開發,數據則是存儲在單獨部署的database server上,通過標準的網絡協議進行數據通信。這種Desktop + Database Server的架構和C/S架構一樣,同屬 兩層架構 (two-tier architecture)。

隨著90年代互聯網的迅速崛起,Browser + Web Server + Database Server的組合也漸漸風靡。Browser為表現層,提供用戶交互界面;Web Server為業務層,處理具體的業務邏輯;Database Server為數據層,存儲系統數據。三個層次各司其職,這也是大家最熟悉的 三層架構 (three-tier architecture)。

上述的幾種架構模式都屬于 分層架構 (layered architecture)的范疇,分層架構并沒有限定一定得有多少個層次,層次的數量可以根據應用場景靈活控制,因此也被稱為 n-tier architecture 。它結構簡單,基于此架構進行系統開發成本也很低(很多公司在組織結構上劃分為前端工程師、后端工程師、DBA,根據 康威定律 ,這天然就具備了分層架構開發的良好條件),因此它在業界備受歡迎。 如果你的團隊還不確定選擇什么樣的架構,又或者為了踐行敏捷宣言中的“just starts coding“,那么分層架構會是一個不錯的選擇 。

架構視圖

在分層架構中,組件根據功能被劃分在不同的層次上,雖然層次的數量和類型并沒有被限制,但大多數的分層架構都由以下4層組成: 表現層 (presentation)、 業務層 (business)、 持久層 (persistence)和 數據層 (database),如下圖所示。在一些簡單的系統中,持久層的邏輯(如SQL)被嵌入到業務層中,形成了經典的三層架構;而在一些復雜的系統中,也會根據具體的業務劃分為五層甚至更多的層次。

圖片

分層架構的標準邏輯分層

前文所述的表現層等4個層次都是邏輯的劃分方法,在實際部署時,一般會有下圖所示的幾種部署形態。形態1中,表現層、業務層和持久層為一個部署單元,而數據層則單獨部署,具體表現為一個獨立部署的數據庫或文件系統;形態2中,表現層被分離出單獨部署,業務層和持久層組成一個部署單元,數據層依舊是單獨部署的數據庫或文件系統;形態3中,包括數據層在內的4層全都在同一個部署單元內,常見于業務簡單的系統,它們往往使用的是嵌入式數據庫或內存數據庫。

圖片

分層架構的部署形態

分層架構中的每一層都扮演著各自的角色,比如表現層負責處理所有的用戶請求和瀏覽器交互,而業務層則負責執行每次請求下的特定業務邏輯;表現層無需擔心從哪里獲取用戶數據,它只需要將數據以特定的格式在瀏覽器上顯示即可。同樣地,業務層也無需關心用戶數據從何而來以及如何呈現,它只需從持久層中取出數據,執行特定的業務邏輯(比如聚合數據),然后將結果返回給表現層。

每一層都是特定行為的抽象,這樣的職責劃分,使得組織能夠快速高效地創建出責任模型,圍繞各層打造開發團隊

層間隔離

分層架構中的每一層可以是封閉的或者開放的,封閉意味著當一個請求自頂向下在層間傳遞時,它不能跳過任意的一層。比如,當表現層接收到請求之后,它必須先后經過業務層和持久層才能到達數據層,如下圖所示。

圖片

封閉的分層架構

對于簡單的數據獲取類請求,如果讓表現層能夠直接訪問數據層獲取數據,無疑是最簡單高效的。也即是讓業務層和持久層變成開放狀態,允許請求在層間傳遞時跳過此層。那么, 究竟是封閉好,還是開放好呢 ?要解答這個問題,就要回到層間隔離的出發點上。

所謂的層間隔離,旨在降低一個層次上的變化對其他層次的組件的影響,簡單來說,就是每個層次對其他層次的功能知道的越少越好 。為了達到層間隔離的目的,就需要將每個層次置為封閉的狀態。假設表現層能夠直接訪問持久層,那么持久層的變化將會直接影響到業務層和表現層,這加劇了層間的耦合,導致系統變化的代價高昂。

層間隔離可以降低層次變化對系統的影響,凡事沒有絕對, 在某些的場景,將特定的層次置為開放的狀態也不失為一件好事 。考慮以下例子,業務層中存在著一些共享組件承載著業務層公共的功能(比如日志類、審計類、日期和字符串工具類等)?,F在有一項架構決策要求表現層不能直接訪問這些共享組件,但矛盾的是,原則上表現層是可以直接訪問業務層的,這種需要違反原則的決策將會很難落地。

圖片

業務層中的共享組件

一種解決方法是,新增一個服務層,該層包含了業務層的這些共享組件。因為業務層是關閉的狀態,故表現層也就不能訪問到這些共享組件了。然而,新增的服務層必須置為開放狀態,否則業務層將無法直接訪問持久層。新增一個服務層并置為開放狀態,這樣既落地了架構決策,也不會影響到原有的功能,一舉兩得。

圖片

在分層架構中新增一個層次

一些注意事項

在使用分層架構時,需要注意以下兩點:

1、做好模塊的劃分

為分層架構做好模塊劃分主要是為后續的架構演進做好準備,比如在業務復雜到一定程度后演進為微服務架構時,各個模塊可以很自然地演進為微服務。為此,應該避免出現類的繼承層次過深的現象,這會導致代碼嚴重的耦合,不利于后續的架構演進。

2、避免掉進sinkhole反模式的陷阱

所謂sinkhole反模式指的是請求只是簡單地路過各個層次,并沒有做一些業務處理。

比如,表現層接收到一個獲取基本用戶數據(姓名、地址等)的請求后將它傳遞到業務層;然而,業務層并沒有做任何的業務處理,直接將請求傳遞到持久層;持久層也僅僅是構造了一個簡單的SQL語句,向數據層查詢用戶數據;最后,數據按照原路返回到表現層,中途沒有經過任何的數據匯聚、轉換等操作。

sinkhole反模式會導致很多不必要的對象實例化開銷,從而增大了系統的內存消耗,并且影響了性能 。

然而,一個系統多多少少都會存在一些sinkhole反模式場景,要判斷一個系統是否已經徹底掉進sinkhole反模式的陷阱,主要還是看這類業務請求所占的百分比。根據20-80法則,當系統中有超過80%的業務請求是sinkhole類請求時,表示系統已經掉進sinkhole反模式的陷阱,這從側面也說明該系統已經不再適合分層架構,是時候考慮架構演進了。

綜合得分

圖片

分層架構的綜合得分

從綜合得分上看,分層架構的Overall cost和Simplicity得分很高,這很大程度上得益于分層架構本身是單體架構,少了很多分布式系統才有的復雜性。但這樣導致Deployability得分很低,因為3行代碼的改動就足以造成整個系統的重新部署。Testability得分不高也是這個原因,整系統的重新上線通常都需要將測試用例全部執行一遍,多了不少額外的工作量。

Elasticity、Fault tolerance、Scalability這些都是單體架構天然的劣勢,自然地,分層架構在這些方面得分都很低。另外,sinkhole反模式的存在也拉低了分層架構在Performance上的得分。

總結

分層架構簡單而高效,業界已經有很多成熟的應用,對那些項目剛剛起步,架構師們還沒想好要采用哪種架構模式的系統而言,這是非常適合的。在實現分層架構時,我們需要合理地設置各個層次的封閉或開放狀態,做好層間隔離,同時也要避免掉進sinkhole反模式陷阱。隨著業務的不斷擴張,分層架構在可維護性、可測試性、可擴展性等上的短板也會逐步被放大,此時就需要考慮往其他架構模式演進了。

每種架構模式都有其合適的應用場景,只有熟悉常用的幾種架構模式,才能設計出更好的軟件系統。下一篇文章,我們將繼續介紹 管道架構

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    12

    文章

    9235

    瀏覽量

    85649
  • 軟件
    +關注

    關注

    69

    文章

    4973

    瀏覽量

    87726
  • 機器
    +關注

    關注

    0

    文章

    784

    瀏覽量

    40757
  • 架構
    +關注

    關注

    1

    文章

    516

    瀏覽量

    25497
收藏 人收藏

    評論

    相關推薦

    微服務架構和CQRS架構基本概念介紹

    微服務架構現在很熱,到處可以看到各大互聯網公司的微服務實踐的分享總結。但是,我今天的分享和微服務沒有關系,希望可以帶給大家一些新的東西。如果一定要說
    發表于 05-22 09:03

    微服務優勢_微服務架構的好處與不足

    微服務是用一組小服務的方式來構建一個應用,服務獨立運行在不同的進程中,服務之間通過輕量的通訊機制(如RESTful接口)來交互,并且服務可以
    發表于 02-23 11:24 ?4397次閱讀

    什么是微服務架構_微服務架構的優缺點及應用

    什么是微服務架構 簡單地說,微服務是系統架構上的一種設計風格, 它的主旨是將一個原本獨立的系統拆分成多個小型服務,這些小型
    的頭像 發表于 06-02 10:03 ?1.7w次閱讀
    什么是<b class='flag-5'>微服務</b><b class='flag-5'>架構</b>_<b class='flag-5'>微服務</b><b class='flag-5'>架構</b>的優缺點及應用

    SOA架構微服務架構的主要區別

    SOA和微服務架構一個層面的東西,而對于ESB和微服務網關是一個層面的東西,一個談到是架構風格和方法,一個談的是實現工具或組件。SOA架構
    的頭像 發表于 05-04 14:11 ?5874次閱讀
    SOA<b class='flag-5'>架構</b>和<b class='flag-5'>微服務</b><b class='flag-5'>架構</b>的主要區別

    微服務架構有哪些_微服務架構設計模式

    小伙伴們知道常用的微服務架構框架有哪些嗎?上回我們介紹了一些常用的微服務架構設計模式,這次我們就來了解一下一些常用的
    的頭像 發表于 05-17 17:06 ?2.9w次閱讀
    <b class='flag-5'>微服務</b><b class='flag-5'>架構</b>有哪些_<b class='flag-5'>微服務</b><b class='flag-5'>架構</b>設計模式

    微服務架構的特點_微服務架構適用場景

     微服務架構是一項在云中部署應用和服務的新技術。
    的頭像 發表于 05-17 17:28 ?5176次閱讀

    微服務軟件架構應用研究綜述

    自2014年,微服務架構概念經Martin Flower提出以來,受到廣泛關注,為更好了解微服務架構風格,本文首先分析、梳理了軟件架構的發展
    發表于 05-26 09:26 ?2次下載

    分層架構微服務架構介紹(一)

    們看到一個架構模式的名字時,也要馬上想到對應的架構圖及其基本特點。比如,當談到**分層架構**時,我們就應該想起它的架構圖是怎樣的、有哪些出
    的頭像 發表于 05-10 16:55 ?1143次閱讀
    <b class='flag-5'>從</b><b class='flag-5'>分層</b><b class='flag-5'>架構</b><b class='flag-5'>到</b><b class='flag-5'>微服務</b><b class='flag-5'>架構</b><b class='flag-5'>介紹</b>(一)

    分層架構微服務架構介紹(三)

    **管道架構** (Pipeline Architecture),通常也被稱為 **管道-過濾器架構** (Pipes and Filter Architecture),是最常用的架構模式之一
    的頭像 發表于 05-10 16:58 ?677次閱讀
    <b class='flag-5'>從</b><b class='flag-5'>分層</b><b class='flag-5'>架構</b><b class='flag-5'>到</b><b class='flag-5'>微服務</b><b class='flag-5'>架構</b><b class='flag-5'>介紹</b>(三)

    分層架構微服務架構介紹(四)

    微內核架構 (Microkernel Architecture),也被稱為 **插件式架構** (plug-in architecture),作為一個在幾十年前就被創建出來的架構模式,它如今仍然被
    的頭像 發表于 05-10 17:00 ?793次閱讀
    <b class='flag-5'>從</b><b class='flag-5'>分層</b><b class='flag-5'>架構</b><b class='flag-5'>到</b><b class='flag-5'>微服務</b><b class='flag-5'>架構</b><b class='flag-5'>介紹</b>(四)

    分層架構微服務架構介紹(五)

    本文要介紹的是 服務架構 (Service-Based Architecture, SBA )。 SBA 可以看成是單體架構微服務
    的頭像 發表于 05-10 17:02 ?857次閱讀
    <b class='flag-5'>從</b><b class='flag-5'>分層</b><b class='flag-5'>架構</b><b class='flag-5'>到</b><b class='flag-5'>微服務</b><b class='flag-5'>架構</b><b class='flag-5'>介紹</b>(五)

    springcloud微服務架構

    Spring Cloud是一個開源的微服務架構框架,它提供了一系列工具和組件,用于構建和管理分布式系統中的微服務。它基于Spring框架,旨在通過簡化開發過程和降低系統復雜性來幫助開發人員構建彈性
    的頭像 發表于 11-23 09:24 ?1384次閱讀

    docker微服務架構實戰

    的容器化技術,為微服務架構的實施提供了強大的支持。本文將介紹Docker微服務架構的實戰經驗,包括Docker的概述、
    的頭像 發表于 11-23 09:26 ?663次閱讀

    設計微服務架構的原則

    微服務是一種軟件架構策略,有利于改善整體性能和可擴展性。你可能會想,我的團隊需不需要采用微服務,設計微服務架構有哪些原則?本文會給你一些靈感
    的頭像 發表于 11-26 08:05 ?610次閱讀
    設計<b class='flag-5'>微服務</b><b class='flag-5'>架構</b>的原則

    架構與設計 常見微服務分層架構的區別和落地實踐

    架構風格越傾向于清晰的職責定位,且讓領域模型成為架構的核心。 基于這些架構風格,在軟件架構設計過程中又有非常多的架構
    的頭像 發表于 10-22 15:34 ?276次閱讀
    <b class='flag-5'>架構</b>與設計 常見<b class='flag-5'>微服務</b><b class='flag-5'>分層</b><b class='flag-5'>架構</b>的區別和落地實踐
    主站蜘蛛池模板: 亚洲成人黄色| 天堂最新版在线地址| 精品女同| 爱婷婷网站在线观看| 人人乳乳香蕉大免费| 一级欧美视频| 日本aaaa级毛片在线看| 国产精品久久久福利| 天天夜天干天天爽| 国产亚洲第一伦理第一区| 模特精品视频一区| 四虎精品永久在线网址| 成人免费看黄网站无遮挡| 一区二区三区在线看| 91md天美精东蜜桃传媒在线| 男女性高爱麻豆| 天天干天天草| 天天做天天爱天天一爽一毛片| 日日干天天草| 天天色天天草| 午夜视频在线观看国产| bt天堂电影| 成 人色 网 站999| 五月天婷婷在线免费观看| 最近高清免费观看视频大全 | 亚洲一区免费在线| 欧美男人天堂网| 2017天天干| 仓本c仔国产精品| 福利影院在线| 成人手机看片| 日一区二区三区| 国产成人系列| 四虎影院黄色片| 九九全国免费视频| 国产欧美在线一区二区三区| 免费澳门一级毛片| 久久精品视频免费播放| 久久久久久久久久久9精品视频| sesese在线观看| 国产精品天天看大片特色视频|