一. 準備工作 1. 本文參考 J2EE企業級應用架構 二. 架構發展 1. 原始版 2. 動靜分離版 3. 緩存版 4. 分散式服務 5. 彈性計算 ...
一. 準備工作
1. 本文參考 J2EE企業級應用架構
二. 架構發展
1. 原始版
用戶+伺服器【單台虛擬機】+資料庫【mysql或者oracle】,用戶訪問量比較少。
特點:單節點【只有一臺機器】,幾乎無容災【如果機器掛了只能重啟】,負載能力低【訪問量比較少】,維護簡單【只有一臺伺服器,所以對應用監控比較簡單,資料庫管理比較簡單,企業部署成本比較低】
2. 動靜分離版
加入Nginx,通過Nginx來訪問靜態資源,用戶通過REST API來訪問Web應用,通過ajax獲取數據,提交數據,極大減少了和用戶交互的流量,html、js、css大資源通過Nginx傳送給用戶,降低交互流量,Nginx還負責均衡,同時增加伺服器部署,可以提高訪問量。使用了框架spring,Struts,mybatis,節省開發時間。
特點:Nginx訪問靜態資源,Nginx負載均衡,應用分離,依賴框架,安全性低【暴露REST API】,Session 持久化問題【部署了多台伺服器,Session持久化成為問題】。
3. 緩存版
加入高速緩存,支持key-value形式的查詢,可以達到6w/s查詢量。基於請求的緩存,當http請求發起,先去查詢高速是否有結果,沒有的話,查詢資料庫,寫入高速緩存,返回給用戶;將Session存於高速緩存裡頭,當多台機器訪問應用時,將session的id在高速緩存進行查詢。
特點:大量使用緩存、Nginx接收Https、Session 持久化、一致性問題【數據同步問題】、緩存失效問題【設置session失效時間】,雖然還存在後兩者的問題,但是極大提高企業負載能力。
4. 分散式服務
分散式架構,拆分業務功能,保證功能不變的情況下,將應用拆分前端web應用和後端服務,後端服務又拆分多個小應用,共同提供服務,將服務封裝起來,提供邏輯。web如何將多個應用提供給遠程調用,這時候就要提供服務匯流排\註冊中心進行應用管理,例如分散式框架dubbo。
特點:小型機虛擬化【將伺服器部署在虛擬機中】、請求處理與業務拆分、應用服務化、同步非同步拆分、資料庫讀寫分離【查詢映射到讀庫上】、運維難度大大增加。消息中間件:例如mq、Metaq中間件,將大量非同步操作發送到中間件,後臺均勻消費這些請求,同步非同步拆分提升吞吐量。調度中間件:ScheduleX。
缺點:當出現高併發的時候,對於小型機壓力很大。
5. 彈性計算
採用Docker容器級虛擬化,使得伺服器資源實時分配。當負載大時候,docker虛擬並啟動應用。新增Hadoop日誌搜集平臺,將日誌寫入日誌平臺。通過與Docker配合極大提高負載性能。
特點:容器級虛擬化、應用資源動態分配、離線數據採集分析系統、資料庫讀寫分離、硬體成本下降、異地容災。資料庫新增了於hadoop進行交互,極大提升了性能。