本文章是電商網站架構案例的第三篇,主要介紹數據庫集群,讀寫分離,分庫分表,服務化,消息隊列的使用,以及本電商案例的架構總結。
6.5數據庫集群(讀寫分離,分庫分表)
大型網站需要存儲海量的數據,為達到海量數據存儲,高可用,高性能一般采用冗余的方式進行系統設計。一般有兩種方式讀寫分離和分庫分表。
讀寫分離:一般解決讀比例遠大於寫比例的場景,可采用一主一備,一主多備或多主多備方式。
本案例在業務拆分的基礎上,結合分庫分表和讀寫分離。如下圖:

(1) 業務拆分后:每個子系統需要單獨的庫;
(2) 如果單獨的庫太大,可以根據業務特性,進行再次分庫,比如商品分類庫,產品庫;
(3) 分庫后,如果表中有數據量很大的,則進行分表,一般可以按照Id,時間等進行分表;(高級的用法是一致性Hash)
(4) 在分庫,分表的基礎上,進行讀寫分離;
相關中間件可參考Cobar(阿里,目前已不在維護),TDDL(阿里),Atlas(奇虎360),MyCat(在Cobar基礎上,國內很多牛人,號稱國內第一開源項目)。
分庫分表后序列的問題,JOIN,事務的問題,會在分庫分表主題分享中,介紹。
6.6服務化
將多個子系統公用的功能/模塊,進行抽取,作為公用服務使用。比如本案例的會員子系統就可以抽取為公用的服務。

6.7消息隊列
消息隊列可以解決子系統/模塊之間的耦合,實現異步,高可用,高性能的系統。是分布式系統的標准配置。本案例中,消息隊列主要應用在購物,配送環節。
(1) 用戶下單后,寫入消息隊列,后直接返回客戶端;
(2) 庫存子系統:讀取消息隊列信息,完成減庫存;
(3) 配送子系統:讀取消息隊列信息,進行配送;

目前使用較多的MQ有Active MQ,Rabbit MQ,Zero MQ,MS MQ等,需要根據具體的業務場景進行選擇。建議可以研究下Rabbit MQ。
6.8其他架構(技術)
除了以上介紹的業務拆分,應用集群,多級緩存,單點登錄,數據庫集群,服務化,消息隊列外。還有CDN,反向代理,分布式文件系統,大數據處理等系統。
此處不詳細介紹,大家可以問度娘/Google,有機會的話也可以分享給大家。
七、架構總結

以上是本次分享的架構總結,其中細節可參考前面分享的內容。其中還有很多可以優化和細化的地方,因為是案例分享,主要針對重要部分做了介紹,工作中需要大家根據具體的業務場景進行架構設計。
以上是電商網站架構案例的分享一共有三篇,從電商網站的需求,到單機架構,逐步演變為常用的,可供參考的分布式架構的原型。除具備功能需求外,還具備一定的高性能,高可用,可伸縮,可擴展等非功能質量需求(架構目標)。
關於負載均衡,業務拆分,集群架構,讀寫分離,分庫分表,服務化,消息隊列等常用技術和架構實現,本博客將會推出系列文章,進行介紹。歡迎小伙伴們圍觀。
