建站經驗 一個成熟的大型網站系統架構演化之路

隨着業務的擴大、用戶需求的不斷改進網站架構也是要改變的,下面咱們就討論一下一個普通的網站發展成大型網站過程當中網站架構是如何變化的,有圖有真相,須要的朋友能夠參考下
 

  一個成熟的大型網站(如淘寶、天貓、騰訊等)的系統架構並非一開始設計時就具有完整的高性能、高可用、高伸縮等特性的,它是隨着用戶量的增長,業務功能的擴展逐漸演變完善的,在這個過程當中,開發模式、技術架構、設計思想也發生了很大的變化,就連技術人員也從幾我的發展到一個部門甚至一條產品線。因此成熟的系統架構是隨着業務的擴展而逐步完善的,並非一蹴而就;不一樣業務特徵的系統,會有各自的側重點,例如淘寶,要解決海量的商品信息的搜索、下單、支付,例如騰訊,要解決數億用戶的實時消息傳輸,百度它要處理海量的搜索請求,他們都有各自的業務特性,系統架構也有所不一樣。儘管如此咱們也能夠從這些不一樣的網站背景下,找出其中共用的技術,這些技術和手段普遍運用在大型網站系統的架構中,下面就經過介紹大型網站系統的演化過程,來認識這些技術和手段。redis

  1、最開始的網站架構sql

  最初的架構,應用程序、數據庫、文件都部署在一臺服務器上,如圖:mongodb

  2、應用、數據、文件分離數據庫

  隨着業務的擴展,一臺服務器已經不能知足性能需求,故將應用程序、數據庫、文件各自部署在獨立的服務器上,而且根據服務器的用途配置不一樣的硬件,達到最佳的性能效果。緩存

  3、利用緩存改善網站性能安全

  在硬件優化性能的同時,同時也經過軟件進行性能優化,在大部分的網站系統中,都會利用緩存技術改善系統的性能,使用緩存主要源於熱點數據的存在,大部分網站訪問都遵循28原則(即80%的訪問請求,最終落在20%的數據上),因此咱們能夠對熱點數據進行緩存,減小這些數據的訪問路徑,提升用戶體驗。性能優化

  緩存實現常見的方式是本地緩存、分佈式緩存。固然還有CDN、反向代理等,這個後面再講。本地緩存,顧名思義是將數據緩存在應用服務器本地,能夠存在內存中,也能夠存在文件,OSCache就是經常使用的本地緩存組件。本地緩存的特色是速度快,但由於本地空間有限因此緩存數據量也有限。分佈式緩存的特色是,能夠緩存海量的數據,而且擴展很是容易,在門戶類網站中經常被使用,速度按理沒有本地緩存快,經常使用的分佈式緩存是Memcached、Redis。服務器

  4、使用集羣改善應用服務器性能網絡

  應用服務器做爲網站的入口,會承擔大量的請求,咱們每每經過應用服務器集羣來分擔請求數。應用服務器前面部署負載均衡服務器調度用戶請求,根據分發策略將請求分發到多個應用服務器節點。架構

  經常使用的負載均衡技術硬件的有F5,價格比較貴,軟件的有LVS、Nginx、HAProxy。LVS是四層負載均衡,根據目標地址和端口選擇內部服務器,Nginx和HAProxy是七層負載均衡,能夠根據報文內容選擇內部服務器,所以LVS分發路徑優於Nginx和HAProxy,性能要高些,而Nginx和HAProxy則更具配置性,如能夠用來作動靜分離(根據請求報文特徵,選擇靜態資源服務器仍是應用服務器)。

  5、數據庫讀寫分離和分庫分表

  隨着用戶量的增長,數據庫成爲最大的瓶頸,改善數據庫性能經常使用的手段是進行讀寫分離以及分庫分表,讀寫分離顧名思義就是將數據庫分爲讀庫和寫庫,經過主備功能實現數據同步。分庫分表則分爲水平切分和垂直切分,水平切分則是對一個數據庫特大的表進行拆分,例如用戶表。垂直切分則是根據業務的不一樣來切分,如用戶業務、商品業務相關的表放在不一樣的數據庫中。

  6、使用CDN和反向代理提升網站性能

  假如咱們的服務器都部署在成都的機房,對於四川的用戶來講訪問是較快的,而對於北京的用戶訪問是較慢的,這是因爲四川和北京分別屬於電信和聯通的不一樣發達地區,北京用戶訪問須要經過互聯路由器通過較長的路徑才能訪問到成都的服務器,返回路徑也同樣,因此數據傳輸時間比較長。對於這種狀況,經常使用CDN解決,CDN將數據內容緩存到運營商的機房,用戶訪問時先從最近的運營商獲取數據,這樣大大減小了網絡訪問的路徑。比較專業的CDN運營商有藍汛、網宿。

  而反向代理,則是部署在網站的機房,當用戶請求達到時首先訪問反向代理服務器,反向代理服務器將緩存的數據返回給用戶,若是沒有緩存數據纔會繼續訪問應用服務器獲取,這樣作減小了獲取數據的成本。反向代理有Squid,Nginx。

  7、使用分佈式文件系統

  用戶一每天增長,業務量愈來愈大,產生的文件愈來愈多,單臺的文件服務器已經不能知足需求,這時就須要分佈式文件系統的支撐。經常使用的分佈式文件系統有GFS、HDFS、TFS。

  8、使用NoSql和搜索引擎

  對於海量數據的查詢和分析,咱們使用nosql數據庫加上搜索引擎能夠達到更好的性能。並非全部的數據都要放在關係型數據中。經常使用的NOSQL有mongodb、hbase、redis,搜索引擎有lucene、solr、elasticsearch。

  9、將應用服務器進行業務拆分

  隨着業務進一步擴展,應用程序變得很是臃腫,這時咱們須要將應用程序進行業務拆分,如百度分爲新聞、網頁、圖片等業務。每一個業務應用負責相對獨立的業務運做。業務之間經過消息進行通訊或者共享數據庫來實現。

  10、搭建分佈式服務

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

  小結

  大型網站的架構是根據業務需求不斷完善的,根據不一樣的業務特徵會作特定的設計和考慮,本文只是講述一個常規大型網站會涉及的一些技術和手段。謝謝閱讀,但願能幫到你們,請繼續關注腳本之家,咱們會努力分享更多優秀的文章。

相關文章
相關標籤/搜索