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