大型網站架構模式筆記

z1340954953發表於2018-07-24

分層

分層是企業應用一種常見的架構模式,將系統在橫向維度上切分為幾個部分,每個部分負責一部分相對比較單一的職責,然後通過上層對下層的依賴和呼叫組成一個完整的系統。

大型網站分層架構
應用層 負責具體業務和檢視展示,如搜尋輸入和結果展示
服務層 為應用層提供服務支援,如使用者管理服務,購物車服務
資料層 提供資料儲存訪問服務,如資料庫、快取、檔案、搜尋引擎等

在實際中,大的分層結構內部可以再次分層,如應用層可以分為檢視層和業務邏輯層;服務層可以細分為資料介面層(適配各種輸入和輸出資料格式)和邏輯處理層。進行分層的優點就是支援網站高併發向分散式發展。

分隔

分層是將軟體在橫向方面進行切分,那麼分隔就是在縱向方面對軟體劃分。按照功能和種類進行分隔,包裝為高內聚低耦合的模組單元。

分散式

對於大型網站,分層和分隔的一個主要目的是為了切分後的模組便於分散式部署,將不同的模組部署在不同的伺服器上,通過遠端呼叫協同工作。分散式意味著可以使用更多的計算機完成同樣的功能,計算機越多,能夠處理的併發和資料量越大

網站應用中,常用的分散式方案

分散式應用和服務: 將分層和分割後的應用和服務模組分散式部署,除了可以改善網站效能和併發性、加快開發和釋出速度、減少資料庫連線資源消耗外,還可以使不同應用複用共同的服務,便於業務功能擴充套件。

分散式靜態資源:網站的靜態資源如js、css等資源獨立分散式部署並採用獨立的域名,就是動靜分離。靜態資源分散式部署可以減輕應用伺服器的負載壓力。

分散式資料和儲存:將資料分散式儲存,除了傳統的關聯式資料庫進行分散式部署外,nosql也採用分散式

分散式計算,此外,還有支援網站線上伺服器配置實時更新的分散式配置;分散式環境下的分散式鎖,分散式檔案系統等。

叢集

使用分散式雖然將分層和分隔後的模組獨立部署,但是對於使用者訪問集中的模組,還需要將獨立部署的伺服器叢集化,即多臺伺服器部署相同應用構成一個叢集,通過負載均衡裝置共同對外提供服務。

伺服器叢集的優點,是能夠提供更好的併發特性,當有更多使用者訪問,只要向叢集中加入新的機器。

資料庫讀寫分離

配置主從資料庫,應用伺服器寫入資料,訪問主資料庫,主資料庫通過主從複製將資料拷貝到從資料庫,應用伺服器讀取資料時候訪問從資料庫,實現讀寫分離。

快取 

快取就是將資料存放在距離計算最近的位置以加快處理速度。快取是改善軟體效能的第一手段。

CDN: 即內容分發網路,部署在距離終端使用者最近的網路服務商,使用者的網路請求總是先到達他的網路服務商,在這裡快取一些靜態資源,就可以最快的返回給使用者,如視訊網站和入口網站的熱點內容快取在CDN

反向代理: 反向代理屬於網站前端架構的一部分,部署在網站的前端,當使用者請求到達網路的資料中心,最先到達的就是反向代理伺服器,這裡快取網站的靜態資源,無需請求繼續轉發給伺服器直接返回到使用者。

本地快取:在應用伺服器本地快取著熱點資料,應用程式可以在本機記憶體中直接訪問資料,而無需訪問資料庫。

分散式快取:將資料快取在一個專門的分散式快取叢集中。

啟用快取的條件:一是資料訪問熱點不均衡,某些資料會被更頻繁的訪問,二是資料在某個時間段內有效,不會很快過期,否則快取的資料因為失效產生髒讀。

非同步

服務間的關係時同步的,不僅耦合性很強,而且效能較低,配置為非同步能降低服務間的耦合。

非同步架構通過佇列實現,佇列是典型的生產者消費者模型。處在業務操縱前面的執行緒將輸出寫入佇列,後面的執行緒從佇列中取出資料處理。

使用非同步的訊息佇列的特性:

1. 提高系統的可用性。消費者伺服器發生故障,資料會在訊息佇列伺服器中儲存,生產者伺服器可以繼續處理業務請求。消費者伺服器恢復正常了,有可以繼續處理訊息佇列中的資料

2. 加快網站的響應速度。生產者伺服器處理完業務後,將資料放入佇列,直接返回,不用等待消費者處理成功,延遲減少。

3. 消除併發訪問高峰。將突增的訪問請求放入佇列中,減少網站的負載。

冗餘

配置多餘的伺服器冗餘執行,為了防止伺服器出現故障,服務照常執行。即使是訪問和負載很小的服務,也至少配置兩個伺服器構成叢集。

資料庫處理定期備份,存檔儲存,實現冷備份外,還需要對資料庫進行主從分離,實時同時實現熱備份。

自動化

自動化架構設計主要集中在釋出運維方面(釋出過程自動化、自動化程式碼管理、自動化測試、自動化安全檢查、自動化部署等。) 

安全

網站在安全架構方面積累了許多模式:通過密碼和手機校驗碼進行身份認證;登入、交易等操作對通訊加密;使用者資訊進行加密處理;防止機器人程式攻擊,使用驗證碼識別;對於常見的xss攻擊,sql注入進行編碼轉換等處理等。 

相關文章