中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

構(gòu)建高并發(fā)高可用的電商平臺(tái)架構(gòu)實(shí)踐(一)——設(shè)計(jì)理念

2018-07-20    來(lái)源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

空間換時(shí)間

多級(jí)緩存,靜態(tài)化

客戶端頁(yè)面緩存(http header中包含Expires/Cache of Control,last modified(304,server不返回body,客戶端可以繼續(xù)用cache,減少流量),ETag)

反向代理緩存

應(yīng)用端的緩存(memcache)

內(nèi)存數(shù)據(jù)庫(kù)

Buffer、cache機(jī)制(數(shù)據(jù)庫(kù),中間件等)

索引

哈希、B樹(shù)、倒排、bitmap

哈希索引適合綜合數(shù)組的尋址和鏈表的插入特性,可以實(shí)現(xiàn)數(shù)據(jù)的快速存取。

B樹(shù)索引適合于查詢?yōu)橹鲗?dǎo)的場(chǎng)景,避免多次的IO,提高查詢的效率。

倒排索引實(shí)現(xiàn)單詞到文檔映射關(guān)系的最佳實(shí)現(xiàn)方式和最有效的索引結(jié)構(gòu),廣泛用在搜索領(lǐng)域。

Bitmap是一種非常簡(jiǎn)潔快速的數(shù)據(jù)結(jié)構(gòu),他能同時(shí)使存儲(chǔ)空間和速度最優(yōu)化(而不必空間換時(shí)間),適合于海量數(shù)據(jù)的的計(jì)算場(chǎng)景。

并行與分布式計(jì)算

任務(wù)切分、分而治之(MR)

在大規(guī)模的數(shù)據(jù)中,數(shù)據(jù)存在一定的局部性的特征,利用局部性的原理將海量數(shù)據(jù)計(jì)算的問(wèn)題分而治之。

MR模型是無(wú)共享的架構(gòu),數(shù)據(jù)集分布至各個(gè)節(jié)點(diǎn)。處理時(shí),每個(gè)節(jié)點(diǎn)就近讀取本地存儲(chǔ)的數(shù)據(jù)處理(map),將處理后的數(shù)據(jù)進(jìn)行合并(combine)、排序(shuffle and sort)后再分發(fā)(至reduce節(jié)點(diǎn)),避免了大量數(shù)據(jù)的傳輸,提高了處理效率。

多進(jìn)程、多線程并行執(zhí)行(MPP)

并行計(jì)算(Parallel Computing)是指同時(shí)使用多種計(jì)算資源解決計(jì)算問(wèn)題的過(guò)程,是提高計(jì)算機(jī)系統(tǒng)計(jì)算速度和處理能力的一種有效手段。它的基本思想是用多個(gè)處理器/進(jìn)程/線程來(lái)協(xié)同求解同一問(wèn)題,即將被求解的問(wèn)題分解成若干個(gè)部分,各部分均由一個(gè)獨(dú)立的處理機(jī)來(lái)并行計(jì)算。

和MR的區(qū)別在于,它是基于問(wèn)題分解的,而不是基于數(shù)據(jù)分解。

多維度的可用

負(fù)載均衡、容災(zāi)、備份

隨著平臺(tái)并發(fā)量的增大,需要擴(kuò)容節(jié)點(diǎn)進(jìn)行集群,利用負(fù)載均衡設(shè)備進(jìn)行請(qǐng)求的分發(fā);負(fù)載均衡設(shè)備通常在提供負(fù)載均衡的同時(shí),也提供失效檢測(cè)功能;同時(shí)為了提高可用性,需要有容災(zāi)備份,以防止節(jié)點(diǎn)宕機(jī)失效帶來(lái)的不可用問(wèn)題;備份有在線的和離線備份,可以根據(jù)失效性要求的不同,進(jìn)行選擇不同的備份策略。

讀寫分離

讀寫分離是對(duì)數(shù)據(jù)庫(kù)來(lái)講的,隨著系統(tǒng)并發(fā)量的增大,提高數(shù)據(jù)訪問(wèn)可用性的一個(gè)重要手段就是寫數(shù)據(jù)和讀數(shù)據(jù)進(jìn)行分離;當(dāng)然在讀寫分離的同時(shí),需要關(guān)注數(shù)據(jù)的一致性問(wèn)題;對(duì)于一致性的問(wèn)題,在分布式的系統(tǒng)CAP定量中,更多的關(guān)注于可用性。

依賴關(guān)系

平臺(tái)中各個(gè)模塊之間的關(guān)系盡量是低耦合的,可以通過(guò)相關(guān)的消息組件進(jìn)行交互,能異步則異步,分清楚數(shù)據(jù)流轉(zhuǎn)的主流程和副流程,主副是異步的,比如記錄日志可以是異步操作的,增加整個(gè)系統(tǒng)的可用性。

當(dāng)然在異步處理中,為了確保數(shù)據(jù)得到接收或者處理,往往需要確認(rèn)機(jī)制(confirm、ack)。

但是有些場(chǎng)景中,雖然請(qǐng)求已經(jīng)得到處理,但是因其他原因(比如網(wǎng)絡(luò)不穩(wěn)定),確認(rèn)消息沒(méi)有返回,那么這種情況下需要進(jìn)行請(qǐng)求的重發(fā),對(duì)請(qǐng)求的處理設(shè)計(jì)因重發(fā)因素需要考慮冪等性。

監(jiān)控

監(jiān)控也是提高整個(gè)平臺(tái)可用性的一個(gè)重要手段,多平臺(tái)進(jìn)行多個(gè)維度的監(jiān)控;模塊在運(yùn)行時(shí)候是透明的,以達(dá)到運(yùn)行期白盒化。

伸縮

拆分

拆分包括對(duì)業(yè)務(wù)的拆分和對(duì)數(shù)據(jù)庫(kù)的拆分。

系統(tǒng)的資源總是有限的,一段比較長(zhǎng)的業(yè)務(wù)執(zhí)行如果是一竿子執(zhí)行的方式,在大量并發(fā)的操作下,這種阻塞的方式,無(wú)法有效的及時(shí)釋放資源給其他進(jìn)程執(zhí)行,這樣系統(tǒng)的吞吐量不高。

需要把業(yè)務(wù)進(jìn)行邏輯的分段,采用異步非阻塞的方式,提高系統(tǒng)的吞吐量。

隨著數(shù)據(jù)量和并發(fā)量的增加,讀寫分離不能滿足系統(tǒng)并發(fā)性能的要求,需要對(duì)數(shù)據(jù)進(jìn)行切分,包括對(duì)數(shù)據(jù)進(jìn)行分庫(kù)和分表。這種分庫(kù)分表的方式,需要增加對(duì)數(shù)據(jù)的路由邏輯支持。

無(wú)狀態(tài)

對(duì)于系統(tǒng)的伸縮性而言,模塊最好是無(wú)狀態(tài)的,通過(guò)增加節(jié)點(diǎn)就可以提高整個(gè)的吞吐量。

優(yōu)化資源利用

系統(tǒng)容量有限

系統(tǒng)的容量是有限的,承受的并發(fā)量也是有限的,在架構(gòu)設(shè)計(jì)時(shí),一定需要考慮流量的控制,防止因意外攻擊或者瞬時(shí)并發(fā)量的沖擊導(dǎo)致系統(tǒng)崩潰。在設(shè)計(jì)時(shí)增加流控的措施,可考慮對(duì)請(qǐng)求進(jìn)行排隊(duì),超出預(yù)期的范圍,可以進(jìn)行告警或者丟棄。

原子操作與并發(fā)控制

對(duì)于共享資源的訪問(wèn),為了防止沖突,需要進(jìn)行并發(fā)的控制,同時(shí)有些交易需要有事務(wù)性來(lái)保證交易的一致性,所以在交易系統(tǒng)的設(shè)計(jì)時(shí),需考慮原子操作和并發(fā)控制。

保證并發(fā)控制一些常用高性能手段有,樂(lè)觀鎖、Latch、mutex、寫時(shí)復(fù)制、CAS等;多版本的并發(fā)控制MVCC通常是保證一致性的重要手段,這個(gè)在數(shù)據(jù)庫(kù)的設(shè)計(jì)中經(jīng)常會(huì)用到。

基于邏輯的不同,采取不一樣的策略

平臺(tái)中業(yè)務(wù)邏輯存在不同的類型,有計(jì)算復(fù)雜型的,有消耗IO型的,同時(shí)就同一種類型而言,不同的業(yè)務(wù)邏輯消耗的資源數(shù)量也是不一樣的,這就需要針對(duì)不同的邏輯采取不同的策略。

針對(duì)IO型的,可以采取基于事件驅(qū)動(dòng)的異步非阻塞的方式,單線程方式可以減少線程的切換引起的開(kāi)銷,或者在多線程的情況下采取自旋spin的方式,減少對(duì)線程的切換(比如oracle latch設(shè)計(jì));對(duì)于計(jì)算型的,充分利用多線程進(jìn)行操作。

同一類型的調(diào)用方式,不同的業(yè)務(wù)進(jìn)行合適的資源分配,設(shè)置不同的計(jì)算節(jié)點(diǎn)數(shù)量或者線程數(shù)量,對(duì)業(yè)務(wù)進(jìn)行分流,優(yōu)先執(zhí)行優(yōu)先級(jí)別高的業(yè)務(wù)。

容錯(cuò)隔離

系統(tǒng)的有些業(yè)務(wù)模塊在出現(xiàn)錯(cuò)誤時(shí),為了減少并發(fā)下對(duì)正常請(qǐng)求的處理的影響,有時(shí)候需要考慮對(duì)這些異常狀態(tài)的請(qǐng)求進(jìn)行單獨(dú)渠道的處理,甚至?xí)簳r(shí)自動(dòng)禁止這些異常的業(yè)務(wù)模塊。

有些請(qǐng)求的失敗可能是偶然的暫時(shí)的失敗(比如網(wǎng)絡(luò)不穩(wěn)定),需要進(jìn)行請(qǐng)求重試的考慮。

資源釋放

系統(tǒng)的資源是有限的,在使用資源時(shí),一定要在最后釋放資源,無(wú)論是請(qǐng)求走的是正常路徑還是異常的路徑,以便于資源的及時(shí)回收,供其他請(qǐng)求使用。

在設(shè)計(jì)通信的架構(gòu)時(shí),往往需要考慮超時(shí)的控制。

以下是架構(gòu)藍(lán)圖:

電商平臺(tái)靜態(tài)架構(gòu)藍(lán)圖

整個(gè)架構(gòu)是分層的分布式的架構(gòu),縱向包括CDN,負(fù)載均衡/反向代理,web應(yīng)用,業(yè)務(wù)層,基礎(chǔ)服務(wù)層,數(shù)據(jù)存儲(chǔ)層。水平方向包括對(duì)整個(gè)平臺(tái)的配置管理部署和監(jiān)控。

標(biāo)簽: 電商 電商平臺(tái) 數(shù)據(jù)庫(kù) 搜索 通信 網(wǎng)絡(luò)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:深入探討Java中的異常與錯(cuò)誤處理

下一篇:每個(gè)Java程序員需要了解的8個(gè)Java開(kāi)發(fā)工具