架構(gòu)之美

本文為讀書筆記

一、架構(gòu)決策的案例

  • 架構(gòu)設(shè)計
    • 決策
    • 交流
  • 對并發(fā)的考慮不足,使用Spark導(dǎo)致瓶頸無法解決
  • 由于是微服務(wù),接口保證了可擴展性,整體遷移到ES,前端不需要修改
  • 決策失敗:對實際場景的瓶頸預(yù)計不足,選型不從實際性能瓶頸出發(fā)
  • 架構(gòu)設(shè)計不是閉門造車,而是集體交流的結(jié)果
  • 白板便利貼
白板便利貼

二、架構(gòu)視圖

RUP 4+1視圖
  • 業(yè)務(wù)場景

    • 用戶視角的實際業(yè)務(wù)場景
    • 關(guān)鍵用例


      業(yè)務(wù)場景
  • 邏輯視圖

    • 關(guān)注參與業(yè)務(wù)子系統(tǒng)(角色)
    • 角色
      • 產(chǎn)品
      • 開發(fā)
      • 運維
      • 測試
    • 分層架構(gòu)


      邏輯視圖
邏輯視圖 分層架構(gòu)
  • 開發(fā)視圖

    • 分包、分命名空間
    • 用于約束開發(fā)人員,統(tǒng)一思想,確定邊界


      開發(fā)視圖
  • 進程視圖

    • 運行時的調(diào)用情況
    • 對業(yè)務(wù)性能要求高的很重要


      進程視圖
  • 物理視圖

    • 系統(tǒng)部署


      物理視圖

三 架構(gòu)模型

C4架構(gòu)模型
  • Context
    • 黑盒子
    • 有上下游
  • Container
    • 子模塊劃分
    • 邊界確認
  • Componet
    • 流式處理業(yè)務(wù)(組合、判斷)
      • source 輸入流
      • channel 處理流
        • 多個細粒度的processor組合
        • 不包含業(yè)務(wù),而是組合業(yè)務(wù)
        • 把有副作用(修改外部元素或流)和無副作用的processor區(qū)分開
        • 輸入輸出盡量是模型對象而不是基本類型,避免職責(zé)模糊
        • Processor甚至命名很長,但可重用性高,同時方便單元測試
      • sink 輸出流
  • Classes
    • 具體執(zhí)行類


      C4架構(gòu)模型

四 架構(gòu)風(fēng)格

  • REST架構(gòu)風(fēng)格

    • 核心是狀態(tài)模式
    • 通過狀態(tài)模式實現(xiàn)的應(yīng)用層的無狀態(tài),降低系統(tǒng)的復(fù)雜性(mvi也有類似的實現(xiàn))


      REST架構(gòu)風(fēng)格
  • 微服務(wù)風(fēng)格

    • 小而美,松耦合,按需擴展
    • 單獨迭代進化
    • 優(yōu)點
      • 可以任意增刪,按需擴展
    • 缺點
      • 增加了系統(tǒng)的復(fù)雜度
    • 優(yōu)先設(shè)計成微服務(wù)
      • 頻繁更新變更
      • 采用不同技術(shù)棧
      • 高并發(fā)可以水平擴展


        微服務(wù)風(fēng)格

        image.png
  • 關(guān)鍵部件

    • 服務(wù)注冊發(fā)現(xiàn)
    • 配置中心
    • 斷路器 避免死鎖,超時強制拋異常。重啟服務(wù)等。
    • 分布式事務(wù)
    • 負載均衡
    • 監(jiān)控 方便運維
      • 服務(wù)監(jiān)控
      • 日志監(jiān)控
      • 數(shù)據(jù)庫監(jiān)控
      • 資源監(jiān)控
  • CQRS - 命令、查詢職責(zé)分離

    • command
      • 無返回、有副作用
      • 如果返回,則返回結(jié)果
    • query
      • 無副作用,有返回
    • Event store用于做副作用事件日志


      image.png

五 分層架構(gòu)模式

  • 經(jīng)典3層
    • View 用戶界面層
    • Presenter 業(yè)務(wù)邏輯層
    • Model 數(shù)據(jù)訪問層
    • Data 數(shù)據(jù)庫
  • 演進分層架構(gòu)
    • 前端
      • Web UI、Mobile UI、3rd-party serviceces
      • 面向用戶
    • 控制層
      • 中間層
      • 面向通信、路由、鑒權(quán)、負載均衡
    • 應(yīng)用層
      • 組合業(yè)務(wù)邏輯
      • 組合領(lǐng)域?qū)诱{(diào)用
      • 面向應(yīng)用、業(yè)務(wù)
    • 領(lǐng)域?qū)?
      • 執(zhí)行單一業(yè)務(wù)邏輯
      • 面向具體業(yè)務(wù)
    • 基礎(chǔ)設(shè)施層
      • 數(shù)據(jù)庫、設(shè)置、設(shè)備
      • 面向資源/設(shè)備


        演進分層架構(gòu)
  • 穩(wěn)定依賴原則
    • 依賴穩(wěn)定的,即接口,因為接口抽象(依賴倒置)
    • 上游依賴下游,下游不應(yīng)依賴上游
六邊形架構(gòu)
  • 核心是domain和application
  • 外延是adapter
  • 作用是可以被多種上下游復(fù)用


    六邊形架構(gòu)

六 架構(gòu)設(shè)計的過程

架構(gòu)設(shè)計的過程
領(lǐng)域驅(qū)動設(shè)計DDD
設(shè)計過程
  • 戰(zhàn)略設(shè)計
    • 通過問題域和業(yè)務(wù)期望來劃分邊界
    • 統(tǒng)一語言(接口),限制邊界上下文
  • 戰(zhàn)術(shù)設(shè)計
    • 模塊內(nèi)的自迭代(實現(xiàn)、維護、重構(gòu))
推廣到分包實踐
  • 業(yè)務(wù)(interface - 實現(xiàn))- VP
    • 如果要替換一個模塊 會替換的是功能,而絕不是同類集合
    • 也可能被抽出作為公共庫
  • 公共接口(Util 日志)
  • 資源(JavaBean 常量 基礎(chǔ)接口(BaseVP)M層入口(視情況))
  • 基類、沒必要放到下一級分包
  • 統(tǒng)一命名,方便團隊統(tǒng)一理解
舉例
  • a包
    • a包提供的A接口
      • a1包
        • 實現(xiàn)A接口的A1類
      • a2包
        • 實現(xiàn)A接口的A2類

七 總結(jié),架構(gòu)思想

  • 分而治之,控制規(guī)?!绢I(lǐng)域、邊界】
    • 團隊太小會導(dǎo)致團隊過于松散,團隊太大又會增加管理成本。程序跟團隊管理也是一樣的。
  • 簡單、清晰、一致【統(tǒng)一上下文】
    • 統(tǒng)一命名,方便團隊統(tǒng)一理解
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 安卓開發(fā)技術(shù)發(fā)展到現(xiàn)在已經(jīng)非常成熟,有很多的技術(shù)專項如插件,熱修,加固,瘦身,性能優(yōu)化,自動化測試等已經(jīng)在業(yè)界有了...
    常興E站閱讀 3,169評論 3 55
  • 美的核心在于概念完整性——即一組抽象和規(guī)則,在整個系統(tǒng)中盡可能簡單地應(yīng)用它們。 我們將計算機系統(tǒng)的架構(gòu)定義為一組最...
    testfor閱讀 1,407評論 0 0
  • 第九章 軟件架構(gòu)設(shè)計 9.1 軟件架構(gòu)概述 9.1.1 軟件架構(gòu)的定義 定義1:軟件或計算機系統(tǒng)的軟件架構(gòu)是該系統(tǒng)...
    步積閱讀 4,994評論 0 17
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評論 19 139
  • 無意中看王牌對王牌第一集看到成龍大哥,曾志偉,張國立這些老咖,好有感覺。 想想已可以撐起一檔節(jié)目的王祖藍曾是超級掌...
    阿ZA閱讀 226評論 0 0

友情鏈接更多精彩內(nèi)容