distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messages(分布式系統(tǒng)是指位于網(wǎng)絡(luò)計(jì)算機(jī)" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷(xiāo)資訊 > 電子商務(wù) > 《大型分布式網(wǎng)站架構(gòu)實(shí)戰(zhàn)項(xiàng)目分析》

《大型分布式網(wǎng)站架構(gòu)實(shí)戰(zhàn)項(xiàng)目分析》

時(shí)間:2023-03-14 07:30:01 | 來(lái)源:電子商務(wù)

時(shí)間:2023-03-14 07:30:01 來(lái)源:電子商務(wù)

一、分布式系統(tǒng)是什么?

1、定義

distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messages(分布式系統(tǒng)是指位于網(wǎng)絡(luò)計(jì)算機(jī)的組件僅通過(guò)傳遞消息來(lái)通信和協(xié)調(diào)其行為的系統(tǒng)。)

所以,從這可以總結(jié)出這幾個(gè)重點(diǎn):

1、組件是分布在網(wǎng)絡(luò)計(jì)算機(jī)上
2、組件之間僅僅通過(guò)消息傳遞來(lái)通信并且協(xié)調(diào)工作

2、特性

2.1、副本

(Replica)是分布式系統(tǒng)最常見(jiàn)的概念之一,指分布式系統(tǒng)對(duì)數(shù)據(jù)和服務(wù)提供的一種冗余方式。在常見(jiàn)的分布式系統(tǒng)中,為了對(duì)外提供高可用的服務(wù),我們往往會(huì)對(duì)數(shù)據(jù)和服務(wù)進(jìn)行副本處理。

1)數(shù)據(jù)副本指在不同節(jié)點(diǎn)上持久同一份數(shù)據(jù),當(dāng)某一個(gè)節(jié)點(diǎn)上存儲(chǔ)的數(shù)據(jù)丟失時(shí),可以從副本上讀取到該數(shù)據(jù),這是解決分布式系統(tǒng)數(shù)據(jù)丟失問(wèn)題的有效手段。

2)服務(wù)副本指多個(gè)節(jié)點(diǎn)提供同樣的服務(wù),每個(gè)節(jié)點(diǎn)都有能力接受來(lái)自外部的請(qǐng)求并進(jìn)行相應(yīng)的處理。

2.2、并發(fā)性

在程序運(yùn)行過(guò)程中的并發(fā)性操作是非常常見(jiàn)的行為,例如同一個(gè)分布式系統(tǒng)中的多個(gè)節(jié)點(diǎn),可能會(huì)并發(fā)地操作一些共享的資源,如何準(zhǔn)確并高效的協(xié)調(diào)分布式并發(fā)操作也成為了分布式系統(tǒng)架構(gòu)與設(shè)計(jì)中最大的挑戰(zhàn)之一。

2.3、全局時(shí)鐘

分布式系統(tǒng)是有一系列在空間上隨意分布的多個(gè)進(jìn)程組成的,在這些進(jìn)程之間通過(guò)交換消息來(lái)進(jìn)行相互通信。因此,在分布式系統(tǒng)中,很難定義兩個(gè)事件究竟誰(shuí)先誰(shuí)后,原因就是分布式系統(tǒng)缺乏一個(gè)全局的時(shí)鐘序列控制。

2.4、故障總會(huì)發(fā)生

任何在設(shè)計(jì)階段考慮到的異常情況,一定會(huì)在系統(tǒng)實(shí)際運(yùn)行中發(fā)生,并且,在系統(tǒng)實(shí)際運(yùn)行過(guò)程中還會(huì)遇到很多在設(shè)計(jì)時(shí)未能考慮到的異常故障。所以,除非需求指標(biāo)允許,在系統(tǒng)設(shè)計(jì)時(shí)不能放過(guò)任何異常情況。

3、分布式環(huán)境的各種問(wèn)題

3.1、通信異常

網(wǎng)絡(luò)本身的不可靠性,各節(jié)點(diǎn)之間的網(wǎng)絡(luò)通信能夠正常進(jìn)行,其延時(shí)也會(huì)遠(yuǎn)大于單機(jī)操作。單機(jī)內(nèi)存訪問(wèn)的延時(shí)在納秒數(shù)量級(jí)(通常是10ns左右),而正常的一次網(wǎng)絡(luò)通信的延遲在0.1~1ms左右,巨大的延時(shí)差別,會(huì)影響消息的收發(fā)的過(guò)程,因此消息丟失和消息延遲變得非常普遍。

3.2、網(wǎng)絡(luò)分區(qū)

當(dāng)網(wǎng)絡(luò)由于發(fā)生異常情況,導(dǎo)致分布式系統(tǒng)中部分節(jié)點(diǎn)之間的網(wǎng)絡(luò)延時(shí)不斷增大,最終導(dǎo)致組成分布式系統(tǒng)的左右節(jié)點(diǎn)中,只有部分節(jié)點(diǎn)能夠進(jìn)行正常通信,而另一些節(jié)點(diǎn)則不能,這個(gè)現(xiàn)象成為網(wǎng)絡(luò)分區(qū),俗稱(chēng)“鬧裂”。當(dāng)網(wǎng)絡(luò)分區(qū)出現(xiàn)時(shí),分布式系統(tǒng)就出現(xiàn)局部小集群,在極端情況下,這些小集群會(huì)獨(dú)立完成原本需要整個(gè)分布式系統(tǒng)才能完成的功能,包括對(duì)數(shù)據(jù)的事務(wù)處理,這對(duì)分布式一致性提出了非常大的挑戰(zhàn)。

3.3、三態(tài)

在分布式環(huán)境下,網(wǎng)絡(luò)可能出現(xiàn)各式各樣的問(wèn)題,因此分布式系統(tǒng)的每一次請(qǐng)求與響應(yīng),存在特有的三態(tài)概念,即成功、失敗與超時(shí)。超時(shí)現(xiàn)象通常有一下兩種情況:

1)由于網(wǎng)絡(luò)原因,該請(qǐng)求(消息)并沒(méi)有被成功發(fā)送到接收方,而是在發(fā)送過(guò)程就發(fā)生了消息丟失現(xiàn)象。

2)該請(qǐng)求(消息)成功的被接收方接受后,并進(jìn)行了處理,但是在將響應(yīng)反饋給發(fā)送方的過(guò)程中,發(fā)生了消息丟失現(xiàn)象。

當(dāng)出現(xiàn)這樣的超時(shí)現(xiàn)象時(shí),網(wǎng)絡(luò)通信的發(fā)起方是無(wú)法確定當(dāng)前請(qǐng)求是否被成功處理的。

3.4、節(jié)點(diǎn)故障

分布式系統(tǒng)下比較常見(jiàn)的問(wèn)題,指組成分布式系統(tǒng)的服務(wù)器節(jié)點(diǎn)出現(xiàn)宕機(jī)或僵死現(xiàn)象。

二、怎么去定義大型網(wǎng)站

滿足一個(gè)大型網(wǎng)站的基本因素:

三、大型網(wǎng)站常用到的技術(shù)框架

初始階段的網(wǎng)站架構(gòu)

一般來(lái)講,大型網(wǎng)站都是從小型網(wǎng)站發(fā)展而來(lái),一開(kāi)始的架構(gòu)都比較簡(jiǎn)單,隨著業(yè)務(wù)復(fù)雜和用戶量的激增,才開(kāi)始做很多架構(gòu)上的改進(jìn)。當(dāng)它還是小型網(wǎng)站的時(shí)候,沒(méi)有太多訪客,一般來(lái)講只需要一臺(tái)服務(wù)器就夠了,這時(shí)應(yīng)用程序、數(shù)據(jù)庫(kù)、文件等所有資源都在一臺(tái)服務(wù)器上,網(wǎng)站架構(gòu)如下圖所示:

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

隨著網(wǎng)站業(yè)務(wù)的發(fā)展和用戶量的增加,一臺(tái)服務(wù)器就無(wú)法再滿足需求了。大量用戶訪問(wèn)導(dǎo)致訪問(wèn)速度越來(lái)越慢,而逐漸增加的數(shù)據(jù)也會(huì)導(dǎo)致存儲(chǔ)空間不足。這時(shí)就需要將應(yīng)用和數(shù)據(jù)分離,應(yīng)用和數(shù)據(jù)分離后整個(gè)網(wǎng)站使用 3 臺(tái)服務(wù)器:應(yīng)用服務(wù)器、文件服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器。這 3 臺(tái)服務(wù)器對(duì)硬件資源的要求各不相同:

此時(shí),網(wǎng)站系統(tǒng)的架構(gòu)如下圖所示:

使用緩存改善網(wǎng)站性能

隨著用戶再增加,網(wǎng)站又會(huì)一次面臨挑戰(zhàn):數(shù)據(jù)庫(kù)壓力太大導(dǎo)致整站訪問(wèn)效率再此下降,用戶體驗(yàn)受到影響。一個(gè)網(wǎng)站,往往 80% 的業(yè)務(wù)訪問(wèn)集中在 20% 的數(shù)據(jù)上,比如微博請(qǐng)求量最多的肯定是那些千萬(wàn)級(jí)粉絲的大 V 的微博,而幾乎沒(méi)有人關(guān)注的你的首頁(yè),除了自己想起來(lái)之外根本不會(huì)被打開(kāi)。既然大部分業(yè)務(wù)訪問(wèn)集中在一小部分?jǐn)?shù)據(jù)上,那就把這一小部分?jǐn)?shù)據(jù)先提前緩存在內(nèi)存中,而不是每次都去數(shù)據(jù)庫(kù)讀取,這樣就可以減少數(shù)據(jù)庫(kù)的訪問(wèn)壓力,從而提高整個(gè)網(wǎng)站的訪問(wèn)速度。

網(wǎng)站使用的緩存一般分為緩存到應(yīng)用服務(wù)器或者緩存在專(zhuān)門(mén)的分布式緩存服務(wù)器。緩存到應(yīng)用服務(wù)器自己的訪問(wèn)速度快很多,但是受自身內(nèi)存限制,往往不太適用。遠(yuǎn)程分布式緩存使用一個(gè)集群專(zhuān)門(mén)負(fù)責(zé)緩存服務(wù),當(dāng)內(nèi)存不夠還可以輕松得動(dòng)態(tài)擴(kuò)容。

使用應(yīng)用服務(wù)器集群改善網(wǎng)站的并發(fā)處理能力

使用緩存后,數(shù)據(jù)訪問(wèn)壓力得到了緩解,但是單一應(yīng)用服務(wù)器能夠處理的請(qǐng)求連接有限,在網(wǎng)站訪問(wèn)高峰期,應(yīng)用服務(wù)器就成了整個(gè)網(wǎng)站的效率瓶頸。使用分布式集群是網(wǎng)站解決高并發(fā)、海量數(shù)據(jù)問(wèn)題的常用手段。當(dāng)一臺(tái)服務(wù)器的處理能力和存儲(chǔ)空間不足時(shí),不要嘗試去更換更強(qiáng)大的服務(wù)器,對(duì)大型網(wǎng)站而言,多么強(qiáng)大的服務(wù)器,都滿足不了網(wǎng)站持續(xù)增長(zhǎng)的業(yè)務(wù)需求。這種情況下,更恰當(dāng)?shù)淖龇ㄊ窃黾右慌_(tái)服務(wù)器分擔(dān)原有服務(wù)器的訪問(wèn)及存儲(chǔ)壓力。 對(duì)網(wǎng)站架構(gòu)而言,只要能通過(guò)增加一臺(tái)服務(wù)器的方式改善負(fù)載壓力,就可以以同樣的方式持續(xù)增加服務(wù)器不斷改善系統(tǒng)性能,從而實(shí)現(xiàn)系統(tǒng)的可伸縮性。應(yīng)用服務(wù)器實(shí)現(xiàn)集群是網(wǎng)站可伸縮架構(gòu)設(shè)計(jì)中較為簡(jiǎn)單成熟的一種,如下圖所示:

通過(guò)負(fù)載均衡調(diào)度服務(wù)器,可以將來(lái)自用戶瀏覽器的訪問(wèn)請(qǐng)求分發(fā)到應(yīng)用服務(wù)器集群中的任何一臺(tái)服務(wù)器上,如果有更多用戶,就在集群中加入更多的應(yīng)用服務(wù)器,使應(yīng)用服務(wù)器的壓力不再成為整個(gè)網(wǎng)站的瓶頸。

數(shù)據(jù)庫(kù)讀寫(xiě)分離

網(wǎng)站在使用緩存后,使對(duì)大部分?jǐn)?shù)據(jù)讀操作訪問(wèn)都可以不通過(guò)數(shù)據(jù)庫(kù)就能完成,但是仍有一部分讀操作(緩存訪問(wèn)不命中、緩存過(guò)期)和全部的寫(xiě)操作都需要訪問(wèn)數(shù)據(jù)庫(kù),在網(wǎng)站的用戶達(dá)到一定規(guī)模后,數(shù)據(jù)庫(kù)因?yàn)樨?fù)載壓力過(guò)高而成為網(wǎng)站的瓶頸。 目前大部分的主流數(shù)據(jù)庫(kù)都提供主從熱備功能,通過(guò)配置兩臺(tái)數(shù)據(jù)庫(kù)主從關(guān)系,可以將一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器的數(shù)據(jù)更新同步到另一臺(tái)服務(wù)器上。網(wǎng)站利用數(shù)據(jù)庫(kù)的這一功能,實(shí)現(xiàn)數(shù)據(jù)庫(kù)讀寫(xiě)分離,從而改善數(shù)據(jù)庫(kù)負(fù)載壓力。如下圖所示:

應(yīng)用服務(wù)器在寫(xiě)數(shù)據(jù)的時(shí)候,訪問(wèn)主數(shù)據(jù)庫(kù),主數(shù)據(jù)庫(kù)通過(guò)主從復(fù)制機(jī)制將數(shù)據(jù)更新同步到從數(shù)據(jù)庫(kù),這樣當(dāng)應(yīng)用服務(wù)器讀數(shù)據(jù)的時(shí)候,就可以通過(guò)從數(shù)據(jù)庫(kù)獲得數(shù)據(jù)。為了便于應(yīng)用程序訪問(wèn)讀寫(xiě)分離后的數(shù)據(jù)庫(kù),通常在應(yīng)用服務(wù)器端使用專(zhuān)門(mén)的數(shù)據(jù)訪問(wèn)模塊,使數(shù)據(jù)庫(kù)讀寫(xiě)分離對(duì)應(yīng)用透明。

使用反向代理和 CDN 加速網(wǎng)站響應(yīng)

隨著網(wǎng)站業(yè)務(wù)不斷發(fā)展,用戶規(guī)模越來(lái)越大,由于中國(guó)復(fù)雜的網(wǎng)絡(luò)環(huán)境,不同地區(qū)的用戶訪問(wèn)網(wǎng)站時(shí),速度差別也極大。有研究表明,網(wǎng)站訪問(wèn)延遲和用戶流失率正相關(guān),網(wǎng)站訪問(wèn)越慢,用戶越容易失去耐心而離開(kāi)。為了提供更好的用戶體驗(yàn),留住用戶,網(wǎng)站需要加速網(wǎng)站訪問(wèn)速度。主要手段有使用 CDN 和反向代理。如下圖所示:

使用分布式文件系統(tǒng)和分布式數(shù)據(jù)庫(kù)系統(tǒng)

任何強(qiáng)大的單一服務(wù)器都滿足不了大型網(wǎng)站持續(xù)增長(zhǎng)的業(yè)務(wù)需求。數(shù)據(jù)庫(kù)經(jīng)過(guò)讀寫(xiě)分離后,從一臺(tái)服務(wù)器拆分成兩臺(tái)服務(wù)器,但是隨著網(wǎng)站業(yè)務(wù)的發(fā)展依然不能滿足需求,這時(shí)需要使用分布式數(shù)據(jù)庫(kù)。文件系統(tǒng)也一樣,需要使用分布式文件系統(tǒng)。如下圖所示:

分布式數(shù)據(jù)庫(kù)是網(wǎng)站數(shù)據(jù)庫(kù)拆分的最后手段,只有在單表數(shù)據(jù)規(guī)模非常龐大的時(shí)候才使用。不到不得已時(shí),網(wǎng)站更常用的數(shù)據(jù)庫(kù)拆分手段是業(yè)務(wù)分庫(kù),將不同業(yè)務(wù)的數(shù)據(jù)部署在不同的物理服務(wù)器上。

使用 NoSQL 和搜索引擎

隨著網(wǎng)站業(yè)務(wù)越來(lái)越復(fù)雜,對(duì)數(shù)據(jù)存儲(chǔ)和檢索的需求也越來(lái)越復(fù)雜,網(wǎng)站需要采用一些非關(guān)系數(shù)據(jù)庫(kù)技術(shù)如 NoSQL 和非數(shù)據(jù)庫(kù)查詢技術(shù)如搜索引擎。如下圖所示:

NoSQL 和搜索引擎都是源自互聯(lián)網(wǎng)的技術(shù)手段,對(duì)可伸縮的分布式特性具有更好的支持。應(yīng)用服務(wù)器則通過(guò)一個(gè)統(tǒng)一數(shù)據(jù)訪問(wèn)模塊訪問(wèn)各種數(shù)據(jù),減輕應(yīng)用程序管理諸多數(shù)據(jù)源的麻煩。

業(yè)務(wù)拆分

大型網(wǎng)站為了應(yīng)對(duì)日益復(fù)雜的業(yè)務(wù)場(chǎng)景,通過(guò)使用分而治之的手段將整個(gè)網(wǎng)站業(yè)務(wù)分成不同的產(chǎn)品線。如大型購(gòu)物交易網(wǎng)站都會(huì)將首頁(yè)、商鋪、訂單、買(mǎi)家、賣(mài)家等拆分成不同的產(chǎn)品線,分歸不同的業(yè)務(wù)團(tuán)隊(duì)負(fù)責(zé)。

具體到技術(shù)上,也會(huì)根據(jù)產(chǎn)品線劃分,將一個(gè)網(wǎng)站拆分成許多不同的應(yīng)用,每個(gè)應(yīng)用獨(dú)立部署。應(yīng)用之間可以通過(guò)一個(gè)超鏈接建立關(guān)系(在首頁(yè)上的導(dǎo)航鏈接每個(gè)都指向不同的應(yīng)用地址),也可以通過(guò)消息隊(duì)列進(jìn)行數(shù)據(jù)分發(fā),當(dāng)然最多的還是通過(guò)訪問(wèn)同一個(gè)數(shù)據(jù)存儲(chǔ)系統(tǒng)來(lái)構(gòu)成一個(gè)關(guān)聯(lián)的完整系統(tǒng),如下圖所示:

分布式服務(wù)

隨著業(yè)務(wù)拆分越來(lái)越小,存儲(chǔ)系統(tǒng)越來(lái)越龐大,應(yīng)用系統(tǒng)的整體復(fù)雜度呈指數(shù)級(jí)增加,部署維護(hù)越來(lái)越困難。由于所有應(yīng)用要和所有數(shù)據(jù)庫(kù)系統(tǒng)連接,在數(shù)萬(wàn)臺(tái)服務(wù)器規(guī)模的網(wǎng)站中,這些連接的數(shù)目是服務(wù)器規(guī)模的平方,導(dǎo)致數(shù)據(jù)庫(kù)連接資源不足,拒絕服務(wù)。

既然每一個(gè)應(yīng)用系統(tǒng)都需要執(zhí)行許多相同的業(yè)務(wù)操作,比如用戶管理、商品管理等,那么可以將這些共用的業(yè)務(wù)提取出來(lái),獨(dú)立部署。由這些可復(fù)用的業(yè)務(wù)連接數(shù)據(jù)庫(kù),提供共用業(yè)務(wù)服務(wù),而應(yīng)用系統(tǒng)只需要管理用戶界面,通過(guò)分布式服務(wù)調(diào)用共用業(yè)務(wù)服務(wù)完成具體業(yè)務(wù)操作。如下圖所示:

四、電商網(wǎng)站架構(gòu)案例

1、電商案例的原因

分布式大型網(wǎng)站,目前看主要有幾類(lèi)1.大型門(mén)戶,比如網(wǎng)易,新浪等;2.SNS網(wǎng)站,比如校內(nèi),開(kāi)心網(wǎng)等;3.電商網(wǎng)站:比如阿里巴巴,京東商城,國(guó)美在線,汽車(chē)之家等。大型門(mén)戶一般是新聞?lì)愋畔?,可以使用CDN,靜態(tài)化等方式優(yōu)化,開(kāi)心網(wǎng)等交互性比較多,可能會(huì)引入更多的NOSQL,分布式緩存,使用高性能的通信框架等。電商網(wǎng)站具備以上兩類(lèi)的特點(diǎn),比如產(chǎn)品詳情可以采用CDN,靜態(tài)化,交互性高的需要采用NOSQL等技術(shù)。因此,我們采用電商網(wǎng)站作為案例,進(jìn)行分析。

2、電商網(wǎng)站需求

客戶需求:

客戶就是客戶,不會(huì)告訴你具體要什么,只會(huì)告訴你他想要什么,我們很多時(shí)候要引導(dǎo),挖掘客戶的需求。好在提供了明確的參考網(wǎng)站。因此,下一步要進(jìn)行大量的分析,結(jié)合行業(yè),以及參考網(wǎng)站,給客戶提供方案。

其他的略

~

需求功能矩陣

需求管理傳統(tǒng)的做法,會(huì)使用用例圖或模塊圖(需求列表)進(jìn)行需求的描述。這樣做常常忽視掉一個(gè)很重要的需求(非功能需求),因此推薦大家使用需求功能矩陣,進(jìn)行需求描述。

本電商網(wǎng)站的需求矩陣如下:

以上是對(duì)電商網(wǎng)站需求的簡(jiǎn)單舉例,目的是說(shuō)明(1)需求分析的時(shí)候,要全面,大型分布式系統(tǒng)重點(diǎn)考慮非功能需求;(2)描述一個(gè)簡(jiǎn)單的電商需求場(chǎng)景,使大家對(duì)下一步的分析設(shè)計(jì)有個(gè)依據(jù)。

3、網(wǎng)站初級(jí)架構(gòu)

一般網(wǎng)站,剛開(kāi)始的做法,是三臺(tái)服務(wù)器,一臺(tái)部署應(yīng)用,一臺(tái)部署數(shù)據(jù)庫(kù),一臺(tái)部署NFS文件系統(tǒng)。

這是前幾年比較傳統(tǒng)的做法,之前見(jiàn)到一個(gè)網(wǎng)站10萬(wàn)多會(huì)員,垂直服裝設(shè)計(jì)門(mén)戶,N多圖片。使用了一臺(tái)服務(wù)器部署了應(yīng)用,數(shù)據(jù)庫(kù)以及圖片存儲(chǔ)。出現(xiàn)了很多性能問(wèn)題。

如下圖:

但是,目前主流的網(wǎng)站架構(gòu)已經(jīng)發(fā)生了翻天覆地的變化。一般都會(huì)采用集群的方式,進(jìn)行高可用設(shè)計(jì)。至少是下面這個(gè)樣子。

使用集群對(duì)應(yīng)用服務(wù)器進(jìn)行冗余,實(shí)現(xiàn)高可用;(負(fù)載均衡設(shè)備可與應(yīng)用一塊部署)使用數(shù)據(jù)庫(kù)主備模式,實(shí)現(xiàn)數(shù)據(jù)備份和高可用;

4、系統(tǒng)容量預(yù)估

預(yù)估步驟:

(1) 注冊(cè)用戶數(shù)-日均UV量-每日的PV量-每天的并發(fā)量;

(2) 峰值預(yù)估:平常量的2~3倍;

(3) 根據(jù)并發(fā)量(并發(fā),事務(wù)數(shù)),存儲(chǔ)容量計(jì)算系統(tǒng)容量。

(4 ) 客戶需求:3~5年用戶數(shù)達(dá)到1000萬(wàn)注冊(cè)用戶;

每秒并發(fā)數(shù)預(yù)估:

(1) 每天的UV為200萬(wàn)(二八原則);

(2) 每日每天點(diǎn)擊瀏覽30次;

(3) PV量:200*30=6000萬(wàn);

(4) 集中訪問(wèn)量:24

0.2=4.8小時(shí)會(huì)有6000萬(wàn)

0.8=4800萬(wàn)(二八原則);

(5) 每分并發(fā)量:4.8*60=288分鐘,每分鐘訪問(wèn)4800/288=16.7萬(wàn)(約等于);

(6) 每秒并發(fā)量:16.7萬(wàn)/60=2780(約等于);

(7) 假設(shè):高峰期為平常值的三倍,則每秒的并發(fā)數(shù)可以達(dá)到8340次。

(8) 1毫秒=1.3次訪問(wèn);

服務(wù)器預(yù)估:(以tomcat服務(wù)器舉例)

(1) 按一臺(tái)web服務(wù)器,支持每秒300個(gè)并發(fā)計(jì)算。平常需要10臺(tái)服務(wù)器(約等于);[tomcat默認(rèn)配置是150]

(2) 高峰期:需要30臺(tái)服務(wù)器;

容量預(yù)估:70/90原則

系統(tǒng)CPU一般維持在70%左右的水平,高峰期達(dá)到90%的水平,是不浪費(fèi)資源,并比較穩(wěn)定的。內(nèi)存,IO類(lèi)似。

以上預(yù)估僅供參考,因?yàn)榉?wù)器配置,業(yè)務(wù)邏輯復(fù)雜度等都有影響。在此CPU,硬盤(pán),網(wǎng)絡(luò)等不再進(jìn)行評(píng)估。

電網(wǎng)網(wǎng)站架構(gòu)案例系列的第二篇文章。主要講解網(wǎng)站架構(gòu)分析,網(wǎng)站架構(gòu)優(yōu)化,業(yè)務(wù)拆分,應(yīng)用集群架構(gòu),多級(jí)緩存,分布式Session。

5、網(wǎng)站架構(gòu)分析

根據(jù)以上預(yù)估,有幾個(gè)問(wèn)題:

大型網(wǎng)站一般需要做以下架構(gòu)優(yōu)化(優(yōu)化是架構(gòu)設(shè)計(jì)時(shí),就要考慮的,一般從架構(gòu)/代碼級(jí)別解決,調(diào)優(yōu)主要是簡(jiǎn)單參數(shù)的調(diào)整,比如JVM調(diào)優(yōu);如果調(diào)優(yōu)涉及大量代碼改造,就不是調(diào)優(yōu)了,屬于重構(gòu)):

五、網(wǎng)站架構(gòu)優(yōu)化

1、業(yè)務(wù)拆分

根據(jù)業(yè)務(wù)屬性進(jìn)行垂直切分,劃分為產(chǎn)品子系統(tǒng),購(gòu)物子系統(tǒng),支付子系統(tǒng),評(píng)論子系統(tǒng),客服子系統(tǒng),接口子系統(tǒng)(對(duì)接如進(jìn)銷(xiāo)存,短信等外部系統(tǒng))。

根據(jù)業(yè)務(wù)子系統(tǒng)進(jìn)行等級(jí)定義,可分為核心系統(tǒng)和非核心系統(tǒng)。核心系統(tǒng):產(chǎn)品子系統(tǒng),購(gòu)物子系統(tǒng),支付子系統(tǒng);非核心:評(píng)論子系統(tǒng),客服子系統(tǒng),接口子系統(tǒng)。

業(yè)務(wù)拆分作用:提升為子系統(tǒng)可由專(zhuān)門(mén)的團(tuán)隊(duì)和部門(mén)負(fù)責(zé),專(zhuān)業(yè)的人做專(zhuān)業(yè)的事,解決模塊之間耦合以及擴(kuò)展性問(wèn)題;每個(gè)子系統(tǒng)單獨(dú)部署,避免集中部署導(dǎo)致一個(gè)應(yīng)用掛了,全部應(yīng)用不可用的問(wèn)題。

等級(jí)定義作用:用于流量突發(fā)時(shí),對(duì)關(guān)鍵應(yīng)用進(jìn)行保護(hù),實(shí)現(xiàn)優(yōu)雅降級(jí);保護(hù)關(guān)鍵應(yīng)用不受到影響。

拆分后的架構(gòu)圖:

參考部署方案2

2、應(yīng)用集群部署(分布式,集群,負(fù)載均衡)

集群部署后架構(gòu)圖:

3、 多級(jí)緩存

緩存按照存放的位置一般可分為兩類(lèi)本地緩存和分布式緩存。本案例采用二級(jí)緩存的方式,進(jìn)行緩存的設(shè)計(jì)。一級(jí)緩存為本地緩存,二級(jí)緩存為分布式緩存。(還有頁(yè)面緩存,片段緩存等,那是更細(xì)粒度的劃分)

一級(jí)緩存,緩存數(shù)據(jù)字典,和常用熱點(diǎn)數(shù)據(jù)等基本不可變/有規(guī)則變化的信息,二級(jí)緩存緩存需要的所有緩存。當(dāng)一級(jí)緩存過(guò)期或不可用時(shí),訪問(wèn)二級(jí)緩存的數(shù)據(jù)。如果二級(jí)緩存也沒(méi)有,則訪問(wèn)數(shù)據(jù)庫(kù)。

緩存的比例,一般1:4,即可考慮使用緩存。(理論上是1:2即可)。

根據(jù)業(yè)務(wù)特性可使用以下緩存過(guò)期策略:

(1) 緩存自動(dòng)過(guò)期;

(2) 緩存觸發(fā)過(guò)期;

4、單點(diǎn)登錄(分布式Session)

系統(tǒng)分割為多個(gè)子系統(tǒng),獨(dú)立部署后,不可避免的會(huì)遇到會(huì)話管理的問(wèn)題。一般可采用Session同步,Cookies,分布式Session方式。電商網(wǎng)站一般采用分布式Session實(shí)現(xiàn)。

再進(jìn)一步可以根據(jù)分布式Session,建立完善的單點(diǎn)登錄或賬戶管理系統(tǒng)。

流程說(shuō)明

1) 用戶第一次登錄時(shí),將會(huì)話信息(用戶Id和用戶信息),比如以用戶Id為Key,寫(xiě)入分布式Session;

(2) 用戶再次登錄時(shí),獲取分布式Session,是否有會(huì)話信息,如果沒(méi)有則調(diào)到登錄頁(yè);

(3) 一般采用Cache中間件實(shí)現(xiàn),建議使用Redis,因此它有持久化功能,方便分布式Session宕機(jī)后,可以從持久化存儲(chǔ)中加載會(huì)話信息;

(4) 存入會(huì)話時(shí),可以設(shè)置會(huì)話保持的時(shí)間,比如15分鐘,超過(guò)后自動(dòng)超時(shí);

結(jié)合Cache中間件,實(shí)現(xiàn)的分布式Session,可以很好的模擬Session會(huì)話。

5、數(shù)據(jù)庫(kù)集群(讀寫(xiě)分離,分庫(kù)分表)

大型網(wǎng)站需要存儲(chǔ)海量的數(shù)據(jù),為達(dá)到海量數(shù)據(jù)存儲(chǔ),高可用,高性能一般采用冗余的方式進(jìn)行系統(tǒng)設(shè)計(jì)。一般有兩種方式讀寫(xiě)分離和分庫(kù)分表。

讀寫(xiě)分離:一般解決讀比例遠(yuǎn)大于寫(xiě)比例的場(chǎng)景,可采用一主一備,一主多備或多主多備方式。

本案例在業(yè)務(wù)拆分的基礎(chǔ)上,結(jié)合分庫(kù)分表和讀寫(xiě)分離。如下圖:

(1) 業(yè)務(wù)拆分后:每個(gè)子系統(tǒng)需要單獨(dú)的庫(kù);

(2) 如果單獨(dú)的庫(kù)太大,可以根據(jù)業(yè)務(wù)特性,進(jìn)行再次分庫(kù),比如商品分類(lèi)庫(kù),產(chǎn)品庫(kù);

(3) 分庫(kù)后,如果表中有數(shù)據(jù)量很大的,則進(jìn)行分表,一般可以按照Id,時(shí)間等進(jìn)行分表;(高級(jí)的用法是一致性Hash)

(4) 在分庫(kù),分表的基礎(chǔ)上,進(jìn)行讀寫(xiě)分離;

相關(guān)中間件可參考Cobar(阿里,目前已不在維護(hù)),TDDL(阿里),Atlas(奇虎360),MyCat(在Cobar基礎(chǔ)上,國(guó)內(nèi)很多牛人,號(hào)稱(chēng)國(guó)內(nèi)第一開(kāi)源項(xiàng)目)。

分庫(kù)分表后序列的問(wèn)題,JOIN,事務(wù)的問(wèn)題,會(huì)在分庫(kù)分表主題分享中,介紹。

6、服務(wù)化

將多個(gè)子系統(tǒng)公用的功能/模塊,進(jìn)行抽取,作為公用服務(wù)使用。比如本案例的會(huì)員子系統(tǒng)就可以抽取為公用的服務(wù)。

7、消息隊(duì)列

消息隊(duì)列可以解決子系統(tǒng)/模塊之間的耦合,實(shí)現(xiàn)異步,高可用,高性能的系統(tǒng)。是分布式系統(tǒng)的標(biāo)準(zhǔn)配置。本案例中,消息隊(duì)列主要應(yīng)用在購(gòu)物,配送環(huán)節(jié)。

(1) 用戶下單后,寫(xiě)入消息隊(duì)列,后直接返回客戶端;

(2) 庫(kù)存子系統(tǒng):讀取消息隊(duì)列信息,完成減庫(kù)存;

(3) 配送子系統(tǒng):讀取消息隊(duì)列信息,進(jìn)行配送;

目前使用較多的MQ有Active MQ,Rabbit MQ,Zero MQ,MS MQ等,需要根據(jù)具體的業(yè)務(wù)場(chǎng)景進(jìn)行選擇。建議可以研究下Rabbit MQ。

8、其他架構(gòu)(技術(shù))

除了以上介紹的業(yè)務(wù)拆分,應(yīng)用集群,多級(jí)緩存,單點(diǎn)登錄,數(shù)據(jù)庫(kù)集群,服務(wù)化,消息隊(duì)列外。還有CDN,反向代理,分布式文件系統(tǒng),大數(shù)據(jù)處理等系統(tǒng)。

六、架構(gòu)總結(jié)



以上是本次分享的架構(gòu)總結(jié),其中細(xì)節(jié)可參考前面分享的內(nèi)容。其中還有很多可以優(yōu)化和細(xì)化的地方,因?yàn)槭前咐窒恚饕槍?duì)重要部分做了介紹,工作中需要大家根據(jù)具體的業(yè)務(wù)場(chǎng)景進(jìn)行架構(gòu)設(shè)計(jì)。

關(guān)鍵詞:實(shí)戰(zhàn),項(xiàng)目,分析,分布,大型

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉