從零開始學架構-讀書筆記1

架構到底是什麼

系統

  • 關聯:包含一組有關聯的個體
  • 規則:系統內個體按照指定規則運作
  • 能力:規則+關聯產生新的能力

子系統

  • 另一個大系統的一部分

模塊

  • 從邏輯角度拆分系統得到的單元
  • 從業務維度的職責劃分

組件

  • 從物理角度拆分系統得到的單元
  • 從技術維度的複用

框架

  • 規範或者約束
  • 面向編程的半成品

架構

  • 軟件系統的頂層結構
  • 明確系統需要包含的個體
  • 明確個體運作和協作的規則

軟件開發進化歷史

  • 20世紀60年代第一次軟件危機引出“結構化編程”,創造了“模塊”
  • 20世紀80年代第二次軟件危機引出“面向對象編程”,創造了“對象”
  • 20世紀90年代“軟件架構”開始流行,創建了“組件”

模塊、對象、組件本質上是對達到一定規模的軟件進行拆分

成功軟件項目的最重要因素就是設計,架構師、設計師需要在業務和技術中尋找一個平衡點平衡點的把握,就是架構設計中的取捨問題

架構設計的目的是什麼

爲什麼要架構設計

誤區

  1. 因爲開發流程需要
  2. 因爲架構很重要
  3. 每個系統都要做設計
  4. 爲了高性能、高可以、可擴展

正解

  1. 爲了解決軟件系統複雜度帶來的問題
  2. 通過理解和熟悉需求,識別系統複雜性所在的地方

自查

  • 高性能
    • 高低要多高
  • 高可用
    • 具體達到什麼水平,分鐘、小時
  • 低延遲
    • 到底多低

複雜度之高性能

單機

  • 進程、線程、IO

集羣

  • 任務分配
    • 負載均衡
  • 任務分解
    • 把大一統的業務系統,拆分爲小而簡單但需要多個系統配合的業務系統
    • 簡單的系統更加容易做到高性能
    • 可以針對單個任務進行擴展

複雜度之高可用

本質上都是通過數據和服務的“冗餘”實現高可用

高性能與高可用的區別

高性能增加機器目的在於“擴展”處理器性能

高可用增加機器目的在於“冗餘”處理單元

計算高可用

複雜度

  1. 需要增加任務分配器
  2. 任務分配器與業務服務器之間的連接交互管理
  3. 任務分配器需要增加分配算法

存儲高可用

複雜度

  1. 數據傳輸延遲或者中斷
  2. 減少或者規避數據不一致對業務的影響

狀態決策高可用

複雜度

  1. 獨裁者
    • 簡單但存在單點問題
  2. 協商式
    • 主備連接中斷後無法判斷對方狀態
  3. 民主式
    • 協議複雜
    • 腦裂問題

複雜度之可擴展

兩個基本條件:正確預測變化、完美封裝變化

預測變化

複雜度

  1. 不是每個擴展點都需要考慮
  2. 不能完全不考慮擴展點
  3. 所有預測都存在出錯的可能性

應對變化

複雜度

  1. 拆分“變化層”和“穩定層”
  2. 提煉“抽象層”和“實現層”

可擴展

What

  1. 軟件內部
    • 在系統實現新功能時,對現有影響較少
  2. 軟件外部
    • 系統之間松耦合,系統變化對其他系統無影響

Why

快速響應變化,最大程度降低對現有系統的影響

How

  1. 業務角度
    • 對業務深入理解,對可預計的業務變化進行預測
  2. 技術角度
    • 利用擴展性好的技術,對變化進行封裝

架構角度

  1. 應用層面
    • 負載均衡+集羣
  2. 服務層面
    • 微服務
  3. 存儲層面
    • 主備

架構設計三原則

合適

結合資源、業務、場景等各種約束條件

簡單

複雜的表現

  1. 結構複雜
    • 系統組件數量多
    • 組件關係複雜
  2. 邏輯複雜
    • 減少系統數量會導致邏輯複雜

演化

軟件架構需要根據業務發展不斷變化

誤區

  1. 試圖一步到位,應對所有變化

架構設計流程

識別複雜度

複雜度來源

  • 高性能
  • 高可用
  • 可擴展

過度設計問題

  1. 系統複雜,運維效率低下
  2. 版本發佈需要多個系統配合
  3. 子系統太多,小問題不斷

正確做法

  • 將主要複雜問題列出來,根據業務、技術、團隊情況綜合排序

性能計算

  • 一天平均每秒寫入
  • 峯值爲平均值的3倍

設計備選方案

  • 根據對業務的理解,挑選合適的架構模式進行組合,再對組合後的方案進行修改和調整
  • 關注技術選型,而不是技術細節

常見錯誤

  1. 設計最優的方案
  2. 只做一個方案
  3. 備選方案過於詳細

備選方案3-5個最佳,方案差異要明顯

評估備選方案

360度環評,根據質量屬性點並結合優先級進行評估

常見質量屬性點:

  1. 性能
  2. 可用性
  3. 硬件成本
  4. 項目投入
  5. 複雜度
  6. 安全性
  7. 可擴展性

詳細方案設計

避免推翻備選方案

  1. 對備選方案關鍵細節有較深入的理解
  2. 通過分步驟、分階段、分系統的方式,儘量降低系統複雜度
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章