(轉)大型網站的架構

版權聲明:歡迎轉載☞ https://blog.csdn.net/qq_31142553/article/details/85527641
1、大型網站的軟件系統的特色

高併發,大流量
高可用
海量數據
用戶分佈普遍,網絡狀況複雜
安全環境惡劣
需求快速變動,發佈頻繁
漸進式發展
2、大型網站的架構演化發展歷程

一、初始階段的網站架構

最開始網站的應用程序、數據庫、文件等全部的資源都在一臺服務器上。最典型的就是LAMP技術了:服務器操做系統使用Linux,應用程序使用PHP開發,數據庫使用MySQL,而後部署在Apache上。

前端

 



二、應用服務和數據服務分離

隨着網站業務的發展,一臺服務器的性能和存儲空間逐漸不能知足需求,這時就將應用和數據分離,整個網站使用三臺服務器:應用服務器、文件服務器和數據庫服務器。三臺服務器對硬件資源的要求也各不相同:應用服務器須要更快更強大的CPU,數據庫服務器須要更快的硬盤的更大的內存,文件服務器須要更大的硬盤。

數據庫

 



三、使用緩存改善網站性能

網站訪問特色和現實世界的財富分配同樣遵循二八定律:80%的業務訪問集中在20%的數據上。把大部分業務訪問的小部分數據緩存在內存中,能夠減小數據庫的訪問壓力,提升整個網站的數據訪問速度。

緩存能夠分爲兩種:應用服務器上的本地緩存和分佈式緩存服務器上的遠程緩存。本地緩存訪問速度更快,但緩存數據有限,並且會出現和應用程序爭用內存的狀況。遠程緩存可使用集羣的方式,理論上能夠作到不受內存容量的限制。

瀏覽器

 



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

一臺應用服務器所能處理的請求有限(一臺Tomcat大概六七百),企圖去換更強大的服務器也終究會知足不了持續增加的業務需求,並且網站有訪問高峯期和低谷期,擴展性也很差。使用集羣是網站解決高併發、海量數據問題的經常使用手段。經過負載均衡調度服務器,可未來自用戶瀏覽器的訪問請求分發到應用服務器集羣中的任何一臺服務器上。

緩存

 



五、數據庫讀寫分離

使用緩存後,仍有一部分讀操做(緩存訪問不命中、緩存過時)和所有的寫操做須要訪問數據庫。數據庫服務器也終究會由於負載壓力太高而成爲網站的瓶頸。

目前大部分的主流數據庫都提供主從熱備功能,經過配置兩臺數據庫主從關係,能夠將一臺數據庫服務器的數據更新同步到另外一臺數據庫服務器。

應用服務器在寫數據的時候,訪問主數據庫,主數據庫經過主從複製機制將數據更新同步到從數據庫,這樣當應用服務器讀數據的時候,就能夠經過從數據庫得到數據。

安全

 



六、使用反向代理和CDN加速網站響應

CDN和反向代理的基本原理都是緩存,區別在於CDN部署在網絡提供商的機房,使用戶在請求網站服務時,能夠從距離本身最近的網絡提供商機房獲取數據;而反向代理則部署在網站的中心機房,當用戶請求到達中心機房後,首先訪問的服務器是反向代理服務器,若是反向代理服務器中緩存着用戶請求的資源,就將其直接返回給用戶。

服務器

 



七、使用分佈式文件系統和分佈式數據庫系統

只有在單表數據規模很是龐大的時候才使用分佈式數據庫。網站更經常使用的數據庫拆分手段是業務分庫。

網絡

 



八、使用NoSQL和搜索引擎

隨着網站業務愈來愈複雜,對數據存儲和檢索的需求也愈來愈複雜,關係型數據庫逐漸不能知足需求。網站須要採用一些非關係型數據庫技術如NoSQL和非數據庫查詢技術如搜索引擎。

架構

 



九、業務拆分

大型網站爲了應對日益複雜的業務場景,經過使用分而治之的手段將整個網站按業務拆分,如購物系統將首頁、商鋪、訂單、購物車、支付等分紅不一樣模塊,分歸不一樣的團隊負責,做爲不一樣的應用獨立開發和獨立部署。用得最多的是各應用經過訪問同一個數據存儲系統來構成一個關聯的完整系統。

併發

 



十、分佈式服務

既然每個應用系統都須要執行許多相同的業務操做,好比用戶管理、商品管理等,那麼能夠將這些公用的業務提取出來,獨立部署。由這些可複用的業務鏈接數據庫,提供公用業務服務,而應用系統只須要管理用戶界面,經過分佈式服務調用共用業務服務完成具體業務操做。

負載均衡

3、大型網站的架構模式一、分層對網站軟件系統在橫向方面進行切分,分爲應用層、服務層、數據層。應用層:負責具體業務和視圖展現,如網站首頁及搜索輸入和結果展現。服務層:爲應用層提供服務支持,如用戶管理服務、購物車服務等。數據層:提供數據存儲訪問服務,如數據庫、緩存、文件、搜索引擎等。二、分割在縱向方向對軟件進行切分,將網站按不一樣的功能和服務分割,包裝成高內聚低耦合的模塊單元。一方面有助於軟件的開發和維護,另外一方面便於不一樣模塊的分佈式部署,提升網站的併發處理能力和功能擴展能力。好比將軟件系統的購物、論壇、搜索、廣告分割成不一樣的應用。三、分佈式在網站應用中,經常使用的分佈式方案有如下幾種。分佈式應用和服務:將分層和分割後的應用和服務模塊分佈式部署。分佈式靜態資源:網站的靜態資源如JS、CSS、Logo圖片等資源獨立分佈式部署。分佈式數據和存儲:爲網站應用而生的各類NoSQL產品幾乎都是分佈式的。分佈式計算:Hadoop及其MapReduce分佈式計算框架,移動計算而不是移動數據。分佈式配置:支持網站線上服務器配置實時更新。分佈式鎖:分佈式環境下實現併發和協同。分佈式文件系統:FastDFS、HDFS。四、集羣提升網站高併發和高可用的能力。五、緩存提升數據訪問速度。CDN反向代理本地緩存分佈式緩存六、異步下降軟件耦合性。提升系統可用性。加快網站相應速度。消除併發訪問高峯。七、冗餘服務器故障時保證數據不丟失。八、自動化發佈過程自動化自動化代碼管理自動化測試自動化安全檢測自動化部署自動化監控自動化報警自動化失效轉移自動化失效恢復自動化降級自動化分配資源九、安全經過密碼和手機驗證碼進行身份認證。對網絡傳輸數據進行加密。使用驗證碼識別機器人程序濫用網絡資源攻擊網站。攻擊網站的XSS攻擊、SQL注入進行編碼轉換。垃圾信息、敏感信息的過濾。交易轉帳等重要操做的風險控制。4、大型網站的架構技術一覽一、前端架構瀏覽器優化技術CDN動靜分離,靜態資源獨立部署圖片服務反向代理DNS二、應用層架構開發框架頁面渲染負載均衡Session管理動態頁面靜態化業務拆分虛擬化服務器三、服務層架構分佈式消息分佈式服務分佈式緩存分佈式配置四、存儲層架構分佈式文件關係數據庫NoSQL數據庫數據同步五、後臺架構搜索引擎數據倉庫推薦系統六、數據採集與監控瀏覽器數據採集服務器業務數據採集服務器性能數據採集系統監控系統報警七、安全架構Web攻擊數據保護八、數據中心機房架構機房架構機櫃架構 服務器架構

相關文章
相關標籤/搜索