1. 程式人生 > 資料庫 >網際網路應用擴容:應用拆分、資料庫拆分、讀寫分離、主從同步

網際網路應用擴容:應用拆分、資料庫拆分、讀寫分離、主從同步

如何擴容

應用拆分的垂直拆分

將系統拆分為各種服務。使用帶有服務註冊、發現功能的SOA框架(面向服務的架構)來進行互動。一個功能的讀寫可以拆分成不同的服務。不同的服務由不同的團隊維護。通過服務註冊中心,服務消費者不需要進行配置更改,就可以發現新的服務提供者並使用它。

 

資料庫拆分

分庫,即垂直資料拆分,比如拆分為商家庫、客戶庫、訂單庫。分庫解決多個表之間的IO競爭、單機容量問題。

分表,即水平資料拆分。分表提高了單表查詢速度。

先按照業務維度進行垂直拆分,不同的應用可以使用不同的資料庫,再根據range或者hash進行水平拆分。

資料庫拆分可以在應用層做,也可以在中介軟體層做,使用中介軟體做資料庫拆分的好處是應用就像查單庫單表一樣去查詢中介軟體層。

分庫帶來無法跨庫join的問題,分錶帶來無法跨各部分表查詢。可能原本的一次查詢,變成了多次查詢,使業務邏輯複雜化。為了減少分開分表打來的問題。可以按查詢進行資料異構。比如按照查詢維度異構,訂單庫可以異構出商家訂單庫、使用者訂單庫。再比如通過商品基礎庫、商品屬性庫、商品圖片庫,聚合資料異構出商品庫。

 

讀寫分離

寫資料時寫到主資料庫/快取,讀資料時讀取從資料庫/快取。為了提高讀取效能可以掛多個從。因為主資料庫/快取向從資料庫/快取同步資料會有一定的延遲,所以需要強一致性的讀操作,就直接讀主資料庫/快取。

 

主從同步方式:

第一種是同步方式,雙寫,即同時寫主從伺服器,然後返回,這種方式的問題在於請求處理速度慢。

第二種是非同步方式。可以訂閱mysql的binlog日誌模擬資料庫的主從同步機制,從伺服器對日誌進行SQL重放,進行線下同步。主資料庫/快取也可以把變更釋出到MQ佇列,從伺服器訂閱變更,非同步寫。

其實上面說的兩種方法。不僅可以同步主從資料庫/快取,還可以進行業務模組之間的同步,還可以用來實現資料庫和快取之間的同步,還可以用來同步原始資料和異構資料。

為了保證最終一致性,需要掃描主從資料庫,發現不一致時,進行補償。可以對資料進行掃描、也可以對日誌進行掃描。可以進行增量掃描、也可以進行全量掃描。還可以寫主伺服器成功時發訊息,寫從伺服器成功時也發訊息,實時檢測一致性,比如3秒內還沒有一致,則進行補償修復。