電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 90|回復(fù): 0
收起左側(cè)

搞懂這幾個常見的嵌入式軟件架構(gòu),足夠平時開發(fā)使用了!

[復(fù)制鏈接]

485

主題

485

帖子

1623

積分

三級會員

Rank: 3Rank: 3

積分
1623
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-12-8 17:50:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
我是老溫,一名熱愛學(xué)習(xí)的嵌入式工程師/ c2 ]2 M1 y) U8 p
關(guān)注我,一起變得更加優(yōu)秀!
' |9 }3 e+ w) F* i0 }6 q+ F1 H& _嵌入式軟件因為硬件資源限制,可能存在驅(qū)動與應(yīng)用耦合的情況,但對于大型項目,資源充裕的情況下,復(fù)雜的業(yè)務(wù)邏輯、后續(xù)擴(kuò)展維護(hù)的需要,必須采用分層和模塊化思維,這種思想就是架構(gòu)模式。' m$ t2 \9 W8 E$ \" n6 O
& g6 s) d2 t7 V" U" G
市面上常見的架構(gòu)模式有以下幾種:
" `2 o  Q/ _% ^4 ]% E① 分層架構(gòu)
: M4 G, w4 n' r4 F② 多層架構(gòu)8 i4 E6 `" @- S4 T$ g- Z
③ 管道 - 過濾器架構(gòu)
9 H9 X) ~% G0 X④ 客戶端 - 服務(wù)器架構(gòu)( Q% V) e1 ^. `0 d, b
⑤ 模型 - 視圖 - 控制器架構(gòu)
/ i) \$ X" o& z4 p' H* D3 j⑥ 事件驅(qū)動架構(gòu)
% P0 r2 j3 y  D⑦ 微服務(wù)架構(gòu)3 m  ]) s0 b3 \; g5 g
0 Q, O% a1 L7 U6 V
分層架構(gòu)模式8 Y7 Q. b' ]/ k% H* O5 }
最常見的架構(gòu)模式就是分層架構(gòu),大部分分層架構(gòu)主要由四層組成:展現(xiàn)層、業(yè)務(wù)層、持久層和數(shù)據(jù)庫層,如下圖所示:6 ~: l8 z7 s4 M4 E0 \! f( F0 V! L
' f3 k/ |7 J0 {7 p
; ~8 s- E! g  ~
1)上下文
. A& z$ n4 N6 o. M- p0 l# P4 A復(fù)雜的系統(tǒng)都會經(jīng)歷獨立的發(fā)展和衍化系統(tǒng)各個部分的需要。出于這個原因,系統(tǒng)開發(fā)者需要對關(guān)注點進(jìn)行清晰且條理分明地分離,以便系統(tǒng)的各個模塊可以獨立地開發(fā)和維護(hù)。/ D% G3 J# t( P2 K$ p3 x" J" C
, ~% O! k! H2 O0 Z
2)問題
$ ~: w; k. G% \7 c# ]0 |軟件需要以這樣一種方式分割:各個模塊可以獨自開發(fā)和衍化,各自部分之間的交互非常少,支持可移植性、可修改性和復(fù)用性。
; u: ^3 f* q5 y' j6 r1 w0 r6 |3 {( _# x4 ~
3)方案
; {* j/ e: k, R* }& E為了實現(xiàn)關(guān)注點分離,分層模式將軟件分割成各個單元(稱為“層”)。
* c8 I+ z5 ], F5 I: X5 }; p
3 i( q- O( j$ ?& X! _每一層都是一組模塊,提供了一組高內(nèi)聚的服務(wù)。其使用必須是單向的。將一組軟件作為一個完整的分區(qū),每個分區(qū)暴露一個公開接口。8 Y$ k/ ?$ i$ O
# \$ j" x7 Q, M4 D. i! Y
  • 第一個概念是,每一層都有特定的角色和職責(zé)。例如,展現(xiàn)層負(fù)責(zé)處理所有的用戶界面。分層架構(gòu)的這種關(guān)注點分離,讓構(gòu)建高效的角色和職責(zé)非常簡單。
  • 第二個概念是,分層架構(gòu)模式是一個技術(shù)性的分區(qū)架構(gòu),而非一個領(lǐng)域性的分區(qū)架構(gòu)。它們是由組件組成的,而不是領(lǐng)域。
  • 最后一個概念是,分層架構(gòu)中的每一層都被標(biāo)記為封閉或者開放。封閉層意味著請求從一層移到另一層,它必須通過它正下面的這一層才能達(dá)到下面這一層的再下一層。請求不能跳過任何層。: a' i3 U. X; V( s# Y- P! Y& R5 U

    # f4 K. P5 J) W4 J7 Y1 h4 W2 K  [8 \) {- n6 a2 D  ?; R
    - j9 ?# z' H! O5 d- y

    5 C8 p- N% p4 r) x0 f4)弱點. o) q7 X- P4 ~+ x# a( `
    分層會導(dǎo)致性能下降。這種模式不適合高性能應(yīng)用程序,因為經(jīng)過架構(gòu)中的多層來實現(xiàn)一個業(yè)務(wù)請求的效率是不高的。還會增加系統(tǒng)的前期成本和復(fù)雜性。! r& Y/ O* c+ I6 _" R  i
    7 l* j: G4 S, m5 X* J/ n6 D6 X* W
    5)用途$ d) a4 R0 a" y5 a! J+ V
    我們應(yīng)該將這種方式應(yīng)用于小型簡單的應(yīng)用程序。
    / m4 d& y: S9 u) A7 y5 T7 i" o0 m* ^9 ~9 z' v
    多層模式+ Q. R4 ^' Q# j, q
    % P3 Z3 P: n: e
    許多系統(tǒng)的執(zhí)行結(jié)構(gòu)被組織成一系列邏輯組件分組。每個分組被稱為一個層。
    - e& c; a/ u  d7 v1 |5 \; L
    / w- h, n' Z. T0 j2 Q1)上下文
    + c3 t) y" Q5 Q- B' b在一個分布式部署中,通常需要將系統(tǒng)的基礎(chǔ)設(shè)施分到不同的子集中。. q, V, a- i9 n
    $ A* Q; Y4 O% X; s) Q
    2)問題
    2 _; P" w8 Y9 E4 U7 {6 X6 Q我們?nèi)绾螌⑾到y(tǒng)分割到多個計算上獨立的執(zhí)行結(jié)構(gòu):由一些通信媒介連接的軟件和硬件組?. j! ]8 f0 u' Z. ~
    0 y  k  J, H( ]4 o9 }
    3)弱點- D$ r3 R; S2 J% {$ X
    大量前期成本和復(fù)雜性。; O! f* r7 [' w( r
    % o# Q, P* Z. J$ }: x5 a. b
    4)用途( B5 y- [  D4 U
    用在分布式系統(tǒng)中。
    5 X2 t* Y0 k' y$ \0 p- p; C# ?. h% f: u/ h: K
    管道-過濾器架構(gòu)
    8 p- f. s( y. I3 ~3 a軟件架構(gòu)中反復(fù)出現(xiàn)的一種模式是管道 - 過濾器(pipe-filter)模式。
    : k8 u& h2 g+ u. l# Q0 s0 k
    7 }, c( Q  A+ g! }/ p8 ]# T( i( R$ I$ G! ]$ I
    1)上下文
    , Q+ n# Z- r  N9 r. ]許多系統(tǒng)需要轉(zhuǎn)換從輸入到輸出的離散數(shù)據(jù)流。許多類型轉(zhuǎn)換在實踐中重復(fù)出現(xiàn),因此將其創(chuàng)建成獨立的可復(fù)用的部分,這是比較理想的。
    * G# ^$ R5 G1 ^: B: {: V8 l. x5 p5 L7 w5 I7 ?
    2)問題
    1 x/ X6 q( S0 _" P這些系統(tǒng)需要被分割成可復(fù)用的松耦合的組件,組件之間擁有簡單通用的交互機(jī)制。這樣它們就可以靈活地相互結(jié)合。這些通用松耦合的組件就很容易復(fù)用。獨立的組件可以并行執(zhí)行。# g% J% ~. k- k  M( U

    / m: _7 y6 L/ U2 @6 P4 k3)方案
    % k: n+ g4 U" b0 F: C這種架構(gòu)中的管道構(gòu)成了過濾器之間的通信通道。第一個概念是,由于性能原因,每個管道都是非定向的和點對點的,接受來自一個源的輸入并經(jīng)常直接輸出到另外一個源。& k( [9 t. ]' w6 E0 g3 |; N0 W
    - K* H) g8 p  s1 v' |6 u" Z
    在這種模式中,有如下四種過濾器。7 W% J# O# p/ F& e
    ? producer(source):一個過程的起點。
    4 \0 y9 F7 [: u( o( h( I? transformer (map):對一些或所有數(shù)據(jù)進(jìn)行轉(zhuǎn)換。+ t! ]$ n% L( A6 u) I
    ? tester (reduce):測試一個或多個條件。
    8 z' ?' e: S, n" E? consumer (sink):終點。8 R( F4 z7 A8 Z7 |9 @

    6 O: A2 A, a$ a/ w. n( F1 `4)弱點
    2 d' \3 i) ?. t2 z% M不太適合交互性的系統(tǒng),因為它們的轉(zhuǎn)換特性。過多的解析和反解析會導(dǎo)致性能損失,也會增加編寫過濾器本身的復(fù)雜性。
    1 h  m  q) d7 G. k! p- Q3 X" X: w4 X$ E0 ~! _1 g
    5)用途/ G! _! j! X! S4 K; U& b
    管道 - 過濾器架構(gòu)用于各種應(yīng)用程序,特別是簡化單項處理的任務(wù)。+ G; M) W- {& @$ I6 A# X
    , i- ~' \/ W4 D: X
    客戶端-過濾器架構(gòu)
    & r/ Q. X  G! p/ ]2 Y
    0 W2 y/ a1 y  [) ~ 3 z2 V  }% ^$ ^% X& c# q
    1)上下文; r5 ^2 l% e! A( K- X
    有許多共享資源和服務(wù)是大量分布式的客戶端希望訪問的,希望控制訪問或服務(wù)質(zhì)量。
    % c9 D' x9 Q. y6 u1 M  a+ p
    , h- |0 n! h( I& v. X" r2)問題
    4 T9 @! Z, ^9 o+ F( y$ F$ p通過管理一組共享資源和服務(wù),我們可以通過分解公共服務(wù)并在單個位置或少數(shù)位置進(jìn)行修改來提高可修改性和復(fù)用性。我們想要通過在將資源本身分布在多個物理服務(wù)器上的同時集中控制這些資源和服務(wù),來提高可伸縮性和可用性。
    , v; ~' H' P6 J+ s  l& ]  |9 a0 N. }' W8 t' D  g8 S; j% B4 I
    3)方案0 z9 }5 D" z& k3 \5 m
    在客戶端 - 服務(wù)器模式中,組件和連接器具有特定的行為。稱為“客戶端”的組件將請求發(fā)送到稱為“服務(wù)器”的組件,然后等待回復(fù)。服務(wù)器組件接收到客戶端的請求并向其發(fā)送回復(fù)。
    ) I7 q+ X5 d2 f' y" R0 T
    ! e1 P+ b" e/ d  [: Z% ~+ [4)弱點, B( M0 O8 O( u7 h( k6 h1 P
    服務(wù)器會成為性能瓶頸和單點故障位置。在系統(tǒng)建成后,關(guān)于功能位置(在客戶端還是在服務(wù)器)的決策通常是復(fù)雜的而且變動成本很大。5 X# v& V0 i4 s, {
    ( o# r* q6 X3 X7 n+ }) X# i
    5)用途
    6 @7 ~" ^- @6 f% F2 M  i8 m對于有許多組件(客戶端)發(fā)送請求到另外一些提供服務(wù)的組件(服務(wù)器)的系統(tǒng),我們可以使用客戶端 - 服務(wù)器模式來建模這個系統(tǒng)的一部分:在線應(yīng)用程序,例如電子郵件、共享文檔或銀行服務(wù)。9 B' G( t' l! o: R/ `
    ' m7 a% g6 p+ m( ?7 p+ ?
    模型-視圖-控制器架構(gòu)(MVC), U" ?/ V/ u- {) K& u+ U

    6 z3 ?* x6 G/ n
    5 ^5 s" J# v* m  M6 b6 Z  @- j, u) ~" [& g; V4 g+ k7 R
    1)上下文, D+ U: C/ Y8 e+ b0 I& b
    用戶界面通常是一個交互性應(yīng)用程序的最頻繁被修改的部分。用戶通常希望從不同的視角查看數(shù)據(jù),例如柱狀圖或者餅圖。這些表示形式都應(yīng)該反映數(shù)據(jù)當(dāng)前的狀態(tài)。9 `1 Y: m& Q* l
    4 y4 l; m& V( j. B6 x, E
    2)問題$ [+ Q6 f: ?) y: ?$ v1 [1 R; H4 M
    用戶界面功能如何獨立于應(yīng)用程序功能,同時還還對用戶輸入或底層應(yīng)用程序數(shù)據(jù)的更改做出響應(yīng)?
    - c4 z' @' u! }: P0 o+ M0 _當(dāng)?shù)讓討?yīng)用程序數(shù)據(jù)更改時,如何創(chuàng)建、維護(hù)和協(xié)調(diào)用戶界面的多個視圖?! q9 m- s- A, P0 v" n
    7 z% T- t# F7 W
    3)方案
    * F; j1 a- {( |0 s6 d: J模型 - 視圖 - 控制器(model-view-controller,即 MVC)模式將應(yīng)用程序功能分為以下三種類型的組件:. A. ]( n# Q5 k! ]' A  U
    ? 模型,包含應(yīng)用程序的數(shù)據(jù)。8 x7 X- g1 h4 W0 e/ G
    ? 視圖,顯示部分底層數(shù)據(jù)并與用戶交互。
    5 K' h9 y4 c- W/ r; i? 控制器,在模型和視圖之間進(jìn)行中介并管理狀態(tài)更改的通知。; W  }8 P6 T% G5 k4 e, N2 {* }

    4 q' n' g# U8 T# x$ I4)弱點2 {. H) [; R2 n& {/ a* `$ m
    對于簡單的用戶界面,其復(fù)雜性并不值得這么做。& W. \6 f0 w3 O) N
    模型、視圖和控制器抽象可能不適用于某些用戶界面工具包。0 N" \: I% b, l0 ?0 N9 J1 \2 {

    0 d! A6 A4 w3 @6 k) w  L' ^5)用途
    5 ?, \) V' M& Q6 |( XMVC 是網(wǎng)站或移動應(yīng)用程序開發(fā)用戶界面常用的一種架構(gòu)模式。+ K, }* ^; h+ S( S* ^
    4 H. I- h& L+ x5 O! p' U

    4 t+ T8 V" m* _$ d事件驅(qū)動架構(gòu)- P3 F4 M, \, G; `: }
    1)上下文
    ; w* _" \+ ^+ w% f需要提供計算和信息資源來處理傳入的應(yīng)用程序生成的獨立異步事件,這種方式可以隨著需求的增加而擴(kuò)展。
    - ]7 U# b& _& C' M- \3 ~- N2 M, B4 i; u' P" }% Z( {
    2)問題. G# v( \/ _9 h4 F. I, \' l
    構(gòu)建分布式系統(tǒng),這個系統(tǒng)可以服務(wù)異步到達(dá)的事件相關(guān)信息,并且能從簡單小型擴(kuò)展到復(fù)雜大型。& n) D# R" d! m' C2 J# j7 t8 i3 i
    + W( T0 w/ _0 W% }# Y
    3)方案5 ?0 Z0 b  a8 Q' r' W5 N
    ! X! {* R+ l4 Z$ w5 C9 |! E( E$ \
    為事件處理部署獨立的事件進(jìn)程或處理器。到達(dá)的事件進(jìn)入隊列。調(diào)度程序根據(jù)調(diào)度策略從隊列中拉取事件并將它們分配到合適的事件處理器。
    & A* ?. y$ Z; |# H( q4 }. Y8 T# U4 u& `1 E
    4)弱點  `1 w1 N3 ~# A. l4 \0 X
    性能和錯誤恢復(fù)可能是問題。8 U5 q' w, f% D- |; a$ Q

    5 e$ @1 d+ C4 S7 m+ W3 b5)用途6 f. j4 \: J" j2 M$ @$ E
    使用這個方案的電商應(yīng)用程序?qū)⒐ぷ魅缦拢?font class="jammer">& o. y" K) k  E) N
    9 g2 @% R8 h; N( D1 H3 L
    Order Service 創(chuàng)建一個 Order,這個訂單處于待定狀態(tài),然后發(fā)布一個OrderCreated事件。
    ( @8 L4 z6 _8 R9 a? Customer Service 接收到這個事件并嘗試為這個 Order 扣除信用。然后發(fā)布一個Credit Reserved 事件或者CreditLimitExceeded(超出信用限額)事件。7 D/ N3 E* j. n' X% w/ N/ @
    ? Order Service 接收到 Customer Service 發(fā)送的事件并將訂單狀態(tài)更改為已核準(zhǔn)或已取消。
      W5 V3 z" C- k7 ?
    6 B, j' G3 p  E+ I$ Z$ T, ^
    : E' ?( m2 j2 M5 Z微服務(wù)架構(gòu)7 M. p! e+ S/ f9 \% |
    1)上下文
    6 K( h8 ]8 M( \# H* H; d部署基于服務(wù)器的企業(yè)應(yīng)用程序,支持各種瀏覽器和原生移動客戶端。應(yīng)用程序通過執(zhí)行業(yè)務(wù)邏輯、訪問數(shù)據(jù)庫、與其它系統(tǒng)交換信息并返回響應(yīng)來處理客戶端請求。這個應(yīng)用程序可能會暴露一個第三方 API。8 j& V2 J: r& r0 L

    6 @1 m" Q' _! N# u- s' W2)問題
    , L: {: [& n( Q一體化應(yīng)用程序會變得過于龐大和復(fù)雜,無法得到有效支持和部署來實現(xiàn)最優(yōu)的分布式資源利用,例如在云環(huán)境中。
    8 W/ U  H" O( @+ A9 M/ |# N; f/ p
    4 l  W0 ~# b, U3)方案
    4 m8 R+ T$ H* J% H3 H3 B! a. F
    % i* G1 t& \  M- q將應(yīng)用程序構(gòu)建成服務(wù)套件。每個服務(wù)都是獨立部署和可擴(kuò)展的,擁有自己的 API 邊界。不同的服務(wù)可以用不同的編程語言編寫,管理它們自己的數(shù)據(jù)庫,由不同的團(tuán)隊開發(fā)。/ o' W2 N7 w# s  p
    1 [- X/ N/ Z6 v4 Q) K1 z
    4)弱點+ b7 y) K! ?4 v
    系統(tǒng)設(shè)計必須能容忍服務(wù)失敗,需要更多的系統(tǒng)監(jiān)控。服務(wù)編排和事件協(xié)作開銷比較大。
    8 V1 y5 ~* H: Z# H" ^$ S7 z  z% U9 Q% |* c
    5)用途
    ( r  R$ S6 g: E許多使用場景都可以應(yīng)用微服務(wù)架構(gòu),特別是那些涉及大量數(shù)據(jù)管道的場景。例如,一個微服務(wù)系統(tǒng)對關(guān)于一個公司的零售店銷售的報表系統(tǒng)會比較理想。數(shù)據(jù)展現(xiàn)過程的每一步都會被一個微服務(wù)處理:數(shù)據(jù)收集、清理、規(guī)范化、濃縮、聚合、報告等。
    % W6 E: L6 |. t4 ^
    ! t8 S: [- b! e$ `4 {文章來源:牛逼的工程師網(wǎng)友。/ g$ w* I/ Y0 w) f) S1 }
    & M- n" g6 `- M) T6 r2 i0 i$ r1 g/ R
    8 Y6 S7 Q0 |( n( A$ F  b0 i
    2 S' x/ d+ L) l( Q5 ?! u0 U* ^: O# t+ o0 M4 Q
    我是老溫,一名熱愛學(xué)習(xí)的嵌入式工程師1 c1 }0 [6 B( y- z( u7 I
    關(guān)注我,一起變得更加優(yōu)秀!
  • 回復(fù)

    使用道具 舉報

    發(fā)表回復(fù)

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表