本文章是電商網(wǎng)站架構(gòu)案例的第三篇,主要介紹數(shù)據(jù)庫集群,讀寫分離,分庫分表,服務(wù)化,消息隊列的使用,以及本電商案例的架構(gòu)總結(jié)。
6.5數(shù)據(jù)庫集群(讀寫分離,分庫分表)
大型網(wǎng)上電子商城系統(tǒng)需要存儲海量的數(shù)據(jù),為達到海量數(shù)據(jù)存儲,高可用,高性能一般采用冗余的方式進行系統(tǒng)設(shè)計。一般獨立商城網(wǎng)站建設(shè)有兩種方式讀寫分離和分庫分表。
讀寫分離:一般解決讀比例遠(yuǎn)大于寫比例的場景,可采用一主一備,一主多備或多主多備方式。
本案例在業(yè)務(wù)拆分的基礎(chǔ)上,結(jié)合分庫分表和讀寫分離。如圖所示:
(1)業(yè)務(wù)拆分后:每個子系統(tǒng)需要單獨的庫;
(2)如果單獨的庫太大,可以根據(jù)業(yè)務(wù)特性,進行再次分庫,比如商品分類庫,產(chǎn)品庫;
(3)分庫后,如果表中有數(shù)據(jù)量很大的,則進行分表,一般可以按照Id,時間等進行分表;(高級的用法是一致性Hash)
(4)在分庫,分表的基礎(chǔ)上,進行讀寫分離;
相關(guān)中間件可參考Cobar(阿里,目前已不在維護),TDDL(阿里),Atlas(奇虎360),MyCat(在Cobar基礎(chǔ)上,國內(nèi)很多牛人,號稱國內(nèi)第一開源項目)。
分庫分表后序列的問題,JOIN,事務(wù)的問題,會在分庫分表主題分享中,介紹。
6.6服務(wù)化
將多個子系統(tǒng)公用的功能/模塊,進行抽取,作為公用服務(wù)使用。比如本案例的會員子系統(tǒng)就可以抽取為公用的服務(wù)。
6.7消息隊列
消息隊列可以解決子系統(tǒng)/模塊之間的耦合,實現(xiàn)異步,高可用,高性能的系統(tǒng)。是分布式系統(tǒng)的標(biāo)準(zhǔn)配置。本案例中,消息隊列主要應(yīng)用在購物,配送環(huán)節(jié)。
(1)用戶下單后,寫入消息隊列,后直接返回客戶端;
(2)庫存子系統(tǒng):讀取消息隊列信息,完成減庫存;
(3)配送子系統(tǒng):讀取消息隊列信息,進行配送;
目前使用較多的MQ有Active MQ,Rabbit MQ,Zero MQ,MS MQ等,需要根據(jù)具體的業(yè)務(wù)場景進行選擇。建議可以研究下Rabbit MQ。
6.8其他架構(gòu)(技術(shù))
除了以上介紹的業(yè)務(wù)拆分,應(yīng)用集群,多級緩存,單點登錄,數(shù)據(jù)庫集群,服務(wù)化,消息隊列外。還有CDN,反向代理,分布式文件系統(tǒng),大數(shù)據(jù)處理等系統(tǒng)。
此處不詳細(xì)介紹,大家可以問度娘/Google,有機會的話也可以分享給大家。
七、架構(gòu)總結(jié)
以上是本次分享的架構(gòu)總結(jié),其中細(xì)節(jié)可參考前面分享的內(nèi)容。其中還有很多可以優(yōu)化和細(xì)化的地方,因為是案例分享,主要針對重要部分做了介紹,工作中需要大家根據(jù)具體的業(yè)務(wù)場景進行架構(gòu)設(shè)計。
以上是電商網(wǎng)站架構(gòu)案例的分享一共有三篇,從電商網(wǎng)站的需求,到單機架構(gòu),逐步演變?yōu)槌S玫?,可供參考的分布式架?gòu)的原型。除具備功能需求外,還具備一定的高性能,高可用,可伸縮,可擴展等非功能質(zhì)量需求(架構(gòu)目標(biāo))。
文章來源:博客園
<數(shù)商云(www.zhimaihui.cn)是國內(nèi)知名企業(yè)級電商平臺提供商,為企業(yè)級商家提供系統(tǒng)開發(fā)(多種模式電商平臺搭建:B2B/B2B2C/B2C/O2O/新零售等)、供應(yīng)鏈系統(tǒng)搭建及電商行業(yè)解決方案服務(wù)>
評論