無意中在瀏覽文章的時候,發(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ù)好文