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