我們繼續來講分布式,回到我們的創業游戲。
我們的業務規模上來了,客戶也越來越忠誠了。很多客戶都通過我們的訂票服務,來方便自己的行程。
那對這些老客戶,我們的宗旨是:要不斷超越客戶的期待。
所以,我們要建立我們的客戶數據庫。
我們要記錄下每個客戶的偏好的航空公司,偏愛的酒店。下次服務,才能直接更好地服務客戶。
怎么辦?
最簡單的辦法,每個客服小姐姐各自用自己的記事本,記錄下客戶的號碼,偏好等信息。
這些記事本就是我們的“客戶數據庫”。
這些數據都記錄在記事本上,會有一個問題,如里同一個客戶,每個客服小姐姐都記錄一次。是不是很費時費力,還重復記錄,浪費資源。
怎么辦?
還是跟之前一樣,拆分!垂直拆分。
再拆分一組,就叫:客戶信息記錄組。
如果客戶小姐姐要記錄客戶信息,就把信息寫在紙條上,然后直接扔給:客戶信息記錄組,讓這個小組自行處理:去除重復,更新信息。
當然,我們的客戶信息記錄組,可以用execl把客戶信息上記錄下來。這樣,也方便數據處理。
現在我們的業務架構是這樣的:
?
?有同學說,這個架構圖好像跟我們的IT軟件架構圖很像。
沒錯。其實,所有的IT軟件架構,遵從從業務架構設計的。
技術只是工具,業務才是核心。
回到我們的客戶信息記錄組。這個組也有多個小姐姐記錄,如果大家都各自用自己的excel,怎么保證大家的信息沒有重復,都是一致的呢?
這個時候,我們就要上數據庫系統了。什么是數據庫系統,簡單來說,就是記錄數據的倉庫。
好,我們買了一臺電腦,招了一個程序員,下載了個mysql,寫了一個簡單程序,給客戶信息記錄組的姐姐用。
剛開始,數據不大,問題不大。
當數據越來越多時,一臺數據庫明顯支持不下。怎么辦?
很簡單,多買幾臺數據庫。能用錢解決的問題,就不是問題。
那現在問題又來了,這些數據庫怎么保持數據一致性?
這個就是分布式數據庫要解決的問題。什么是分布式數據庫?
簡單來說,它就是用多臺數據庫組成一個“整體”,給外界提供數據庫服務的數據倉庫系統。
有同學會說了,你要很大很大的數據量才能用分布式數據庫。你一家小公司,用這個是不是浪費了?
有道理!一般情況下,小公司是用不上分布式。但我們做為有夢想的企業家,一定要提前規劃,站在未來看現在!我們才有機會成功!
馬云說過:夢想還是要有的,萬一實現了呢?
所以,叫那個程序員開始干活!
首先我們要分析一下業務。
客戶小姐姐大部分情況下,都 是查詢客戶信息的比較多,占了80%。新增,和更新信息的情況比較少,占了20%。
如果查詢和記錄都在一個數據庫,經常會造成沖突,造成“鎖表”。這會造成嚴重的性能問題,會造成對客戶體驗嚴重的損害!
很自然,我們可以想到,那是不是可以分開兩個庫,一個用來記錄,一個用來查詢。
這就是讀寫分離,讀寫分離是很重要的設計原則。可以極大地提高查詢的效率。如下:
?
盡管采取了讀寫分離的方式,但隨著數據庫的壓力繼續增加,數據庫的瓶頸越來越突出。怎么辦?
我們分別對讀寫庫的表進行水平拆分,也就是分表。
比如,可以按表中的唯一ID的hash值來分,如果hash值是偶數,就放在“偶數表”,如果hash值是奇數,就放在奇數表。
如下圖:
講到這里,我們基本上就建立了分布式數據庫系統。
明天繼續講分布式架構的演進。
?