2019-05-05

大型電商項目的服務(wù)端架構(gòu)

行業(yè)交流群:631783760

一個大型服務(wù)系統(tǒng)都是從一步一步走過來的,在每個階段,找到對應(yīng)該階段網(wǎng)站服務(wù)器架構(gòu)所面臨的問題,然后在不斷解決這些問題,在這個過程中整個架構(gòu)會一直演進。

一、單服務(wù)器-俗稱all in one

從一個小網(wǎng)站說起。一臺服務(wù)器也就足夠了。文件服務(wù)器,數(shù)據(jù)庫,還有應(yīng)用都部署在一臺機器,俗稱ALL IN ONE。

隨著我們用戶越來越多,訪問越來越大,硬盤、CPU、內(nèi)存等都開始吃緊,一臺服務(wù)器已經(jīng)滿足不了。這時看到下一步演進。

二、數(shù)據(jù)服務(wù)與應(yīng)用服務(wù)分離

我們將數(shù)據(jù)服務(wù)和應(yīng)用服務(wù)分離,給應(yīng)用服務(wù)器配置更好的CPU和內(nèi)存,給數(shù)據(jù)服務(wù)器配置更好更大的硬盤。

分離之后提高一定的可用性,例如Files Server掛了,我們還是可以操作應(yīng)用和數(shù)據(jù)庫等。

隨著訪問QPS越來越高,降低接口訪問時間,提高服務(wù)性能和并發(fā),成為了我們下一個目標(biāo),同時發(fā)現(xiàn)有很多業(yè)務(wù)數(shù)據(jù)不需要每次都從數(shù)據(jù)庫獲取。

三、使用緩存

包括本地緩存、遠程緩存、遠程分布式緩存。

因為 80% 的業(yè)務(wù)訪問都集中在 20% 的數(shù)據(jù)上,也就是我們經(jīng)常說的28法則。如果能將這部分?jǐn)?shù)據(jù)緩存下來,性能一下子就上來了。而緩存又分為兩種:本地緩存和遠程緩存緩存,以及遠程分布式緩存,我們這里面的遠程緩存圖上畫的是分布式的緩存集群(Cluster)。

思考的點

具有哪種業(yè)務(wù)特點數(shù)據(jù)使用緩存?

具有哪種業(yè)務(wù)特點的數(shù)據(jù)使用本地緩存?

具有哪種務(wù)特點的數(shù)據(jù)使用遠程緩存?

分布式緩存在擴容時會碰到什么問題?如何解決?分布式緩存的算法都有哪幾種?各有什么優(yōu)缺點?

這個時候隨著訪問QPS的提高,服務(wù)器的處理能力會成為瓶頸。雖然可以通過購買更強大的硬件解決,但總會有上限,而且這個到后期成本就是指數(shù)級增長了,這時,我們需要服務(wù)器的集群來橫向擴展,所以就必須加個新東西:負(fù)載均衡調(diào)度服務(wù)器。

四、使用負(fù)載均衡,進行服務(wù)器集群

增加了負(fù)載均衡、服務(wù)器集群之后,我們可以橫向擴展服務(wù)器,解決了服務(wù)器處理能力的瓶頸。

思考的點

負(fù)載均衡的調(diào)度策略都有哪些?

各有什么優(yōu)缺點?

各適合什么場景?

打個比方,我們有輪詢、權(quán)重、地址散列,地址散列又分為原ip地址散列hash、目標(biāo)ip地址散列hash,最少連接,加權(quán)最少連接,還有繼續(xù)升級的很多種策略......我們都來分析一下。

典型負(fù)載均衡策略分析

輪詢:優(yōu)點-實現(xiàn)簡單,缺點-不考慮每臺服務(wù)器處理能力

權(quán)重:優(yōu)點-考慮了服務(wù)器處理能力的不同

地址散列:優(yōu)點-能實現(xiàn)同一個用戶訪問同一個服務(wù)器

最少連接:優(yōu)點-使集群中各個服務(wù)器負(fù)載更加均勻

加權(quán)最少連接:在最少連接的基礎(chǔ)上,為每臺服務(wù)器加上權(quán)值。算法為(活動連接數(shù)*256+非活動連接數(shù))/權(quán)重,計算出來的值小的服務(wù)器優(yōu)先被選擇。

繼續(xù)引出問題的場景

我們登錄時登錄了A服務(wù)器,session信息存儲到A服務(wù)器上了,假設(shè)我們使用的負(fù)載均衡策略是ip hash,那么登錄信息還可以從A服務(wù)器上訪問,但這個有可能造成某些服務(wù)器壓力過大,某些服務(wù)器又沒有什么壓力,這時壓力過大的機器(包括網(wǎng)卡帶寬)有可能成為瓶頸,并且請求不夠分散。

這時候我們使用輪詢或者最小連接負(fù)載均衡策略,就導(dǎo)致了第一次訪問A服務(wù)器,第二次可能訪問到B服務(wù)器,這時存儲在A服務(wù)器上的session信息在B服務(wù)器上讀取不到。

打個比方,如果我們每次吃飯都要保證用的是自己的碗筷,只要我們在一家飯店里存著自己的碗筷,并且每次去這家飯店吃飯就好了。

對于同一個連接中的數(shù)據(jù)包,負(fù)載均衡會將其轉(zhuǎn)發(fā)至后端固定的服務(wù)器進行處理。

解決了我們session共享的問題,但是它有什么缺點呢?

一臺服務(wù)器運行的服務(wù)掛掉,或者重啟,上面的 session 都沒了。

負(fù)載均衡器成了有狀態(tài)的機器,為以后實現(xiàn)容災(zāi)造成了羈絆。

Session管理-Session 復(fù)制

就像我們在所有的飯店里都存一份自己的碗筷。這樣隨意去哪一家飯店吃飯都OK,不適合做大規(guī)模集群,適合機器不多的情況。

解決了我們session共享的問題,但是它有什么缺點呢?

應(yīng)用服務(wù)器間帶寬問題,因為需要不斷同步session數(shù)據(jù)。

大量用戶在線時,服務(wù)器占用內(nèi)存過多。

Session管理-基于Cookie

打個比方,就是我們的碗筷都存在了一個龐大的櫥柜里,我們?nèi)ト魏我患绎埖瓿燥垼伎梢詮臋还裰心玫綄儆谖覀冏约旱耐肟辍?/p>

解決了我們session共享的問題,這種方案需要思考哪些問題呢?

保證 session 服務(wù)器的可用性,session服務(wù)器單點如何解決?

我們在寫應(yīng)用時需要做調(diào)整存儲session的業(yè)務(wù)邏輯。

打個比方,為了提高session server的可用性,我們可以繼續(xù)給session server做集群。

五、中間總結(jié)

所以網(wǎng)站架構(gòu)在遇到某些指標(biāo)瓶頸、演進的過程中,都有哪些解決方案?它們都有什么優(yōu)缺點?業(yè)務(wù)功能上如何取舍?如何做出選擇?這個過程才是最重要的。

行業(yè)交流群:631783760

精品高防IP段:

58.82.211.*

58.82.219.*

58.82.225.*

58.82.245.*

58.82.250.*

103.37.235.*

103.49.210.1

103.49.212.1

103.59.42.*

154.223.79.*

202.60.230.*

202.60.231.*

202.60.228.*

202.60.233.*

202.60.235.*

202.60.236.*

202.60.241.*

臺灣高防

58.82.205.*

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容