1. 程式人生 > >1千使用者與1千萬使用者的網站系統架構區別?

1千使用者與1千萬使用者的網站系統架構區別?

轉自:http://www.zhongkerd.com/news/content-1209.html

軟體外包需求洽談的過程中,往往需要根據客戶期望的網站併發量來評估工作量,客戶往往都想要更多的併發量,更多併發量也意味著更多的工作量,本文就一步一步告訴大家,1千併發與1千萬併發的網站系統架構有什麼區別?

既然說的是大型網站架構,那麼架構的背後自然是解決人因面對大型網站特性而帶來的問題。這樣可以先給大家說下大型網站的特性,這些特性帶來的問題就是人要解決的問題

  1. 高併發、大流量:PV 量巨大;

  2. 高可用:7*24 小時不間斷服務;

  3. 海量資料:檔案數目分分鐘 xxTB;

  4. 使用者分佈廣泛,網路情況複雜:網路運營商;

  5. 安全環境惡劣:黑客的攻擊;

  6. 需求快速變更,釋出頻繁:快速適應市場,滿足使用者需求;

  7. 漸進式發展:慢慢地運營出大型網站;

大型網站目標

既然說到了大型網站的特性,那麼解決這些特性帶來的問題要達到什麼目標呢?如下:

一步步帶你,如何網站架構

大型網站架構目標

每個目標背後面臨著技術、設計、維護等諸多方面的挑戰; 而目標本身的期望值也會根據實際情況進行調整,這也意味著網站架構建設是個不斷調整的過程。

有了問題,也定了偉大的目標,那麼網站在不同階段面對不同的問題,是如何解決的?又是如何一步步成長為大型網站架構,實現這些偉大的目標呢?

如何網站架構

首先,什麼是大型網站架構呢?

其實大型網站架構的概念對於每一個開發者來說很籠統、很模糊,正如盲人摸象,看到的、瞭解到的只是很小的一部分,大部分情況下我們只是負責架構中的一小塊內容,所以很難清晰地給出具體定義。這就是所謂“不識廬山真面目 只緣身在此山中”的尷尬吧。所以我們要跳出來,站在巨集觀的角度,從整體到細節實現來認識大型網站架構。

那麼從巨集觀的角度怎麼去認識大型網站架構呢?正如前面幾篇《細品架構系列》所描述對架構的認識,按照問題識別—>概念認知—>架構切分的思路,來分析大型網站架構的誕生:

  1. 問題識別:當前什麼問題、誰的問題、問題邊界;

  2. 概念認知:通過分析問題,會產生哪些概念,統一概念認知,達成溝通交流規範;

  3. 架構切分:根據概念來解決問題,如何架構切分,產生哪些架構,提出具體解決方案;

PS:上面的三個步驟具體如何識別、認知、切分,請詳細參考前面幾篇《細品架構系列》文章,可能使你會對架構有重新的認識。

在進行分析大型網站架構的演進之路前,首先我們要明確的兩個價值觀:

  1. 核心價值:隨網站所需靈活應對;大型網站不是從無到有一步就搭建好一個大型網站,而是能夠伴隨小型網站業務的漸進發展,慢慢地演化成一個大型網站;

  2. 驅動力量:網站的業務發展—業務成就了技術,事業成就了人,而不是相反;

還有,大型網站架構演進必須避免的幾個誤區:

  1. 一味追隨大公司的解決方案;

  2. 為了技術而技術–>常見問題;

  3. 企圖用技術解決所有問題:技術是用來解決業務問題的,而業務的問題,也可以通過業務的手段去解決;

架構體系演進

單機時代

草根時期,快速開發網站並上線。當然,通常只是先試水,使用者規模也沒有形成,經濟能力和投入也非常有限應用程式、資料庫、檔案等所有資源都集中在一臺 Server上,典型案例:基於 LAMP 架構的 PHP 網站;

一步步帶你,如何網站架構

單機時代(純依賴RDBMS)

優點:簡單、快速迭代達成業務目標;

缺點:存在單點、談不上高可用;

技術點:應用設計要保證可擴充套件;

快取出場

有一定的業務量和使用者規模了,想提升網站速度,於是,快取出場了

一步步帶你,如何網站架構

單機時代+快取出場

優點:簡單有效、方便維護;

缺點:存在單點、談不上高可用;

技術點:客戶端(瀏覽器)快取、前端頁面快取、頁面片段快取、本地資料快取/資料庫快取、遠端快取;

如上圖,快取可以分為:

  1. 頁面快取:客戶端快取,減少對網站的訪問;

  2. 本地快取:訪問速度快,但資料量有限,減少對DB查詢;

  3. 遠端快取:遠端訪問,可以叢集,因此容量不受限制;

資料服務與應用分離

市場反響還不錯,使用者量每天在增長,資料庫瘋狂讀寫,逐漸發現一臺伺服器快撐不住了。於是,決定把資料服務和APP做分離

一步步帶你,如何網站架構

資料服務與應用分離

優點:簡單有效、方便維護、提高不同Server對硬體資源的利用率;

缺點:存在單點、談不上高可用;

技術點:檔案伺服器部署、資料庫伺服器,擴充套件資料訪問模組;

分離後三臺 Server 對硬體資源的需求各不相同:

  1. 應用伺服器:需要更快更強大的 CPU;

  2. 資料庫伺服器:需要更快的硬碟和更大的記憶體;

  3. 檔案伺服器:需要更大的硬碟;

資料庫讀寫分離

單臺數據庫也感覺快撐不住了,一般都會嘗試做“讀寫分離”。由於大部分網際網路“讀多寫少”的特性所決定的。Salve的臺數,取決於按業務評估的讀寫比例。

一步步帶你,如何網站架構

資料庫讀寫分離

優點:簡單有效、降低資料庫單臺壓力;

缺點:讀寫分離,增加程式難度,架構變複雜,維護難度增加;

技術點:資料庫主從同步部署,擴充套件資料訪問模組,實現讀寫分離;

應用服務叢集

資料庫層面是緩解了,但是應用程式層面也出現了瓶頸,由於訪問量增大,加上早期程式設計師水平有限寫的程式碼也很爛,人員流動性也大,很難去維護和優化。所以,很常用的辦法還是“堆機器”。

一步步帶你,如何網站架構

應用出現瓶頸 負載均衡叢集

優點:增加伺服器和HA機制,系統性能及可用性得到保證;

缺點:應用之間快取、Session一致性問題;

技術點:負載均衡;

通過叢集解決高併發、海量資料問題的常用手段,實現系統的可伸縮性。通過負載均衡排程器,可將使用者訪問分發到叢集中的某臺 Server 上,應用伺服器的負載壓力不再成為整個網站的瓶頸。

集中式快取、Session集中儲存

加機器誰都會加,關鍵是加完之後得有效果,加完之後可能會引發一些問題。例如非常常見的:叢集應用之間頁面輸出快取和本地快取一致性的問題,Session儲存的問題……

一步步帶你,如何網站架構

集中式快取 Session集中儲存

優點:應用之間快取、Session一致,儲存無限制,可以擴充套件;

缺點:不如本地快取訪問快,快取伺服器、Session伺服器等仍存在單點問題;

技術點:快取伺服器部署、Session集中儲存方案;

動靜分離

動靜分離也是提高網站響應速度的一種常用方式。將動態請求與靜態請求分離開,儘量減少對應用伺服器的壓力。同時,可以再進一步對靜態請求,進行快取,以加快響應速度。可以需要開發人員配合(把靜態資源放獨立站點下),也可以不需要開發人員配合(利用7層反向代理來處理,根據字尾名等資訊來判斷資源型別)。

一步步帶你,如何網站架構

使用動靜分離

優點:減輕應用負載壓力,針對靜態檔案快取;

缺點:靜態檔案快取更新失效問題;

技術點:動靜分離、靜態檔案快取方案;

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

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

  1. CDN部署在網路提供商的機房;

  2. 反向代理則部署在網站的中心機房;

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

一步步帶你,如何網站架構

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