一:什么是分布式
互聯網架構的兩個特點:高並發和海量數據存儲。
詳解見:https://www.cnblogs.com/zhy-1992/p/9233789.html
1.任務分解
以電商平台為例子:將整個系統分為多個子系統,用戶系統(部署在服務器A)、商品系統(部署在服務器B)、訂單系統(部署在服務器C)、交易系統(部署在服務器D)、物流系統(部署在服務器E)
2.節點通信
每個子系統都是一個節點,節點之間通過通信進行數據交換。
3.與集群的區別
集群:將整個電商平台系統,部署在不同的服務器,不對整個系統進行划分。保證系統的高可用。
二:電商平台的架構發展
1.架構一
用戶量上去之后,單機負載出現了性能瓶頸,服務器會出現性能問題,這時候可以考慮將數據庫單獨獨立出來。
二:架構二,數據庫服務器和應用服務器分離
3:架構三,對應用服務器進行拆分(應用服務器做集群)
問題一:session怎么保持狀態
問題二:前端的請求怎么做請求轉發
4:結構四:增加負載均衡器(硬件負載均衡器或軟件協議負載均衡),保證前端轉發
通過負載均衡和應用服務器集群的搭配,可以解決高並發流量訪問的問題,但是隨着高並發流量的訪問,數據庫的壓力就越來越大。
5:結構五:數據庫的讀寫分離
電商系統的數據庫分析,28原則,20%是數據庫的寫,80%是數據庫的讀,因此可以做數據庫的讀寫分離
以mysql為例,支持master-sliver模式,具體講解見:https://www.cnblogs.com/jirglt/p/3549047.html,可以做數據庫同步(主從同步機制)。
問題一:數據庫讀寫分離怎么做?
問題二:數據庫數據同步怎么做?同步不及時怎么辦?
問題三:數據庫路由怎么做?mycat
6:結構六:
電商平台最多的是搜索操作,mysql的like模糊查詢可以實現,但是數據量大的時候,like查詢也會有很多的問題,怎么辦?
搜索引擎集群
問題一:搜索引擎的索引數據怎么同步?實時增量同步還是全局定時同步?
Elasticsearch是一個基於Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基於RESTful web接口。
7. 結構七:訪問量繼續增高
三板斧:緩存、引流、降級
緩存機制:對讀操作,進行緩存進制處理
應用層也可以做一些緩存,例如內存緩存,不一定要放在服務器上,比如 GuavaCache(Java的技術)。頁面級緩存,前端CDN緩存
8:結構八:繼續優化數據庫
數據庫的瓶頸:IO瓶頸、單表最大存儲數據量
單表數據量建議:500萬-1000萬之間
數據庫的水平和垂直拆分,分庫分表(根據業務進行)
分庫結構(垂直拆分)
數據量特別大的表,每一個表單獨放入一個,database里面,而不是過去的所有表放入一個database里面,這就是表的分庫,同步就應該對應用層進行拆分(垂直拆分)
下面對應用層進行垂直拆分
假如:訂單服務里面有需要獲取用戶信息的需求,一般就寫sql語句,直接獲取用戶的信息,但是要是其他服務里面也需要獲取用戶信息呢,每個服務里面都寫查詢用戶的sql嗎?那么會出現太多的冗余代碼?而且用戶服務和訂單服務之間並沒有進行通信和數據交互,如何實現讓不同的服務之間能夠通過通信,進行數據傳遞呢?
分表結構(水平拆分)
# TODO