一張圖引發(fā)的深思:你了解過架構(gòu)設(shè)計體系嗎皆串?熬夜整理這份文章

無意中在瀏覽文章的時候,發(fā)現(xiàn)了這樣的一張圖

沒什么大不了的眉枕,就是一個網(wǎng)站的系統(tǒng)架構(gòu)設(shè)計恶复,很簡單,一目了然速挑,但是可能小編比較能瞎想呀谤牡,由此聯(lián)想到很多東西,比如架構(gòu)設(shè)計體系

大家有沒有考慮過達(dá)到企業(yè)規(guī)模的軟件系統(tǒng)該如何設(shè)計呢(已經(jīng)是這個層次的大佬姥宝,膜拜)翅萤?在開始寫代碼之前,我們需要選擇一個合適的架構(gòu)腊满,這個架構(gòu)將決定軟件實施過程中的功能屬性和質(zhì)量屬性套么。因此流纹,了解軟件設(shè)計中的不同架構(gòu)模式對我們的軟件設(shè)計會有較大的幫助劫瞳。

但是筛武,在進(jìn)行這個話題之前鞍帝,基礎(chǔ)的東西我們應(yīng)該知道呀方援,往下看

什么是架構(gòu)和架構(gòu)本質(zhì)

  在軟件行業(yè)紊婉,對于什么是架構(gòu)麻车,都有很多的爭論伯铣,每個人都有自己的理解崎坊。 此君說的架構(gòu)和彼君理解的架構(gòu)未必是一回事阵苇。

  我們主要針對互聯(lián)網(wǎng)服server系統(tǒng)(類似網(wǎng)站)來定義架構(gòu):架構(gòu)是系統(tǒng)的骨架壁公,支撐和鏈接各個部分,包括組件绅项、連接件紊册、約束規(guī)范,以及指導(dǎo)這些內(nèi)容設(shè)計與演化的原理快耿。

  組件:類似應(yīng)用服務(wù)囊陡,獨(dú)立模塊、數(shù)據(jù)庫掀亥、nginx等等撞反、

  連接件:分布式調(diào)用、進(jìn)程間調(diào)用搪花、調(diào)用使用http協(xié)議還是tcp協(xié)議遏片、組件之間的交互關(guān)系、

  約束規(guī)范: 定規(guī)則做限制:例如設(shè)計原則撮竿、編碼規(guī)范等等吮便。

  是系統(tǒng)性的思考,權(quán)衡利弊之后在現(xiàn)有資源約束下的“最合理決策”幢踏,并有它來指導(dǎo)團(tuán)隊中的每個人思想層面上的一致髓需。

  即架構(gòu)=組件+交互。

  這類似建筑設(shè)計規(guī)劃惑折,城市總體規(guī)劃等授账,其實就是架構(gòu),只是應(yīng)用的場景不同惨驶。蓋一座小房子白热,可以拍腦袋干起來,但是當(dāng)你要蓋一座大樓粗卜,如果沒有一個建筑設(shè)計規(guī)劃屋确,可以想象搭理最后是什么樣?

  架構(gòu)的本質(zhì)就是對系統(tǒng)進(jìn)行有序化地重構(gòu)以致符合當(dāng)前業(yè)務(wù)的發(fā)展,并可以快速擴(kuò)展攻臀。

  那什么樣的系統(tǒng)要考慮做架構(gòu)設(shè)計?

  1. 需求相對復(fù)雜.

  2. 非功能性需求在整個系統(tǒng)占據(jù)重要位置.

  3. 系統(tǒng)生命周期長,有擴(kuò)展性需求.

  4.系統(tǒng)基于組件或者集成的需要.

  5.業(yè)務(wù)流程再造的需要.

  2焕数、架構(gòu)分類

  架構(gòu)可細(xì)分為業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)刨啸、技術(shù)架構(gòu), 代碼架構(gòu), 部署架構(gòu),.

  業(yè)務(wù)架構(gòu)是戰(zhàn)略堡赔,應(yīng)用架構(gòu)是戰(zhàn)術(shù),技術(shù)架構(gòu)是裝備设联。其中應(yīng)用架構(gòu)承上啟下善已,一方面承接業(yè)務(wù)架構(gòu)的落地,另一方面影響技術(shù)選型离例。

  熟悉業(yè)務(wù)换团,形成業(yè)務(wù)架構(gòu),根據(jù)業(yè)務(wù)架構(gòu)宫蛆,做出相應(yīng)的應(yīng)用架構(gòu)艘包,最后技術(shù)架構(gòu)落地實施。

  如何針對當(dāng)前需求耀盗,選擇合適的應(yīng)用架構(gòu)想虎,如何面向未來,保證架構(gòu)平滑過渡袍冷,這個是軟件開發(fā)者磷醋,特別是架構(gòu)師,都需要深入思考的問題胡诗。

  一、業(yè)務(wù)架構(gòu)(俯視架構(gòu)):

  包括業(yè)務(wù)規(guī)劃淌友,業(yè)務(wù)模塊煌恢、業(yè)務(wù)流程,對整個系統(tǒng)的業(yè)務(wù)進(jìn)行拆分震庭,對領(lǐng)域模型進(jìn)行設(shè)計瑰抵,把現(xiàn)實的業(yè)務(wù)轉(zhuǎn)化成抽象對象。

  沒有最優(yōu)的架構(gòu)器联,只有最合適的架構(gòu)二汛,一切系統(tǒng)設(shè)計原則都要以解決業(yè)務(wù)問題為最終目標(biāo),脫離實際業(yè)務(wù)的技術(shù)情懷架構(gòu)往往會給系統(tǒng)帶入大坑拨拓,任何不基于業(yè)務(wù)做異想天開的架構(gòu)都是耍流氓肴颊。

  所有問題的前提要搞清楚我們今天面臨的業(yè)務(wù)量有多大,增長走勢是什么樣渣磷,而且解決高并發(fā)的過程婿着,一定是一個循序漸進(jìn)逐步的過程。 合理的架構(gòu)能夠提前預(yù)見業(yè)務(wù)發(fā)展1~2年為宜。這樣可以付出較為合理的代價換來真正達(dá)到技術(shù)引領(lǐng)業(yè)務(wù)成長的效果竟宋。

  看看京東業(yè)務(wù)架構(gòu)(網(wǎng)上分享圖):

  二提完、應(yīng)用架構(gòu)(剖面架構(gòu),也叫邏輯架構(gòu)圖):

  硬件到應(yīng)用的抽象丘侠,包括抽象層和編程接口徒欣。應(yīng)用架構(gòu)和業(yè)務(wù)架構(gòu)是相輔相成的關(guān)系。業(yè)務(wù)架構(gòu)的每一部分都有應(yīng)用架構(gòu)蜗字。

  類似:

  應(yīng)用架構(gòu):應(yīng)用作為獨(dú)立可部署的單元帚称,為系統(tǒng)劃分了明確的邊界,深刻影響系統(tǒng)功能組織秽澳、代碼開發(fā)闯睹、部署和運(yùn)維等各方面. 應(yīng)用架構(gòu)定義系統(tǒng)有哪些應(yīng)用、以及應(yīng)用之間如何分工和合作担神。這里所謂應(yīng)用就是各個邏輯模塊或者子系統(tǒng)楼吃。

  應(yīng)用架構(gòu)圖關(guān)鍵有2點:

  1、職責(zé)劃分: 明確應(yīng)用(各個邏輯模塊或者子系統(tǒng))邊界

  1)邏輯分層

  2)子系統(tǒng)妄讯、模塊定義孩锡。

  3)關(guān)鍵類。

  2亥贸、職責(zé)之間的協(xié)作:

  1)接口協(xié)議:應(yīng)用對外輸出的接口躬窜。

  2)協(xié)作關(guān)系:應(yīng)用之間的調(diào)用關(guān)系。

  應(yīng)用分層有兩種方式:

  一種是水平分(橫向)炕置,按照功能處理順序劃分應(yīng)用荣挨,比如把系統(tǒng)分為web前端/中間服務(wù)/后臺任務(wù),這是面向業(yè)務(wù)深度的劃分朴摊。

  另一種是垂直分(縱向)默垄,按照不同的業(yè)務(wù)類型劃分應(yīng)用,比如進(jìn)銷存系統(tǒng)可以劃分為三個獨(dú)立的應(yīng)用甚纲,這是面向業(yè)務(wù)廣度的劃分口锭。

  應(yīng)用的合反映應(yīng)用之間如何協(xié)作,共同完成復(fù)雜的業(yè)務(wù)case介杆,主要體現(xiàn)在應(yīng)用之間的通訊機(jī)制和數(shù)據(jù)格式鹃操,通訊機(jī)制可以是同步調(diào)用/異步消息/共享DB訪問等,數(shù)據(jù)格式可以是文本/XML/JSON/二進(jìn)制等春哨。

  應(yīng)用的分偏向于業(yè)務(wù)荆隘,反映業(yè)務(wù)架構(gòu),應(yīng)用的合偏向于技術(shù)悲靴,影響技術(shù)架構(gòu)臭胜。分降低了業(yè)務(wù)復(fù)雜度莫其,系統(tǒng)更有序,合增加了技術(shù)復(fù)雜度耸三,系統(tǒng)更無序乱陡。

  應(yīng)用架構(gòu)的本質(zhì)是通過系統(tǒng)拆分,平衡業(yè)務(wù)和技術(shù)復(fù)雜性仪壮,保證系統(tǒng)形散神不散憨颠。

  系統(tǒng)采用什么樣的應(yīng)用架構(gòu),受業(yè)務(wù)復(fù)雜性影響积锅,包括企業(yè)發(fā)展階段和業(yè)務(wù)特點爽彤;同時受技術(shù)復(fù)雜性影響,包括IT技術(shù)發(fā)展階段和內(nèi)部技術(shù)人員水平缚陷。業(yè)務(wù)復(fù)雜性(包括業(yè)務(wù)量大)必然帶來技術(shù)復(fù)雜性适篙,應(yīng)用架構(gòu)目標(biāo)是解決業(yè)務(wù)復(fù)雜性的同時,避免技術(shù)太復(fù)雜箫爷,確保業(yè)務(wù)架構(gòu)落地嚷节。

  三、代碼架構(gòu)(也叫開發(fā)架構(gòu)):

  子系統(tǒng)代碼架構(gòu)主要為開發(fā)人員提供切實可行的指導(dǎo)虎锚,如果代碼架構(gòu)設(shè)計不足硫痰,就會造成影響全局的架構(gòu)設(shè)計。比如公司內(nèi)不同的開發(fā)團(tuán)隊使用不同的技術(shù)棿芑ぃ或者組件效斑,結(jié)果公司整體架構(gòu)設(shè)計就會失控。

  代碼架構(gòu)主要定義:

  一柱徙、代碼單元:

  1缓屠、配置設(shè)計

  2、框架坐搔、類庫藏研。

  二、代碼單元組織:

  1概行、編碼規(guī)范,編碼的慣例弧岳。

  2凳忙、項目模塊劃分

  3、頂層文件結(jié)構(gòu)設(shè)計禽炬,比如mvc設(shè)計涧卵。

  4、依賴關(guān)系

  四腹尖、技術(shù)架構(gòu)柳恐,也可以叫系統(tǒng)架構(gòu)

  技術(shù)架構(gòu):確定組成應(yīng)用系統(tǒng)的實際運(yùn)行組件(lvs,nginx,tomcat乐设,php-fpm等)讼庇,這些運(yùn)行組件之間的關(guān)系,以及部署到硬件的策略近尚。

  技術(shù)架構(gòu)主要考慮系統(tǒng)的非功能性特征蠕啄,對系統(tǒng)的高可用、高性能戈锻、擴(kuò)展歼跟、安全、伸縮性格遭、簡潔等做系統(tǒng)級的把握哈街。

  系統(tǒng)架構(gòu)的設(shè)計要求架構(gòu)師具備軟件和硬件的功能和性能的過硬知識,這也是架構(gòu)設(shè)計工作中最為困難的工作拒迅。

  五骚秦、部署拓?fù)浼軜?gòu)圖(實際物理架構(gòu)圖):

  拓?fù)浼軜?gòu),包括架構(gòu)部署了幾個節(jié)點坪它,節(jié)點之間的關(guān)系骤竹,服務(wù)器的高可用,網(wǎng)路接口和協(xié)議等往毡,決定了應(yīng)用如何運(yùn)行蒙揣,運(yùn)行的性能,可維護(hù)性开瞭,可擴(kuò)展性懒震,是所有架構(gòu)的基礎(chǔ)。這個圖主要是運(yùn)維工程師主要關(guān)注的對象嗤详。

  應(yīng)用架構(gòu)

  架構(gòu)演進(jìn)路程:

  ->初始階段:LAMP,部署在一臺服務(wù)器

  ->應(yīng)用服務(wù)器和數(shù)據(jù)服務(wù)器分離

  ->使用緩存改善性能

  ->使用集群改善并發(fā)

  ->數(shù)據(jù)庫的讀寫分離

  ->使用反向代理和cdn加速

  ->使用分布式文件和分布式數(shù)據(jù)庫

  ->業(yè)務(wù)拆分

  ->分布式服務(wù)

  業(yè)務(wù)架構(gòu)是生產(chǎn)力个扰,應(yīng)用架構(gòu)是生產(chǎn)關(guān)系,技術(shù)架構(gòu)是生產(chǎn)工具葱色。業(yè)務(wù)架構(gòu)決定應(yīng)用架構(gòu)递宅,應(yīng)用架構(gòu)需要適配業(yè)務(wù)架構(gòu),并隨著業(yè)務(wù)架構(gòu)不斷進(jìn)化苍狰,同時應(yīng)用架構(gòu)依托技術(shù)架構(gòu)最終落地办龄。

  企業(yè)一開始業(yè)務(wù)比較簡單,比如進(jìn)銷存淋昭,此時面向內(nèi)部用戶俐填,提供簡單的信息管理系統(tǒng)(MIS),支持?jǐn)?shù)據(jù)增刪改查即可翔忽,單體應(yīng)用可以滿足要求英融。

  隨著業(yè)務(wù)深入盏檐,進(jìn)銷存每塊業(yè)務(wù)都變復(fù)雜,同時新增客戶關(guān)系管理驶悟,以更好支持營銷胡野,業(yè)務(wù)的深度和廣度都增加,這時需要對系統(tǒng)按照業(yè)務(wù)拆分撩银,變成一個分布式系統(tǒng)给涕。

  更進(jìn)一步,企業(yè)轉(zhuǎn)向互聯(lián)網(wǎng)+戰(zhàn)略额获,拓展在線交易够庙,線上系統(tǒng)和內(nèi)部系統(tǒng)業(yè)務(wù)類似,沒必要重做一套抄邀,此時把內(nèi)部系統(tǒng)的邏輯做服務(wù)化改造耘眨,同時供線上線下系統(tǒng)使用,變成一個簡單的SOA架構(gòu)境肾。

  緊接著業(yè)務(wù)模式越來越復(fù)雜剔难,訂單、商品奥喻、庫存偶宫、價格每塊玩法都很深入,比如價格區(qū)分會員等級环鲤,訪問渠道(無線還是PC)纯趋,銷售方式(團(tuán)購還是普通)等,還有大量的價格促銷冷离,這些規(guī)則很復(fù)雜吵冒,容易相互沖突,需要把分散到各個業(yè)務(wù)的價格邏輯進(jìn)行統(tǒng)一管理西剥,以基礎(chǔ)價格服務(wù)的方式透明地提供給上層應(yīng)用痹栖,變成一個微內(nèi)核的SOA架構(gòu)。

  同時不管是企業(yè)內(nèi)部用戶瞭空,還是外部顧客所需要的功能揪阿,都有很多細(xì)分的應(yīng)用提供支持,需要提供portal咆畏,集成相關(guān)應(yīng)用图甜,為不同用戶提供統(tǒng)一視圖,頂層變成一個AOA的架構(gòu)(application orientated architecture)鳖眼。

  衡量架構(gòu)的合理性

  架構(gòu)為業(yè)務(wù)服務(wù),沒有最優(yōu)的架構(gòu)嚼摩,只有最合適的架構(gòu)钦讳, 架構(gòu)始終以高效矿瘦,穩(wěn)定,安全為目標(biāo)來衡量其合理性愿卒。

  一缚去、穩(wěn)定性。指標(biāo):

  1. 高可用:要盡可能的提高軟件的可用性琼开,我想每個操作人都不愿意看到自己的工作無法正常進(jìn)行易结。黑盒白盒測試、單元測試柜候、自動化測試搞动、故障注入測試、提高測試覆蓋率等方式來一步一步推進(jìn)渣刷。

  二鹦肿、高效指標(biāo):

  1. 文檔化:不管是整體還是部分的整個生命周期內(nèi)都必須做好文檔化,變動的來源包括但不限于BUG辅柴,需求箩溃。

  2. 可擴(kuò)展:軟件的設(shè)計秉承著低耦合的理念去做,注意在合理的地方抽象碌嘀。方便功能更改涣旨、新增和運(yùn)用技術(shù)的迭代,并且支持在適時對架構(gòu)做出重構(gòu)股冗。

  3. 高復(fù)用:為了避免重復(fù)勞動霹陡,為了降低成本,我們希望能夠重用之前的代碼魁瞪、之前的設(shè)計穆律。這點對于架構(gòu)環(huán)境的依賴是最大的。

  三导俘、安全指標(biāo)

  1. 安全:組織的運(yùn)作過程中產(chǎn)生的數(shù)據(jù)都是具有商業(yè)價值的峦耘,保證數(shù)據(jù)的安全也是刻不容緩的一部分。以免出現(xiàn)XX門之類丑聞旅薄。加密辅髓、https等為普遍手段

  常見架構(gòu)誤區(qū)

  誤區(qū)1——架構(gòu)專門有架構(gòu)師來做,業(yè)務(wù)開發(fā)人員無需關(guān)注:架構(gòu)的再好少梁,最終還是需要代碼來落地洛口,并且組織越大這個落地的難度越大。不單單是系統(tǒng)架構(gòu)凯沪,每個解決方案每個項目也有自己的架構(gòu)第焰,如分層、設(shè)計模式等妨马。如果每一塊磚瓦不夠堅固挺举,那么整個系統(tǒng)還是會有崩塌的風(fēng)險杀赢。所謂“千里之堤,潰于蟻穴”湘纵。

  誤區(qū)2——架構(gòu)師確定了架構(gòu)藍(lán)圖之后任務(wù)就結(jié)束了:架構(gòu)不是“空中樓閣”脂崔,最終還是要落地的,但是架構(gòu)師完全不去深入到第一線怎么知道“地”在哪梧喷?怎么才能落的穩(wěn)穩(wěn)當(dāng)當(dāng)砌左。

  誤區(qū)3——不做出完美的架構(gòu)設(shè)計不開工:世上沒有最好架構(gòu),只有最合適的架構(gòu)铺敌。我們需要的不是一下子造出一輛汽車汇歹,而是從單輪車 --> 自行車 --> 摩托車,最后再到汽車适刀。想象一下2年后才能造出的產(chǎn)品秤朗,當(dāng)初市場還存在嗎?

但是笔喉,就像在java開發(fā)的過程中有設(shè)計模式進(jìn)行參考一樣取视,難道架構(gòu)設(shè)計就是大家一拍腦門就出來的嘛?那肯定不是啊常挚,繼續(xù)看

軟件架構(gòu)模式

什么是架構(gòu)模式作谭?根據(jù)維基百科:架構(gòu)模式是針對特定軟件架構(gòu)場景常見問題的通用、可重用解決方案奄毡。架構(gòu)模式類似于軟件設(shè)計模式折欠,但范圍更廣。本文將簡要解釋10種常見架構(gòu)模式及其用法吼过、優(yōu)缺點锐秦。

分層模式(Layered pattern)

客戶端-服務(wù)器模式(Client-server pattern)

主從模式(Master-slave pattern)

管道-過濾器模式(Pipe-filter pattern)

代理模式(Broker pattern)

點對點模式(Peer-to-peer pattern)

事件-總線模式(Event-bus pattern)

模型-視圖-控制器模式(Model-view-controller pattern)

黑板模式(Blackboard pattern)

解釋器模式(Interpreter pattern)

1. 分層模式

此模式用于可分解為子任務(wù)的結(jié)構(gòu)化程序,每個子任務(wù)都位于特定的抽象層級盗忱,每一層都為上一層提供服務(wù)酱床。一般信息系統(tǒng)最常見的4個層次如下。

表示層(也稱為UI層)

應(yīng)用層(也稱為服務(wù)層)

業(yè)務(wù)邏輯層(也稱為領(lǐng)域?qū)?

數(shù)據(jù)訪問層(也稱為持久層)

應(yīng)用場景:

一般的桌面應(yīng)用程序

電子商務(wù)web應(yīng)用程序

一般的移動App

2. 客戶端-服務(wù)器模式

這種模式由兩部分組成:服務(wù)器和多個客戶端趟佃。服務(wù)器將向多個客戶端提供服務(wù)扇谣。客戶端從服務(wù)器請求服務(wù)闲昭,服務(wù)器向這些客戶端提供相關(guān)服務(wù)罐寨。此外,服務(wù)器繼續(xù)偵聽客戶端請求序矩。

應(yīng)用場景:

電子郵件鸯绿、文檔共享和銀行等在線應(yīng)用程序。

基于IPC的應(yīng)用程序

3.主從模式

這種模式由兩部分組成:主節(jié)點和從節(jié)點。主節(jié)點將工作分配給相同的從節(jié)點楞慈,并根據(jù)從節(jié)點返回的結(jié)果計算最終結(jié)果幔烛。

應(yīng)用場景:

在數(shù)據(jù)庫復(fù)制中,主數(shù)據(jù)庫被視為權(quán)威源數(shù)據(jù)庫囊蓝,從數(shù)據(jù)庫與之同步。

通過總線連接到計算機(jī)系統(tǒng)(主驅(qū)動器和從驅(qū)動器)的外圍設(shè)備令蛉。

進(jìn)程內(nèi)的多線程應(yīng)用聚霜。

4.管道-過濾器模式

這種模式可用于構(gòu)造生成和處理數(shù)據(jù)流的系統(tǒng)。每個處理步驟都包含一個過濾器組件珠叔。要處理的數(shù)據(jù)通過管道傳遞蝎宇。這些管道可用于緩沖或同步目的。

應(yīng)用場景:

編譯器祷安。連續(xù)過濾器執(zhí)行詞法分析姥芥、詞法解析、語義分析和代碼生成汇鞭。

生物信息學(xué)的工作流

工具鏈?zhǔn)降膽?yīng)用程序

5. 代理模式

這種模式通過解耦組件來構(gòu)造分布式系統(tǒng)凉唐。這些組件可以通過遠(yuǎn)程服務(wù)調(diào)用彼此交互。代理組件負(fù)責(zé)協(xié)調(diào)組件之間的通信霍骄。服務(wù)器向代理發(fā)布功能(服務(wù)和特征)台囱。客戶端向代理請求服務(wù)读整,然后代理將客戶端重定向到合適的服務(wù)簿训。需要注意broker,agent米间,proxy以及delegate的區(qū)別强品。

應(yīng)用場景:

消息代理軟件,例如:Apache ActiveMQ屈糊、Apache Kafka的榛、RabbitMQ和JBoss消息傳遞。

網(wǎng)絡(luò)傳輸中的代理軟件另玖。

6. P2P模式

在這種模式中困曙,每個組件都稱為對等節(jié)點。對等節(jié)點既可以作為客戶機(jī)(從其他對等節(jié)點請求服務(wù))谦去,也可以作為服務(wù)器(向其他對等節(jié)點提供服務(wù))慷丽。對等節(jié)點可以充當(dāng)單個客戶機(jī)或服務(wù)器,也可以同時充當(dāng)客戶機(jī)和服務(wù)器鳄哭,并且可以隨著時間變化動態(tài)地更改角色要糊。

使用場景:

文件共享網(wǎng)絡(luò),例如Gnutella和G2等妆丘。

多媒體協(xié)議锄俄,如P2PTV和PDTP局劲。

7. 事件-總線模式

這種模式也被稱為訂閱發(fā)布模式,主要處理事件奶赠,有4個主要組件:事件源鱼填、事件監(jiān)聽者、通道和事件總線毅戈。事件源將消息發(fā)布到事件總線上的特定通道苹丸,監(jiān)聽者訂閱特定的通道。消息發(fā)布到監(jiān)聽者之前訂閱的通道苇经,監(jiān)聽者將收到消息的通知赘理。

使用場景:

安卓開發(fā)

通知服務(wù)

注冊中心

8. 模型-視圖-控制器模式

這種模式,也稱為MVC模式扇单,將一個交互應(yīng)用程序分為三個部分:

模型-包含核心功能和數(shù)據(jù)

視圖——向用戶顯示信息(可以定義多個視圖)

控制器——處理來自用戶的輸入

這樣做是為了將信息的內(nèi)部表示商模、信息呈現(xiàn)給用戶的方式、接受用戶輸入的方式分離開來蜘澜。這種模式解耦組件并允許有效的代碼重用施流。

應(yīng)用場景:

一般的web應(yīng)用程序架構(gòu)

Django和Rails等Web框架

一般的GUI 應(yīng)用程序

9. 黑板模式

這種模式對于沒有確定解決方案策略的問題非常有用。黑板圖案由三個主要部分組成:

黑板:一個結(jié)構(gòu)化的全局內(nèi)存兼都,包含來自解決方案空間的對象

知識源:具有自己表示形式的專門化模塊

控制組件:選擇嫂沉、配置和執(zhí)行模塊

所有的組件都可以到達(dá)黑板。組件可以生成添加到黑板上的新數(shù)據(jù)對象扮碧。組件在黑板上查找特定類型的數(shù)據(jù)趟章,并通過與現(xiàn)有的知識源進(jìn)行模式匹配找到這些數(shù)據(jù)。

應(yīng)用場景:

語音識別

車輛識別及追蹤

蛋白質(zhì)結(jié)構(gòu)識別

聲納信號的解釋

10. 解釋器模式

這種模式用于設(shè)計一個解釋專用語言編寫的程序組件慎王。它主要指定如何評估每一行程序蚓土,即用特定語言編寫的句子或表達(dá)式。其基本思想是語言的每個符號都有一個類赖淤。

應(yīng)用場景:

數(shù)據(jù)庫查詢語言蜀漆,如SQL。

用于描述通信協(xié)議的語言咱旱。

好了确丢,今天的內(nèi)容,基本就到這里結(jié)束了

覺得寫的還不錯的吐限,歡迎點贊+關(guān)注支持一下小編鲜侥,后期會不斷更新,需要相關(guān)資料的诸典,轉(zhuǎn)發(fā)后私信“資料”即可描函,謝謝

最后,給大家推薦幾本書,有我自己看過的舀寓,有我老大推薦給我的胆数,希望對各位能有所幫助

  架構(gòu)書籍推薦

  1. 《大型網(wǎng)站技術(shù)架構(gòu):核心原理與案例分析》

  這是比較早,比較系統(tǒng)介紹大型網(wǎng)站技術(shù)架構(gòu)的書互墓,通俗易懂又充滿智慧必尼,即便你之前完全沒接觸過網(wǎng)站開發(fā),通讀前幾章轰豆,也能快速獲取到常見的網(wǎng)站技術(shù)架構(gòu)及其應(yīng)用場景胰伍。非常贊。

  2. 《億級流量網(wǎng)站架構(gòu)核心技術(shù)》

  相比《大型網(wǎng)站技術(shù)架構(gòu)》的高屋建瓴酸休,開濤的這本《億級流量網(wǎng)站架構(gòu)核心技術(shù)》則落實到細(xì)節(jié),網(wǎng)站架構(gòu)中常見的各種技術(shù)祷杈,比如緩存斑司、隊列、線程池但汞、代理……宿刮,統(tǒng)統(tǒng)都講到了,而且配有核心代碼私蕾。甚至連 Nginx 的配置都有僵缺!

  如果你想在實現(xiàn)大流量網(wǎng)站時找參考技術(shù)和代碼,這本書最合適啦踩叭。

  3. 《架構(gòu)即未來》

  這是一本“神書”啦磕潮,超越具體技術(shù)層面,著重剖析架構(gòu)問題的根源容贝,幫助我們弄清楚應(yīng)該以何種方式管理自脯、領(lǐng)導(dǎo)、組織和配置團(tuán)隊斤富。

  4. 《分布式服務(wù)架構(gòu):原理膏潮、設(shè)計與實戰(zhàn)》

  這本書全面介紹了分布式服務(wù)架構(gòu)的原理與設(shè)計,并結(jié)合作者在實施微服務(wù)架構(gòu)過程中的實踐經(jīng)驗满力,總結(jié)了保障線上服務(wù)健康焕参、可靠的最佳方案,是一本架構(gòu)級油额、實戰(zhàn)型的重量級著作叠纷。

  5. 《聊聊架構(gòu)》

  這算是架構(gòu)方面的一本神書了,從架構(gòu)的原初談起悔耘,從業(yè)務(wù)的拆分談起讲岁,談到架構(gòu)的目的,架構(gòu)師的角色,架構(gòu)師如何將架構(gòu)落地……強(qiáng)烈推薦缓艳。

  不過校摩,對于沒有架構(gòu)實踐經(jīng)驗的小伙伴來講,可能會覺得這本書比較虛阶淘,概念多衙吩,實戰(zhàn)少。但如果你有過一兩個項目的架構(gòu)經(jīng)驗溪窒,就會深深認(rèn)同書中追本溯源探討的架構(gòu)理念坤塞。

  6. 《軟件架構(gòu)師的12項修煉》

  大多數(shù)時候所謂的“技術(shù)之玻璃天花板”其實只是缺乏軟技能而已。這些技能可以學(xué)到澈蚌,缺乏的知識可以通過決定改變的努力來彌補(bǔ)摹芙。

想了解獲取的可以轉(zhuǎn)發(fā)關(guān)注小編,私信小編“學(xué)習(xí)”來免費(fèi)獲取吧宛瞄!

1 SpringBoot+ 高并發(fā)消息處理 EDM?項目 實戰(zhàn)

2 SpringBoot ELK?分布式 數(shù)據(jù)分析

3 Netty?高 并發(fā) UTS?項目實戰(zhàn)

關(guān)注公眾號:Java架構(gòu)師聯(lián)盟浮禾,每日更新原創(chuàng)技術(shù)好文

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市份汗,隨后出現(xiàn)的幾起案子盈电,更是在濱河造成了極大的恐慌,老刑警劉巖杯活,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匆帚,死亡現(xiàn)場離奇詭異,居然都是意外死亡旁钧,警方通過查閱死者的電腦和手機(jī)吸重,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來均践,“玉大人晤锹,你說我怎么就攤上這事⊥” “怎么了鞭铆?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長焦影。 經(jīng)常有香客問我车遂,道長,這世上最難降的妖魔是什么斯辰? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任舶担,我火速辦了婚禮,結(jié)果婚禮上彬呻,老公的妹妹穿的比我還像新娘衣陶。我一直安慰自己柄瑰,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布剪况。 她就那樣靜靜地躺著教沾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪译断。 梳的紋絲不亂的頭發(fā)上授翻,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機(jī)與錄音孙咪,去河邊找鬼堪唐。 笑死,一個胖子當(dāng)著我的面吹牛翎蹈,可吹牛的內(nèi)容都是我干的淮菠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼荤堪,長吁一口氣:“原來是場噩夢啊……” “哼兜材!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起逞力,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎糠爬,沒想到半個月后寇荧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡执隧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年揩抡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镀琉。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡峦嗤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出屋摔,到底是詐尸還是另有隱情烁设,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布钓试,位于F島的核電站装黑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏弓熏。R本人自食惡果不足惜恋谭,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一称杨、第九天 我趴在偏房一處隱蔽的房頂上張望增蹭。 院中可真熱鬧,春花似錦喧半、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至母截,卻和暖如春到忽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背清寇。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工喘漏, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人华烟。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓翩迈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親盔夜。 傳聞我的和親對象是個殘疾皇子负饲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355