從0到1構建互聯網業務系統的基本方法論

從0到1構建互聯網業務系統的基本方法論

本文為原創文章,未經允許不得轉載

1 前言

我認為技術之於業務的意義在於

  • 技術可以實現業務的需求
  • 技術可以豐富業務的手段
  • 技術可以擴展業務的邊界

2 概述

從0到1構建一個業務系統是一個很具有挑戰性的工作,綜合能力要求會比較高。本文來談一談從0到1構建一個業務系統基本方法論,實現具體細節各有不同,歡迎大家多多交流。


3 關鍵步驟

3.1 技術選型

選用穩定的並且經過線上考驗的技術和框架。

3.2 繪製用例圖

用例圖由參與者(actor)、用例(use case),邊界以及它們之間的關係構成,用於描述系統功能。用例圖(use case)是外部用戶(被稱為參與者)所能觀察到的系統功能的模型圖。用例圖呈現了一些參與者,一些用例,以及它們之間的關係,主要用於對系統、子系統或類的功能行為進行建模。用例圖是系統的藍圖。

3.3 設計領域模型

設計清晰的領域模型對開發以及後續維護至關重要。簡而言之就是系統有多少個模塊,每個模塊之間是怎麼交互的,是同步還是異步,走消息還是直接調用。此時每個工程師可以認領自己熟悉的模塊,後續分模塊進行開發。

3.4 設計交互流程

系統間的模塊是如何交互的?系統和其它系統間如何交互?這些問題需要在這個階段得到詳細而具體的回答。一個比較好的方法是繪製時序圖,用一個典型的業務場景為例,描繪出整個系統交互的主要流程。

3.5 設計數據表

數據表設計有以下維度需要思考:

  • 基礎數據字段
  • 核心業務字段
  • 數據表索引設計
  • 數據表體量
  • 是否需要分庫分表

3.6 新建工程模塊

現在架構師就要創建工程和模塊了。原則上是一個領域一個工程,按照領域級別分別部署。當然,項目剛開始為了快速迭代可以先合併幾個領域到一個工程,等到體量大了再拆分。

3.7 明確代碼規約

異常是拋出還是捕獲,接口的返回值需要用Result<?>包裝,監控、告警、流控由切面統一處理等,這樣系統會具有很好的維護性。

3.8 進入開發階段

此時開發的基礎條件都已具備,每個模塊的負責人按照模塊進行開發。

3.9 進入測試階段

開發人員單元測試要完備,測試人員先按模塊進行測試,最後全鏈路測試。

3.10 進入發佈階段

明確各模塊依賴關係,明確發佈順序,確定回滾方案。要注意RPC服務循環依賴的問題。


4 核心指標

完成上述工作,功能相關的工作就完成了。當然一個系統僅僅完成功能是遠遠不夠的,還有以下的幾個核心指標需要關注。

4.1 機器指標

架構師只關注功能層面是不夠的,因為有些功能看似正常,但是在運行一段時間會暴露嚴重問題。比如剛發佈上去功能完全正常,但運行一段時間後響應速度顯著下降,原因是有開發人員在代碼中隨意聲明線程,頻繁創建線程達到了Linux支持的最大線程數,導致整個應用無法接收新的請求。

所以架構師在線上還應該關注機器指標,比如線程數,CPU利用率,內存,磁盤空間,磁盤IO,網絡流量,負載情況,GC情況等等。

當系統運行一段時間後出現耗時莫名增加,超時報警異常增多,但並沒有發佈或升級的操作,就需要立刻分析機器指標。

4.2 性能指標

在客戶端層,代理層,WEB層,服務端層,數據層都有著自己的性能優化的手段。簡單介紹一下服務層和數據層相關常見的優化方案。常見的做法是在服務層和數據層之間加一個緩存層,可以是本地緩存也可以是分佈式緩存,原則就是將數據放在離用戶更近的地方,以空間換時間。技術架構上可以抽出一層緩存的工具框架包,在框架中統一提供比如緩存擊穿,分佈式鎖等解決方案。

4.3 監控指標

沒有監控報警的業務系統非常不安全,工程師必須對系統監控報警敏感且及時響應。監控可以從以下的幾個方面去思考:

(1) 業務監控

  • 業務異常:單位時間出現X次需要告警
  • 數據量監控:單位時間數據量是否正常
  • 延時監控:某狀態單位時間內是否變化

(2) 系統監控

系統異常是不允許出現的異常,如空指針,數據庫異常,只要出現就立刻需要告警被感知。

4.4 安全指標

系統的安全性是系統的根本,要從系統安全和業務安全兩個方向去考慮。下列指標只是提供一個思路,難免掛一漏萬,還有很多指標可以補充:

(1) 業務安全

  • 超時是失敗還是重試
  • 補償機制是否完備
  • 分佈式一致性是否實現
  • 冪等性是否完備(上下游冪等性,監聽消息時肯定會收到重複消息)

(2) 系統安全

  • 是否鑑權
  • 是否流控
  • 是否高頻檢測
  • 是否隨意聲明線程

5 用好大數據

大數據技術和框架層出不窮,我們可以選擇一些來擴展系統的功能,減輕系統的壓力。比如利用Hive進行離線數據分析,ES進行實時數據分析和數據檢索,HBase存儲行為軌跡數據等,達到減輕數據庫壓力,降低系統風險的目的。大數據平臺還可以生成報表,為數據化運營提供有力保障。


6 本文總結

從0到1構建業務系統需要有一定的架構思維和能力,這種能力也只有在不斷實踐,踩坑和思考中才可以形成。踩坑也不要灰心,要吸取教訓,總結經驗,才能成為一名合格的架構師。

(全文完)

相關推薦

推薦中...