1、企業級應用架構解析css
應用特色html
多環境多系統的交互前端
海量數據、高併發【用戶訪問量】、高TPS【每秒吞吐量】mysql
安全等級高web
自動化集羣管理ajax
架構原則redis
CAP原則(一致性【數據變更要同步】、可用性【隨着數據訪問量增加保證性能,數據庫性能管理】、分區容錯性) spring
複雜的事情簡單化 sql
架構的目標docker
高速緩存 【redis、Memcached等技術】
並行計算
負載均衡
數據備份【主備份,線上庫到離線庫備份】
異地容災【備用多個機房存儲數據庫】
業務分離【拆分大應用爲多個小應用,以服務化的方式暴露接口,簡化應用】
2、架構發展:
2.1 原始版:
用戶+服務器【單臺虛擬機】+數據庫【mysql或者oracle】,用戶訪問量比較少,該企業架構特色:單節點【只有一臺機器】,幾乎無容災【若是機器掛了只能重啓】,負載能力低【訪問量比較少】,維護簡單【只有一臺服務器,因此對應用監控比較簡單,數據庫管理比較簡單,企業部署成本比較低】
2.2 動靜分離版
加入Nginx,經過Nginx來訪問靜態資源,用戶經過REST API來訪問Web應用,經過ajax獲取數據,提交數據,極大減小了和用戶交互的流量, html、js、css大資源經過Nginx傳送給用戶,下降交互流量,Nginx還負責均衡,同時增長服務器部署,能夠提升訪問量。使用了框架spring,Struts,mybatis,節省開發時間。該架構特色:Nginx訪問靜態資源,Nginx負載均衡,應用分離,依賴框架,安全性低【暴露REST API】,Session 持久化問題【部署了多臺服務器,Session持久化成爲問題】。
2.3 緩存版
加入高速緩存,支持key-value形式的查詢,能夠達到6w/s查詢量。基於請求的緩存,當http請求發起,先去查詢高速是否有結果,沒有的話,查詢數據庫,寫入高速緩存,返回給用戶;基於查詢結構緩存,先根據相應條件查詢高速緩存,沒有的話則查詢數據庫,寫入緩存返回給用戶;將Session存於高速緩存裏頭,當多臺機器訪問應用時,將session的id在高速緩存進行查詢。該架構特色:大量使用緩存、Nginx接收Https、Session 持久化、一致性問題【數據同步問題】、緩存失效問題【設置session失效時間】,雖然還存在後二者的問題,可是極大提升企業負載能力。
2.4 分佈式服務
分佈式架構,拆分業務功能,保證功能不變的狀況下,將應用拆分前端web應用和後端服務,後端服務又拆分多個小應用,共同提供服務,將服務封裝起來,提供邏輯。web如何將多個應用提供給遠程調用,這時候就要提供服務總線\註冊中心進行應用管理,例如分佈式框架dubbo。該架構特色:小型機虛擬化【將服務器部署在虛擬機中】、請求處理與業務拆分、應用服務化、同步異步拆分、數據庫讀寫分離【查詢映射到讀庫上】、運維難度大大增長。消息中間件:例如mq、Metaq中間件,將大量異步操做發送到中間件,後臺均勻消費這些請求,同步異步拆分提高吞吐量。調度中間件:ScheduleX。該架構缺點:當出現高併發的時候,對於小型機壓力很大。
2.5 彈性計算
採用Docker容器級虛擬化,使得服務器資源實時分配。當負載大時候,docker虛擬並啓動應用。新增Hadoop日誌蒐集平臺,將日誌寫入日誌平臺。經過與Docker配合極大提升負載性能。該架構特色:容器級虛擬化、應用資源動態分配、離線數據採集分析系統、數據庫讀寫分離、硬件成本降低、異地容災。數據庫新增了於hadoop進行交互,極大提高了性能。
3、常見的服務治理的方式
3.1 多域名分配
每一個應用專屬域名
Http作進程通訊
硬件負載或者Nginx
多語言
安全性較低
沒法編輯檢查
3.2 企業服務總線
支持多種方式路由以及註冊
工做流的集成 高效、
容易維護
過分依賴於中心
軟件成本高
3.3 分佈式服務框架
無中心也能夠工做
基於接口編譯檢查
Java環境中開發學習成本低
高效、高可用
多語言支持不足