軟件外包需求洽談的過程中,往往需要根據(jù)客戶期望的網(wǎng)站并發(fā)量來評估工作量,客戶往往都想要更多的并發(fā)量,更多并發(fā)量也意味著更多的工作量,本文就一步一步告訴大家,1千并發(fā)與1千萬并發(fā)的網(wǎng)站系統(tǒng)架構有什么區(qū)別? 既然說的是大型網(wǎng)站架構,那么架構的背后自然是解決人因面對大型網(wǎng)站特性而帶來的問題。這樣可以先給大家說下大型網(wǎng)站的特性,這些特性帶來的問題就是人要解決的問題:
大型網(wǎng)站目標 既然說到了大型網(wǎng)站的特性,那么解決這些特性帶來的問題要達到什么目標呢?如下:
大型網(wǎng)站架構目標 每個目標背后面臨著技術、設計、維護等諸多方面的挑戰(zhàn); 而目標本身的期望值也會根據(jù)實際情況進行調整,這也意味著網(wǎng)站架構建設是個不斷調整的過程。 有了問題,也定了偉大的目標,那么網(wǎng)站在不同階段面對不同的問題,是如何解決的?又是如何一步步成長為大型網(wǎng)站架構,實現(xiàn)這些偉大的目標呢? 如何網(wǎng)站架構 首先,什么是大型網(wǎng)站架構呢? 其實大型網(wǎng)站架構的概念對于每一個開發(fā)者來說很籠統(tǒng)、很模糊,正如盲人摸象,看到的、了解到的只是很小的一部分,大部分情況下我們只是負責架構中的一小塊內容,所以很難清晰地給出具體定義。這就是所謂“不識廬山真面目 只緣身在此山中”的尷尬吧。所以我們要跳出來,站在宏觀的角度,從整體到細節(jié)實現(xiàn)來認識大型網(wǎng)站架構。 那么從宏觀的角度怎么去認識大型網(wǎng)站架構呢?正如前面幾篇《細品架構系列》所描述對架構的認識,按照問題識別—>概念認知—>架構切分的思路,來分析大型網(wǎng)站架構的誕生:
在進行分析大型網(wǎng)站架構的演進之路前,首先我們要明確的兩個價值觀:
還有,大型網(wǎng)站架構演進必須避免的幾個誤區(qū):
架構體系演進 單機時代 草根時期,快速開發(fā)網(wǎng)站并上線。當然,通常只是先試水,用戶規(guī)模也沒有形成,經濟能力和投入也非常有限。應用程序、數(shù)據(jù)庫、文件等所有資源都集中在一臺 Server上,典型案例:基于 LAMP 架構的 PHP 網(wǎng)站;
單機時代(純依賴RDBMS)
緩存出場 有一定的業(yè)務量和用戶規(guī)模了,想提升網(wǎng)站速度,于是,緩存出場了。
單機時代+緩存出場
如上圖,緩存可以分為:
數(shù)據(jù)服務與應用分離 市場反響還不錯,用戶量每天在增長,數(shù)據(jù)庫瘋狂讀寫,逐漸發(fā)現(xiàn)一臺服務器快撐不住了。于是,決定把數(shù)據(jù)服務和APP做分離。
數(shù)據(jù)服務與應用分離
分離后三臺 Server 對硬件資源的需求各不相同:
數(shù)據(jù)庫讀寫分離 單臺數(shù)據(jù)庫也感覺快撐不住了,一般都會嘗試做“讀寫分離”。由于大部分互聯(lián)網(wǎng)“讀多寫少”的特性所決定的。Salve的臺數(shù),取決于按業(yè)務評估的讀寫比例。
數(shù)據(jù)庫讀寫分離
應用服務集群 數(shù)據(jù)庫層面是緩解了,但是應用程序層面也出現(xiàn)了瓶頸,由于訪問量增大,加上早期程序員水平有限寫的代碼也很爛,人員流動性也大,很難去維護和優(yōu)化。所以,很常用的辦法還是“堆機器”。
應用出現(xiàn)瓶頸 負載均衡集群
通過集群解決高并發(fā)、海量數(shù)據(jù)問題的常用手段,實現(xiàn)系統(tǒng)的可伸縮性。通過負載均衡調度器,可將用戶訪問分發(fā)到集群中的某臺 Server 上,應用服務器的負載壓力不再成為整個網(wǎng)站的瓶頸。 集中式緩存、Session集中存儲 加機器誰都會加,關鍵是加完之后得有效果,加完之后可能會引發(fā)一些問題。例如非常常見的:集群應用之間頁面輸出緩存和本地緩存一致性的問題,Session保存的問題……。
集中式緩存 Session集中存儲
動靜分離 動靜分離也是提高網(wǎng)站響應速度的一種常用方式。將動態(tài)請求與靜態(tài)請求分離開,盡量減少對應用服務器的壓力。同時,可以再進一步對靜態(tài)請求,進行緩存,以加快響應速度。可以需要開發(fā)人員配合(把靜態(tài)資源放獨立站點下),也可以不需要開發(fā)人員配合(利用7層反向代理來處理,根據(jù)后綴名等信息來判斷資源類型)。
使用動靜分離
反向代理和CDN加速網(wǎng)站響應 使用反向代理和CDN加速網(wǎng)站響應:CDN 和反向代理的基本原理都是緩存,區(qū)別在于:
使用 CDN 和反向代理的目的都是盡早返回數(shù)據(jù)給用戶,一方面加快用戶訪問速度,另一方面也減輕后端服務器的負載壓力。
使用反向代理和 CDN 加速網(wǎng)站響應 |
|
來自: liang1234_ > 《架構參考》