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

構(gòu)建高并發(fā)高可用的電商平臺架構(gòu)實踐(一)——設計理念

2018-07-20    來源:編程學習網(wǎng)

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

空間換時間

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

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

反向代理緩存

應用端的緩存(memcache)

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

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

索引

哈希、B樹、倒排、bitmap

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

B樹索引適合于查詢?yōu)橹鲗У膱鼍埃苊舛啻蔚腎O,提高查詢的效率。

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

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

并行與分布式計算

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

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

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

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

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

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

多維度的可用

負載均衡、容災、備份

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

讀寫分離

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

依賴關(guān)系

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

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

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

監(jiān)控

監(jiān)控也是提高整個平臺可用性的一個重要手段,多平臺進行多個維度的監(jiān)控;模塊在運行時候是透明的,以達到運行期白盒化。

伸縮

拆分

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

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

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

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

無狀態(tài)

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

優(yōu)化資源利用

系統(tǒng)容量有限

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

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

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

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

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

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

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

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

容錯隔離

系統(tǒng)的有些業(yè)務模塊在出現(xiàn)錯誤時,為了減少并發(fā)下對正常請求的處理的影響,有時候需要考慮對這些異常狀態(tài)的請求進行單獨渠道的處理,甚至暫時自動禁止這些異常的業(yè)務模塊。

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

資源釋放

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

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

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

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

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

標簽: 電商 電商平臺 數(shù)據(jù)庫 搜索 通信 網(wǎng)絡

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

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

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