先來說說模式:
每一個模式描述了一個在我們周圍不斷重復發(fā)生的問題及該問題解決方案的核心。這樣,你就能一次又一次地用該方案而不必做重復工作。
先來說說常見的網站架構模式。這里沒有涉及具體實現過程,只是簡單介紹其思想和原理,方便日后有用到再深入了解。
分層分層是企業(yè)應用系統(tǒng)中最常見的一種架構模式,將系統(tǒng)在橫向維度上切分成幾個部分,每個部分負責一部分相對比較單一的職責,然后通過上層對下層的依賴和調用組成一個完整的系統(tǒng)。
分層 | 功能 |
應用層
| 負責具體業(yè)務和視圖展示,如網站首頁以及搜索輸入和結果展示 |
服務層 | 為應用層提供服務支持,如用戶管理服務,購物車服務 |
數據層 | 提供數據存儲訪問服務,如數據庫、緩存、文件、搜索引擎等 |
分層架構還可以細分下去,比如說應用層可以細分為視圖層和業(yè)務邏輯層。服務層可以細分為數據接口層和邏輯處理層。
分層結構對網站支持高并發(fā)向分布式發(fā)展至關重要,所以在網站規(guī)模很小的時候就應該采用分層的架構,這樣將來網站做大時才能有更好地應對。
所以說我們在設計一個新項目的架構時,就需要考慮到分層。不能等到日后項目做大了,再重構就耗時耗力了。
分割
上面的分層是將軟件在橫向方面進行切分,而分割是在縱向方面對軟件進行切分。將不同的功能和服務分割開來,包裝成高內聚低耦合的模塊單元。
比如在應用層,將購物、論壇、搜索、廣告分割成不同的應用,由獨立的團隊負責,部署在不同的服務器上;
在同一個應用內部,如果規(guī)模龐大業(yè)務負責,會繼續(xù)進行分割,比如說購物業(yè)務,可以分割為機票酒店業(yè)務、3C業(yè)務、小商品業(yè)務等更細小的粒度。
分布式 對于大型網站,分層和分割的主要目的是為了切分后的模塊便于分布式部署。
利用分布式解決網站高并發(fā)的問題的同時,會帶來其他問題:
分布式意味著服務調用必須通過網絡,這可能對性能造成比較嚴重的影響;
o 服務器越多,服務器宕機的概率就越大;
o 數據的一致性問題,分布式事務難以保證;
o 開發(fā)管理維護困難。
所以說要量力而行,不要為了分布式而分布式。
常用的分布式方案有以下幾種:
o 分布式應用和服務:將分層和分割后的應用和服務模塊分布式部署,使不同應用復用共同的服務,便于業(yè)務功能擴展。
o 分布式靜態(tài)資源:網站的靜態(tài)資源如js、css、圖片等獨立分布式部署,并采用獨立的域名。減輕應用服務器的負載壓力,并通過獨立 域名加快瀏覽器并發(fā)加載速度。
o 分布式數據和存儲:數據量過大,一臺機器無法存儲。
o 分布式計算:后臺業(yè)務需要處理,包括搜索引擎的索引構建、數據倉庫的數據分析統(tǒng)計。通過Hadoop及MapReduce分布式計算框架 進行批處理計算
集群 使用分布式已經將切分后的模塊獨立部署,但是對于用戶訪問集中的模塊,還需要將獨立部署的服務器集群化,多臺服務器部署相同應用構 成一個集群,通過負載均衡設備共同對外提供服務。
即使是訪問量很小的分布式應用和服務,也會部署兩臺服務器構成一個小的集群,目的就是提高系統(tǒng)的可用性。
緩存 緩存是改善軟件性能的第一手段。有以下幾種方式:
o CDN:內容分發(fā)網絡,部署在距離終端用戶最近的網絡服務商,在這里緩存網站的一些靜態(tài)資源,就可以以最快的速度返回給用戶。
o 反向代理:反向代理屬于網站前端架構的一部分,部署在網站的前端,當用戶請求到達網站的數據中心時,最先訪問反向代理服務器,這里緩存網站的靜態(tài)資源。
o 本地緩存:在應用服務器本地緩存著熱點數據,應用程序可以在本機內存中直接訪問數據,而無需訪問數據庫。
o 分布式緩存:數據量很大時,除了本地緩存,還需要分布式緩存,將數據緩存在一個專門的分布式緩存集群中,應用程序通過網絡通
信訪問緩存數據 緩存有兩個前提條件,
一是數據訪問熱點不均衡,某些數據會被更頻繁的訪問,這些數據應該放在緩存中;
二是數據在某個數據段內有效,不會很快過期,否則緩存的數據就會因為已經失效而產生臟讀,影響結果的正確性。
異步 系統(tǒng)解除耦合的重要手段是異步,業(yè)務之間的消息傳遞不是同步調用,而是將一個業(yè)務操作分成多個階段,每個階段之間通過共享數據的方式異步執(zhí)行進行協(xié)作。
在單一服務器內部可以通過多線程共享內存隊列的方式實現異步,處在業(yè)務操作前面的線程將輸出寫入到隊列,后面的線程從隊列中讀取數據進行處理;
在分布式系統(tǒng)中,多個服務器集群通過分布式消息隊列實現異步,分布式消息隊列可以看作內存隊列的分布式部署。
冗余 要保證在服務器宕機的情況下網站依然可以繼續(xù)服務,不丟失數據,就需要一定程度的服務器冗余運行,數據冗余備份。
數據庫除了定期備份,存檔保存,實現冷備份外,還需要進行主從分離,實時同步實現熱備份。
自動化 發(fā)布對網站是頭等大事,發(fā)布過程自動化可以有效減少故障。自動化測試,自動化安全監(jiān)測,自動化部署。自動化監(jiān)控,自動化報警,自動化失效轉移,自動化失效恢復。
作者:黑馬程序員人工智能+Python培訓學院
首發(fā):http://python.itheima.com/