公衆號IT徐胖子原創本文,請勿轉載java
1 前言數據庫
我認爲技術之於業務的意義在於:技術能夠實現業務的需求,技術能夠豐富業務的手段,技術能夠擴展業務的邊界。緩存
2 概述安全
從0到1構建一個互聯網技術系統是十分具備挑戰性的工做,綜合能力要求比較高。本文來談一談從0到1構建互聯網技術系統基本方法論,具體實現細節可能會有所不一樣。性能優化
3 關鍵步驟微信
3.1 技術選型網絡
選用穩定的而且通過線上考驗的技術和框架,不要刻意使用新技術或新版本。架構
3.2 繪製用例圖框架
用例圖由參與者,用例,邊界以及它們之間的關係構成,用於描述系統功能。異步
用例圖是外部用戶(被稱爲參與者)所能觀察到的系統功能的模型圖。用例圖呈現了一些參與者,一些用例,以及它們之間的關係,主要用於對系統、子系統或類的功能行爲進行建模。用例圖是系統的藍圖。
3.3 設計領域模型
設計清晰的領域模型對開發以及後續維護相當重要。簡而言之就是系統有多少個模塊,每一個模塊之間是怎麼交互的,是同步仍是異步,走消息仍是直接調用。此時每一個工程師能夠認領本身熟悉的模塊,做爲子項目負責人,後續分模塊進行開發。
3.4 設計交互流程
系統間的模塊是如何交互的?系統和其它系統間如何交互?這些問題須要在這個階段獲得詳細而具體的回答。
一個比較好的方法是繪製時序圖,用一個典型的業務場景爲例,描繪出整個系統交互的主要流程。
3.5 設計數據表
數據表設計有如下維度須要思考:
(1) 基礎數據字段
(2) 核心業務字段
(3) 數據表索引設計
(4) 數據表體量
(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) 業務安全
(a) 超時是失敗仍是重試
(b) 補償機制是否完備
(c) 分佈式一致性是否實現
(d) 冪等性是否完備(監聽消息)
(2) 系統安全
(a) 是否鑑權
(b) 是否流控
(c) 是否高頻檢測
(d) 是否隨意聲明線程
5 利用大數據
大數據技術和框架層出不窮,咱們能夠選擇一些來擴展系統的功能,減輕系統的壓力。
能夠利用Hive進行離線數據分析,ES進行實時數據分析和數據檢索,HBase存儲行爲軌跡數據等,能夠減輕數據庫壓力,下降系統風險。大數據平臺還能夠提供數據化產出,爲數據化運營提供有力保障。
6 文章總結
從0到1構建互聯網技術系統須要有必定的架構思惟和能力,這種能力也只有在不斷實踐,踩坑和思考中才能夠造成。踩坑也不要灰心,注意吸收教訓,總結經驗,這樣才能儘快成爲一名合格的架構師。
長按二維碼關注本公衆號的精彩文章
本文分享自微信公衆號 - java1234(gh_27ed55ecb177)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。