架構的常規分類及複用重點

雪山飛豬發表於2020-07-27

前言

架構的出發點是業務和技術在不斷複雜化,引起系統混亂,需要通過架構來保證有序

  • 搭一個草房子很簡單,可以直接上手
  • 蓋一個2層樓房,稍微複雜,但在工匠經驗指導下,問題也不大
  • 蓋一座高樓,複雜性就大不一樣了,需要考慮內部結構、承重、採光、排水、防雷抗震等,需要專業人員事先做好整體的架構設計,並嚴格地按照設計施工

熵增定律:系統都是從有序到無序


放在軟體系統演化也適用,系統裡不停地新增業務功能,如果事先不做良好的設計,隨著時間的推進,整個系統野蠻生長,就會逐漸碎片化,越來越無序,最終被推倒重來。

自然界中的生物可以通過和外界互動,主動進行新陳代謝,製造“負熵”,也就是降低混亂程度,來保證自身的有序性,繼續生存
例如,植物通過光合作用,把光能、二氧化碳和水合成有機物,以此滋養自己,延續生命。

對於軟體系統,我們也可以主動地調整系統各個部分的關係,保證系統整體的有序性,來更好地適用不斷增長的業務和技術變化。

天下大勢:分久必合,合久必分

架構實現從無序到有序,基本手段就是“分”與“合”

  • 分。把系統拆分為各種子系統、模組、元件

三室一廳而不是大開間、兩菜一湯而不是三下鍋

  • 合。基於業務流程和技術手段,把各個元件有機整合在一起。

屋子和書房原先用一堵牆分開,但是看書需求太強烈,直接把牆拿了,合成一個

好的架構應該有如下特點

  • 滿足業務的可擴充套件、可複用
  • 滿足系統的高可用、高效能
  • 能用較低的成本落地

系統的組成

接入系統

  • DNS
  • Loader Balancer
  • Web伺服器

應用系統

  • 開發框架
  • 應用程式碼
  • 三方庫

核心元件

  • Database
  • 微服務框架
  • 快取
  • 訊息系統
  • 搜尋系統
  • 流程引擎
  • 大資料/NoSQL

支撐系統

  • 日誌系統
  • 配置管理
  • 任務排程
  • 監控系統
  • 安全風控
  • 自動部署
  • 資源管理

基礎平臺

  • 語言進行時
  • 容器/虛擬機器
  • 作業系統
  • 硬體和網路

架構分類

業務架構

講清楚核心業務的處理過程,定義各個業務模組的相互關係,從概念層面幫助我們理解系統面臨哪些問題以及如何處理

電影的故事情節和場景安排

應用架構

講清楚系統內部是怎麼組織的,有哪些應用,相互間怎麼呼叫的,它從邏輯層面幫助我們理解系統內部是如何分工與協作的

電影裡有定義有哪些角色,每個角色有哪些職責,在每個場景中,這些角色是如何互動的。

技術架構

講清楚系統由哪些硬體、作業系統和中介軟體組成,如果和我們開發應用一起配合,應用各種異常情況,保持系統的穩定可能

角色應該由誰來演,物理場景怎麼佈置,以此保證拍攝能順利進行

總之:

  • 做架構設計時,一般先考慮業務架構,再應用架構,最後技術架構。
  • 開發的難點主要由業務架構和應用架構來解決,機器的痛點由技術架構來解決
  • 另外,架構還需要考慮資料的可用性和一致性問題,這個可以參考CAP理論

CAP理論,系統的可用性、一致性和網路容錯性,三個最多隻能保證兩個,在分散式系統的情況下,我們只能在C和A中選一個

複用的分類

技術複用

工具層面的複用

程式碼複用

  • 函式
  • 類庫
  • SDK

元件複用

  • Redis
  • MQ
  • 框架
  • 中介軟體

業務複用

業務實體複用

對各個業務領域的資料和業務規則進行封裝,將它變成上層應用系統可以直接使用的業務元件

  • 訂單
  • 商品
  • 使用者
  • 會員

業務流程複用

把多個業務實體串起來,完成一個端到端的任務。

比如說,下單流程需要訪問會員、商品、訂單、庫存等多個業務,如果我們把這些呼叫邏輯封裝為一個下單流程服務,那下單頁面就可以呼叫這個流程服務來完成下單,而不需要去深入瞭解下單的具體過程

  • 下單流程
  • 購物流程

產品複用

  • 商城
  • CRM
  • ERP
  • Sass系統
  • Pass平臺

相關文章