【網站架構】從簡單到複雜,一步步演變

前言:最近想看看大型網站是怎麼一步步演變過來的,看到了一篇寫的很好,特此轉發,僅供學習前端

 

1、大型網站的特性程序員

一、高併發、大流量:PV 量巨大;
二、高可用:7*24 小時不間斷服務;
三、海量數據:文件數目分分鐘 xxTB;
四、用戶分佈普遍,網絡狀況複雜:網絡運營商;
五、安全環境惡劣:黑客的攻擊;
六、需求快速變動,發佈頻繁:快速適應市場,知足用戶需求;
七、漸進式發展:慢慢地運營出大型網站;

 

2、大型網站架構目標數據庫

 

3、如何大型網站架構後端

說明:按照問題識別—>概念認知—>架構切分的思路,來分析大型網站架構的誕生:
    一、問題識別:當前什麼問題、誰的問題、問題邊界;
    二、概念認知:經過分析問題,會產生哪些概念,統一律念認知,達成溝通交流規範;
    三、架構切分:根據概念來解決問題,如何架構切分,產生哪些架構,提出具體解決方案;

 

4、網站架構價值觀瀏覽器

一、核心價值:隨網站所需靈活應對;大型網站不是從無到有一步就搭建好一個大型網站,而是可以伴隨小型網站業務的漸進發展,慢慢地演化成一個大型網站;
二、驅動力量:網站的業務發展— 業務成就了技術,事業成就了人,而不是相反;

 

5、網站架構幾個誤區緩存

一、一味追隨大公司的解決方案;
二、爲了技術而技術-->常見問題;
三、企圖用技術解決全部問題:技術是用來解決業務問題的,而業務的問題,也能夠經過業務的手段去解決;

 

架構體系演進安全

1、單機時代服務器

草根時期,快速開發網站並上線。固然,一般只是先試水,用戶規模也沒有造成,經濟能力和投入也很是有限。應用程序、數據庫、文件等全部資源都集中在一臺 Server上,
典型案例:基於 LAMP 架構的 PHP 網站;

優勢:簡單、快速迭代達成業務目標; 缺點:存在單點、談不上高可用; 技術點:應用設計要保證可擴展;

 

2、使用緩存網絡

有必定的業務量和用戶規模了,想提高網站速度,因而,緩存出場了。

優勢:簡單有效、方便維護; 缺點:存在單點、談不上高可用; 技術點:客戶端(瀏覽器)緩存、前端頁面緩存、頁面片斷緩存、本地數據緩存/數據庫緩存、遠程緩存;

如上圖,緩存能夠分爲:
  1. 頁面緩存:客戶端緩存,減小對網站的訪問;
  2. 本地緩存:訪問速度快,但數據量有限,減小對DB查詢;
  3. 遠程緩存:遠程訪問,能夠集羣,所以容量不受限制;

 

3、數據服務與應用分離session

市場反響還不錯,用戶量天天在增加,數據庫瘋狂讀寫,逐漸發現一臺服務器快撐不住了。因而,決定把數據服務和APP作分離。

優勢:簡單有效、方便維護、提升不一樣Server對硬件資源的利用率;
缺點:存在單點、談不上高可用;
技術點:文件服務器部署、數據庫服務器,擴展數據訪問模塊;

分離後三臺 Server 對硬件資源的需求各不相同:
一、應用服務器:須要更快更強大的 CPU; 二、數據庫服務器:須要更快的硬盤和更大的內存; 三、文件服務器:須要更大的硬盤;

 

4、數據庫讀寫分離

單臺數據庫也感受快撐不住了,通常都會嘗試作「讀寫分離」。因爲大部分互聯網「讀多寫少」的特性所決定的。Salve的臺數,取決於按業務評估的讀寫比例。

優勢:簡單有效、下降數據庫單臺壓力;
缺點:讀寫分離,增長程序難度,架構變複雜,維護難度增長;
技術點:數據庫主從同步部署,擴展數據訪問模塊,實現讀寫分離;

 

5、應用服務集羣

數據庫層面是緩解了,可是應用程序層面也出現了瓶頸,因爲訪問量增大,加上早期程序員水平有限寫的代碼也很爛,人員流動性也大,很難去維護和優化。因此,很經常使用的辦法仍是「堆機器」。

優勢:增長服務器和HA機制,系統性能及可用性獲得保證
缺點:應用之間緩存、Session一致性問題;
技術點:負載均衡;

經過集羣解決高併發、海量數據問題的經常使用手段,實現系統的可伸縮性。經過負載均衡調度器,可將用戶訪問分發到集羣中的某臺 Server 上,應用服務器的負載壓力再也不成爲整個網站的瓶頸。

 

6、集中式緩存,session集中式存儲

加機器誰都會加,關鍵是加完以後得有效果,加完以後可能會引起一些問題。例如很是常見的:集羣應用之間頁面輸出緩存和本地緩存一致性的問題,Session保存的問題......。

優勢:應用之間緩存、Session一致,存儲無限制,能夠擴展;
缺點:不如本地緩存訪問快,緩存服務器、Session服務器等仍存在單點問題;
技術點:緩存服務器部署、Session集中存儲方案;

 

7、動靜分離

動靜分離也是提升網站響應速度的一種經常使用方式。將動態請求與靜態請求分離開,儘可能減小對應用服務器的壓力。同時,能夠再進一步對靜態請求,進行緩存,以加快響應速度
能夠須要開發人員配合(把靜態資源放獨立站點下),也能夠不須要開發人員配合(利用7層反向代理來處理,根據後綴名等信息來判斷資源類型)。

優勢:減輕應用負載壓力,針對靜態文件緩存;
缺點:靜態文件緩存更新失效問題;
技術點:動靜分離、靜態文件緩存方案;

 

8、反向代理、CDN加速

使用反向代理和CDN加速網站響應:CDN 和反向代理的基本原理都是緩存,區別在於:

    一、CDN部署在網絡提供商的機房;
    二、反向代理則部署在網站的中心機房;

使用 CDN 和反向代理的目的都是儘早返回數據給用戶,一方面加快用戶訪問速度,另外一方面也減輕後端服務器的負載壓力。

優勢:減輕應用負載壓力,異地緩存有效解決不一樣地方用戶訪問過慢的問題;
缺點:成本大幅增長,架構進一步複雜化,也維護難度進一步增大,靜態文件緩存更新失效問題;
技術點:CDN、反向代理方案;

 

9、使用NoSQL、搜索引擎

 

到這裏,已經基本作到了DB層面和應用層面的橫向擴展了,能夠開始關注一些其它方面,例如:站內搜索的精準度,對DB的依賴,開始引入全文索引、NoSQL。
NoSQL和搜索引擎都是源自互聯網的技術手段,對可伸縮的分佈式特性具備更好的支持。應用服務器則經過一個統一數據訪問模塊訪問各類數據,減輕應用程序管理諸多數據源的麻煩。

 

 

 

優勢:下降DB依賴;
缺點:單點問題,談不上高可用;
技術點:NoSQL、搜索引擎、分佈式;

到目前爲止,一個可以承載日均百萬級訪問量的中型網站架構基本介紹完了。

 

10、如何保證高可用

保證高可用比較經常使用的手段:
    一、文件系統、數據庫系統集羣;
    二、靜態內容服務器集羣;
    三、CDN服務器集羣;
    四、反向代理服務器集羣;
    五、負載均衡調度器集羣;
    六、分佈式NoSQL服務器集羣;
    七、搜索引擎服務器集羣;
    八、分佈式緩存服務器集羣;
    九、分佈式Session服務器集羣;

優勢:集羣負載,保證高可用;
缺點:數據一致性、數據有狀態問題;
技術點:負載調度器、集羣方案;

截止目前爲止,都沒有怎麼去改動應用程序的架構,或者說通俗點,都不怎麼須要大面積的修改代碼。

 

11、應用垂直拆分

隨着業務愈來愈複雜,網站的功能愈來愈多,雖然部署層面是採用的集羣,可是應用程序架構層面仍是「集中式」的,這樣會致使不少耦合,不便於開發、維護,並且容易「一榮俱損」。因此,一般會把網站拆分出不一樣的子站點來單獨宿主。
經過分而治之的手段將整個網站業務分紅不一樣的產品線,如首頁、商鋪、訂單、賣家、買家等 拆分紅不一樣的產品線,分歸不一樣的業務團隊負責。各個應用之間能夠經過創建一個超連接創建關係,也能夠經過消息隊列進行數據分發。

優勢:下降耦合、分壓;
缺點:應用架構複雜;
技術點:業務抽取拆分;

 

12、業務垂直分庫

應用都拆了,因爲單個數據庫的鏈接,QPS,TPS,I/O處理能力都很是有限,DB層面也能夠去作垂直分庫操做。

優勢:下降DB耦合、分壓DB;
缺點:數據訪問模塊複雜;
技術點:業務抽取拆分;

 

十3、分佈式服務化

拆分應用和DB以後,其實仍是會有不少問題。不一樣的站點,裏面可能會有相同邏輯和功能的代碼。
固然,對於一些基礎的功能咱們能夠封裝DLL或者Jar包去處處提供引用,可是這種強依賴也很容易形成一些問題(版本問題、依賴關係等處理起來很是麻煩)。 既然每個應用系統都須要執行許多相通的業務操做,好比用戶管理、商品管理等,那麼能夠將這些共用的業務提取出來,獨立部署。這樣,傳說中的SOA的價值就獲得體現了。

優勢:服務統一管理,提供重用度;
缺點:應用架構更復雜;
技術點:業務抽取拆分、服務化技術方案;

 

十4、消息隊列出場 

應用、服務之間仍是會出現一些依賴問題,這時候,高吞吐量的解耦利器出現了。

優勢:提升吞吐量、應用、服務之間解耦;
缺點:存在消息消費延遲問題;
技術點:消息隊列技術方案;

 

十5、分庫分表

 

最後,再介紹一個大型互聯網公司都用的絕技--分庫分表。我的經驗,不是業務發展和各方面很是迫切,不要輕易走這一步。
由於分庫分表誰都會幹,關鍵是拆完以後怎麼辦。目前,市面上尚未徹底開源免費的方案,能讓你一勞永逸地解決數據庫拆分問題。

分庫分表:
    一、橫向拆分;
    二、縱向拆分;
    三、分佈式數據庫訪問層;
    四、數據庫中間件(代理);

 

 

網站架構總結

 

上面講述了在網站業務發展的不一樣階段,會面臨不一樣的問題,針對不一樣的問題,會選擇不一樣的架構。大型網站架構就是在不一樣階段時解決不一樣問題的過程當中慢慢演進來的。

 

經驗之談: 一、一切以解決業務目標爲首要任務; 二、沒有以業務爲目標的任何架構、技術,都是毫無心義的耍流氓; 三、再牛逼的架構、再牛逼的技術,不可以解決業務的問題,你也只能算是會架構、會技術的工匠,而不能算是真正意義上的架構師; 四、業務成就了技術,平臺成就了人,事業成就了人,而不是相反;

 

本文思惟導圖

 

以上內容僅供學習

 

參考連接:https://www.jianshu.com/p/9197d8a0781b

做者:猿碼道

相關文章
相關標籤/搜索