從0到1架構項目(ing...)

從0到1架構項目

一、架構的理解

架構是業務、技術開展工作指導,優秀的架構在系統可以輕鬆面對各種的不確定(系統不可靠、網絡不可靠、業務快速發展、需求變更),良好的設計可以規避大量技術債,在技術轉型、業務轉型中發揮重要作用。

架構是開發工作綱領,在開展業務、研發前,需要進行項目評估,選擇合適架構類型,可靠的實現方案,爲發開工作進行指導。

架構方案確定可以控制項目風險,將各種不確定納入可控的範圍內。

架構也可以協調不同部門之間工作,需要多少硬件資源、每個部門需要做那些事情、一個部門的工作開始節點始於於上一個部門完成,各部門工作量分配等等提供參考,各部門職責明確,項目經理可以關鍵節點進行驗收,爲進度提供保障。

二、成熟度模型

架構工作不是一蹴而就,是根據業務不斷演進。在項目初期選用簡單架構可以快速滿足業務需要,在業務不斷增長中,不斷迭代,完成單體到分佈式,分佈式到微服務,微服務到serverless演進。

2.1 初期階段

在項目初期可能團隊人員就只有幾個人,要直接上到微服務架構,主要的挑戰是:

  1. 人力不足
  2. 技術儲備不夠
  3. 時間不充裕
  4. 過度設計,業務規模沒有達到量級
  5. 風險不可控

初期階段技術負責人需要關注的幾個要點:

  1. 制定開發規範
  2. 制定工作流程
  3. 技術培訓
  4. 業務培訓
  5. 項目文檔化
  6. 項目整體架構方案選型,架構演進預留適配設計
  7. 爭取儘量多開發時間
  8. 不招聘新手

2.1.1 開發規範

  1. 書籍

    • 《阿里巴巴Java開發手冊》
    • 《重構改善既有代碼》
    • 《Effect Java》
    • 《HeadFirst設計模式》
    • 《併發編程實戰》
  2. 開發插件

    • P3C
    • SonarLint

2.1.2 工作流程

  1. 需求評審
  2. 技術方案評審
  3. 開發排期
  4. 測試
  5. 需求變更評估
  6. 項目驗收
  7. 上線計劃
  8. 灰度發佈
  9. 線上BUG熱修復
  10. 數據訂正

2.1.3 技術培訓

  1. 通用模塊分析
  2. 接口設計
  3. 數據模型設計
  4. 協議選擇
  5. 技術選型分析
  6. UML、流程圖、架構圖繪圖方法
  7. 技術預研
  8. 典型錯誤分析

2.1.4 業務培訓

項目開發人員隨着業務發展不斷,同時也伴隨這人員流動,一套完成業務培訓流程可以讓開發快速瞭解公司的業務,找到核心關鍵人員,識別項目可能出現的風險,對現有業務不熟悉,在技術方案設計時會有所遺漏。

業務培訓一般是產品、項目經理、技術負責人負責編寫,也採用迭代的方式,每個週期,更新現有培訓文檔,避免文檔過時、遺棄。

2.1.5 項目文檔化

開發人員不光要避免口頭需求,同時開發內部也應該避免口頭講解項目。

當接收到複雜需求,做技術實現方案時,主導人員需要將實現方案文檔化。

文檔化主要指:

  1. 服務架構圖
  2. 數據模型圖
  3. 系統交互圖
  4. 狀態變更流程圖
  5. 關聯表結構、字段說明
  6. 接口設計
  7. 時序圖
  8. 類圖
  9. 操作棧數據流轉圖

優秀的文檔,開發人員拿到手即可進行開發,開發與開發之間、開發與運維間、乃至開發與產品、開發與業務方的溝通語言,基於文檔、圖、視頻的方式,減少口頭信息傳遞造成的誤差。

2.1.6 頂層適配設計

敏捷開發,並非是完全拋棄架構、詳細設計,完全使用最簡單最快捷成本最低的方案,反而是前期沒有評估好,造成後期迭代困難,架構無法快速支撐業務,付出幾倍於以前的成本完成改造,改造過程也同樣充滿風險。

舉個例子:

在項目前期中,不同領域模塊之間進行交互的方式,可以基於Pub/Sub發佈訂閱模型完成,達到模塊解耦,後期項目拆分微服務,也可以很快完成切換。

Spring的事件監聽EventListener

Guava的事件總線EventBus

RabbitMQ的消息隊列

普通非報表查詢,將多表關聯拆分爲單表查詢,在後續數據庫分庫分表能做到最小變更,報表查詢可以使用CQRS讀寫分離模式,單獨寫一個查詢服務聚合多數據源多表數據關聯查詢,在項目業務達到一定規模,實現數據中臺,離線分析、實時分析,ETL輸出結果表、維度表。

項目前期單體應用鎖的設計

頂層抽象ILock繼承Lock,增加leaseTime超時釋放,簡單死鎖規避、註解式等等

常見鎖的方案

  1. 基於RDS

  2. 基於Reetrantlock

  3. 基於Redis

  4. 基於Zookeeper

  5. 基於Etcd

    ......

在單體到集羣過度,可以選擇不同方案,注入實現類,即可完成切換

2.1.7 儘量多開發時間

上述很多工作都是需要正常開發之外的時間完成,如果在項目排期時僅僅考慮需求開發時間,是無法完成架構設計工作,需要技術負責人與產品、業務進行溝通,正常開發時間乘上一定係數,指定排期計劃。

2.1.8 新人成本誤區

項目初期,第一版的成本關係着項目組是否還存在,新人的成本遠遠高於高級開發,並且新人常常對於項目評估、自身能力判斷是不夠準確的,項目經驗、風險把控幾乎是零,再則上述很多事項,並不是一個新手就可以在緊湊的開發週期抽出時間完成。

2.2 中期階段

ing..

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章