当前位置 - 股票行情交易網 - 裝修設計 - 大型互聯網公司項目如何架構

大型互聯網公司項目如何架構

初始階段的網站架構

大型網站都是從小型網站發展而來,網站架構也是壹樣,是從小型網站架構逐步演化而來,小型網站最開始沒有太多人訪問,只需要壹臺服務器就綽綽有余,這時的網站架構如圖。

應用程序,數據庫,文件等所有的資源都在壹臺服務器上。通常服務器操作系統使用Linux,應用程序使用PHP開發,然後部署在Apache上,數據庫使用MySql,匯集各種開源軟件及壹臺廉價服務器就可以開始網站的發展之路了。

應用服務和數據服務分離

隨著網站業務的發展,壹臺服務器逐漸不能滿足需求:越來越多的用戶訪問導致性能越來越差,越來越多的數據導致存儲空間不足,這時就需要將應用和數據分離,應用和數據分離後整個網站使用三臺服務器:應用服務器,文件服務器和數據庫服務器,如下圖所示,這三臺服務器對硬件資源的要求各不相同,應用服務器需要處理大量的業務邏輯,因此需要更快更強大的CPU,數據庫服務器需要快速磁盤檢索和數據緩存,因此需要更快的硬盤和更大的內存,文件服務器需要儲存大量用戶上傳的文件,因此需要更大的硬盤。

應用和數據分離後,不同特性的服務器承擔不同的服務角色,網站的並發處理能力和數據存儲空間得到了很大改善,支持網站業務進壹步發展,但是隨著用戶逐漸增多,網站又壹次面臨挑戰:數據庫壓力太大導致訪問延遲,進而影響整個網站的性能,用戶體驗受到影響,這時需要對網站架構進壹步優化。

使用緩存改善網站性能

網站訪問特點和現實世界的財富分配壹樣遵循二八定律:80%的業務訪問集中在20%的數據上。淘寶買家瀏覽的商品集中在少部分成交數多、評價良好的商品上;百度搜索關鍵詞集中在少部分熱門詞匯上;經常登錄的用戶才會發微博、看微博,而這部分用戶也只占總用戶數目的壹小部分。

既然大部分的業務訪問集中在,那麽如果把這壹小部分數據緩存在內存中,就可以減少數據庫的訪問壓力。網站使用的緩存分為兩種:緩存在應用服務器上的本地緩存和緩存在專門的分布式緩存服務器上的遠程緩存。本地緩存的訪問速度更快壹些,但是受應用服務器內存限制,其緩存數量有限,而且會出現和應用程序爭用內存的情況。遠程分布式可以使用集群的方式,部署大內存的服務器作為專門的緩存服務器,可以在理論上做到不受內存容量限制的緩存服務。

使用緩存後,數據訪問壓力得到有效緩解,但是單壹應用服務器能夠處理的請求連接有限,在網站的訪問高峰期,應用服務器會成為整個網站的瓶頸。

使用應用服務器集群改善網站的並發處理能力

使用集群是網站解決高並發,海量問題的常用手段,當壹臺服務器的處理能力、儲存空間不足時,不要企圖去換更強大的服務器,對大型網站而言,不管多麽強大的服務器,都滿足不了網站持續增長的業務需求,這種情況下,更恰當的做法是增加壹臺服務器分擔原有服務器的訪問及存儲壓力。

對網站而言,只要能通過壹臺服務器的方式改善負載壓力,就可以以同樣的方式持續增加服務器不斷改善系統性能,從而實現系統的可伸縮性,應用服務器實現集群是網站可伸縮集群架構設計中較為簡單成熟的壹種。如下圖所示。

通過負載均衡調度服務器,可將來自用戶瀏覽器的請求分發到應用服務器集群中的任何壹臺服務器上,如果有更多的用戶,就在集群中加入更多的應用服務器,使應用服務器的負載壓力不在成為網站的瓶頸。

數據庫讀寫分離

網站使用緩存後,大部分數據操作訪問都可以不通過數據庫就能完成,但是仍有壹部分讀操作,(緩存訪問不命中、緩存過期)和全部的寫操作,需要訪問數據庫,在網站的用戶達到壹定規模後,數據庫因為負載壓力過高而成為網站的瓶頸。

目前大部分的主流數據庫都提供主從熱備功能,通過配置兩臺數據庫主從關系,可以將壹臺數據庫服務器的數據更新同步到另壹臺服務器上。網站利用數據庫的這壹功能,實現數據庫讀寫分離,從而改善數據庫負載壓力。

應用服務器在寫數據的時候,訪問主數據庫,主數據庫通過主從復制機制將數據更新同步到從數據庫,這樣當應用服務器讀數據的時候,就可以通過從數據庫或得數據。為了便於應用程序訪問讀寫分離後的數據庫,通常在應用服務器端使用專門的數據訪問模塊,使數據庫讀寫分離時對應用透明。

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

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

使用分布式文件系統和分布式數據庫系統

分布式數據庫是網站數據庫拆分的最後手段,只有在單表數據規模非常龐大的時候才使用,不到萬不得以時,網站更常用的數據庫拆分手段是業務分庫,將不同業務的數據庫部署在不同的物理服務器上。

使用NOSQL和搜索引擎

對於海量數據的查詢,我們使用nosql數據庫加上搜索引擎可以達到更好的性能。並不是所有的數據都要放在關系型數據中。常用的NOSQL有mongodb和redis,搜索引擎有lucene。

業務拆分

隨著業務進壹步擴展,應用程序變得非常臃腫,這時我們需要將應用程序進行業務拆分,如百度分為新聞、網頁、圖片等業務。每個業務應用負責相對獨立的業務運作。業務之間通過消息進行通信或者同享數據庫來實現.

分布式服務

這時我們發現各個業務應用都會使用到壹些基本的業務服務,例如用戶服務、訂單服務、支付服務、安全服務,這些服務是支撐各業務應用的基本要素。我們將這些服務抽取出來利用分部式服務框架搭建分布式服務。淘寶的Dubbo是壹個不錯的選擇.