網站的架構

有人說過,大型網站是根據業務需求逐步演化而來的,而不是設計出來的,下面就是一個大型網站的進化過程。

1.初始階段的網站架構數據庫

clipboard.png

在初始階段,訪問量並不大,因此應用程序、數據庫、文件等全部的資源都在一臺服務器上。後端

2 應用服務和數據服務分離緩存

clipboard.png

隨着業務的發展,就會發現一臺服務器抗不過來了,因此將應用服務器與數據(文件、數據庫)服務器分離。三臺服務器對硬件資源的要求各不相同:應用服務器須要更快的CPU,文件服務器須要更大的磁盤和帶寬,數據庫服務器須要更快速的磁盤和更大的內存。分離以後,三個服務器各司其職,也方便針對性的優化。服務器

3.使用緩存改善網站性能網絡

clipboard.png

緩存的使用無處不在,緩存的根本目的是加快訪問速度。當數據庫的訪問壓力過大的時候,就能夠考慮使用緩存了。網站使用的緩存能夠分爲兩種: 緩存在應用服務器上的本地緩存和緩存在專門的分佈式緩存服務器上的遠程緩存。架構

4.使用應用服務器集羣改善網站的併發處理能力併發

clipboard.png

隨着業務的發展,單個應用服務器必定會成爲瓶頸,應用服務器實現集羣是網站可伸縮集羣架構設計中較爲簡單成熟的一種。後面也會提到,將應用服務器設計爲無狀態的(沒有須要保存的上下文信息),就能夠經過增長機器,使用負載均衡來scale out。負載均衡

5.數據庫讀寫分離異步

clipboard.png

即便使用了緩存,但在緩存未命中、或者緩存服務時效的狀況下,仍是須要訪問數據庫,這個時候就須要數據庫的讀寫分離:主庫提供寫操做,從庫提供讀服務。注意,在上圖中增長了一個數據訪問模塊,能夠對應用層透明數據庫的主從分離信息。分佈式

6.使用反向代理和CDN 加速網站晌應
CDN和反向代理其實都是緩存,區別在於CDN 部署在網絡提供商的機房;而反向代理則部署在網站的中心機房。使用CDN 和反向代理的目的都是盡旱返回數據給用戶, 一方面加快用戶訪問速度,另外一方面也減輕後端服務器的負載壓力。

7.使用分佈式文件系統和分佈式數據庫系統
單個物理機的磁盤是有限的,單個關係數據庫的處理能力也是有上限的,因此須要分佈式文件存儲與分佈式數據庫。固然,也須要」統一數據訪問模塊「,使得應用層不用關心文件、數據的具體位置。值得一提的事,關係型數據庫自身並無很好的水平擴展方案,所以通常都須要一個數據庫代理層,如cobar、mycat。

8.業務拆分
將一個網站拆分紅許多不一樣的應用, 每一個應用獨立部署維護。應用之間能夠經過一個超連接創建關係(在首頁上的導航連接每一個都指向不一樣的應用地址) ,也能夠經過消息隊列進行數據分發, 固然最多的仍是經過訪問同一個數據存儲系統來構成一個關聯的完整系統

9.分佈式服務
既然每個應用系統都須要執行許多相同的業務操做, 好比用戶管理、商品管理等,那麼能夠將這些共用的業務提取出來,獨立部署。
經過服務的分佈式,各個應用能更好的獨立發展,實現了從依賴模塊到依賴服務的過渡。將通用的公共服務獨立出來,也方便作服務管控,好比對各個應用的服務請求進行監控,在高峯時期限制、關閉某些應用的訪問等。

10網站架構模式① 分層分層是企業應用系統中最多見的一種架構模式,將系統在橫向維度上切分紅幾個部分,每一個部分負責一部分相對比較單一的職責, 而後經過上層對下層的依賴和調用組成一個完整的系統。在大型網站架構中也採用分層結構,將網主佔軟件系統分爲應用層、服務層、數據層。分層的好處在於:解耦合,獨立發展,伸縮性,可擴展性。上面網站的進化史也凸出了分層的重要性。可是分層架構也有一些挑戰, 就是必須合理規劃層次邊界和接口,在開發過程當中,嚴格遵循分層架構的約束, 禁止跨層次的調用( 應用層直接調用數據層)及逆向調用(數據層調用服務層, 或者服務層調用應用層)。② 分割分層強調的是橫向切分,而分割是縱向切分, 上面網站進化史部分的業務拆分就包含了分割。分割的目標是高內聚、低耦合的模塊單元③ 分佈式分層和分割的一個主要目的是分佈式部署,但分佈式也有本身的問題:網絡通訊帶來的性能問題,可用性,一致性與分佈式事務,系統維護管理複雜度。④ 集羣一個機器解決不了的問題,就用幾個機器來解決,當服務無狀態的時候,經過往集羣增長機器就能解決大部分問題。對應網站進化史中「使用應用服務器集羣改善網站的併發處理能力」⑤ 緩存緩存就是將數據存放在距離計算最近的位置以加快處理速度,同時大大減輕了數據提供者的壓力大型網站架構設計在不少方面都使用了緩存設計:CDN、反向代理、本地緩存、分佈式緩存⑥ 異步異步是解耦合的一個重要手段,常見的生產者-消費者模型就是一個異步模式。出了解耦合,異步還能提升系統可用性、加快響應速度、流量削峯。

相關文章
相關標籤/搜索