架構的常規分類及複用重點
阿新 • • 發佈:2020-07-27
[toc]
# 前言
架構的出發點是業務和技術在不斷複雜化,引起系統混亂,需要通過架構來保證有序
* 搭一個草房子很簡單,可以直接上手
* 蓋一個2層樓房,稍微複雜,但在工匠經驗指導下,問題也不大
* 蓋一座高樓,複雜性就大不一樣了,需要考慮內部結構、承重、採光、排水、防雷抗震等,需要專業人員事先做好整體的架構設計,並嚴格地按照設計施工
## 熵增定律:系統都是從有序到無序
![](https://img2020.cnblogs.com/blog/662544/202005/662544-20200526141051246-1018473465.png)
放在軟體系統演化也適用,系統裡不停地新增業務功能,如果事先不做良好的設計,隨著時間的推進,整個系統野蠻生長,就會逐漸碎片化,越來越無序,最終被推倒重來。
自然界中的生物可以通過和外界互動,主動進行新陳代謝,製造“負熵”,也就是降低混亂程度,來保證自身的有序性,繼續生存
例如,植物通過光合作用,把光能、二氧化碳和水合成有機物,以此滋養自己,延續生命。
對於軟體系統,我們也可以主動地調整系統各個部分的關係,保證系統整體的有序性,來更好地適用不斷增長的業務和技術變化。
## 天下大勢:分久必合,合久必分
![](https://img2020.cnblogs.com/blog/662544/202007/662544-20200727114109359-1755883363.png)
架構實現從無序到有序,基本手段就是“分”與“合”
* 分。把系統拆分為各種子系統、模組、元件
>三室一廳而不是大開間、兩菜一湯而不是三下鍋
* 合。基於業務流程和技術手段,把各個元件有機整合在一起。
> 屋子和書房原先用一堵牆分開,但是看書需求太強烈,直接把牆拿了,合成一個
好的架構應該有如下特點
* 滿足業務的可擴充套件、可複用
* 滿足系統的高可用、高效能
* 能用較低的成本落地
# 系統的組成
![](https://img2020.cnblogs.com/blog/662544/202007/662544-20200727114747200-220850768.png)
## 接入系統
* DNS
* Loader Balancer
* Web伺服器
## 應用系統
* 開發框架
* 應用程式碼
* 三方庫
## 核心元件
* Database
* 微服務框架
* 快取
* 訊息系統
* 搜尋系統
* 流程引擎
* 大資料/NoSQL
## 支撐系統
* 日誌系統
* 配置管理
* 任務排程
* 監控系統
* 安全風控
* 自動部署
* 資源管理
## 基礎平臺
* 語言進行時
* 容器/虛擬機器
* 作業系統
* 硬體和網路
# 架構分類
## 業務架構
講清楚核心業務的處理過程,定義各個業務模組的相互關係,從概念層面幫助我們理解系統面臨哪些問題以及如何處理
>電影的故事情節和場景安排
## 應用架構
講清楚系統內部是怎麼組織的,有哪些應用,相互間怎麼呼叫的,它從邏輯層面幫助我們理解系統內部是如何分工與協作的
>電影裡有定義有哪些角色,每個角色有哪些職責,在每個場景中,這些角色是如何互動的。
## 技術架構
講清楚系統由哪些硬體、作業系統和中介軟體組成,如果和我們開發應用一起配合,應用各種異常情況,保持系統的穩定可能
> 角色應該由誰來演,物理場景怎麼佈置,以此保證拍攝能順利進行
總之:
* 做架構設計時,一般先考慮業務架構,再應用架構,最後技術架構。
* 開發的難點主要由業務架構和應用架構來解決,機器的痛點由技術架構來解決
* 另外,架構還需要考慮資料的可用性和一致性問題,這個可以參考CAP理論
>CAP理論,系統的可用性、一致性和網路容錯性,三個最多隻能保證兩個,在分散式系統的情況下,我們只能在C和A中選一個
# 複用的分類
![](https://img2020.cnblogs.com/blog/662544/202007/662544-20200727115011059-1899044850.png)
## 技術複用
工具層面的複用
### 程式碼複用
* 函式
* 類庫
* SDK
### 元件複用
* Redis
* MQ
* 框架
* 中介軟體
## 業務複用
### 業務實體複用
對各個業務領域的資料和業務規則進行封裝,將它變成上層應用系統可以直接使用的業務元件
* 訂單
* 商品
* 使用者
* 會員
### 業務流程複用
把多個業務實體串起來,完成一個端到端的任務。
>比如說,下單流程需要訪問會員、商品、訂單、庫存等多個業務,如果我們把這些呼叫邏輯封裝為一個下單流程服務,那下單頁面就可以呼叫這個流程服務來完成下單,而不需要去深入瞭解下單的具體過程
* 下單流程
* 購物流程
### 產品複用
* 商城
* CRM
* ERP
* Sass系統
* Pas