数据库架构
數據庫架構設計思路
1.可用性
2.讀性能
3.一致性
4.擴展性
單庫:一個數據庫
分片:解決數據量太大的問題,也就是通常說的“水平切分”
一旦引入分片,勢必有“數據路由”的概念,哪個數據訪問哪個庫
路由規則通常分為3種:
1.范圍:range
優點:簡單,容易擴展
缺點:個庫壓力不均
2.哈希:hash
優點:簡單,數據均衡,負載均衡
缺點:遷移麻煩
3.路由服務:router-config-server
優點:靈活性強,業務與路由算法解耦
缺點:每次訪問數據庫前多一次查詢
大部分互聯網公司采用的第二種方案:哈希分庫,哈希路由
分組:解決可用性問題,通常通過主從復制的方式來實現
數據庫架構設計思路
1.如何保證數據可用性
2.如何提高數據庫讀性能
3.如何保證一致性
4.如何提高擴展性
對于可用性
解決思路就是冗余
如何保證站點的可用性?復制站點,冗余站點
如何保證服務的可用性?復制服務,冗余服務
如何保證數據的可用性?復制數據,冗余數據
數據的冗余,會帶來一個副作用,一致性問題
1.如何保證數據庫“讀”高可用?
冗余讀庫
主庫只寫,多個從庫讀
副作用:讀寫有延時
2.如何保證數據庫“寫”高可用?
冗余寫庫
采用雙主互備的方式
副作用:雙寫同步,數據沖突(使用不同的初始值,步長為從庫的數量)
還可以“雙主當主從用”
仍然是雙主,但只有一個主提供服務(讀+寫),另一個主是“shadow-master”,只用來保證高可用,平時不提供服務
優點:讀寫沒有延時,讀寫高可用
缺點:不能通過加從庫的方式擴展讀性能,資源利用率50%,一臺冗余主沒有提供服務
如何擴展讀性能
1.建立索引(不同庫建立不同的索引)
2.增加從庫(從庫越多,同步越慢)
3.增加緩存
如何保證一致性
1.中間件(如果某一個key有寫操作,在不一致的時間窗口內,中間件會將這個key的讀操作也路由到主庫上)
2.強制讀主(指的是db與緩存間的不一致)
建議為所有cache中的數據設置一個超時時間
如何提高數據庫的擴展性
1.擴展的話勢必需要數據遷移
前提是采用“雙主當主從用”
首先,加倍擴容
擴容步驟:
1.將主庫(shadow-master)提升
2.修改配置,2庫變4庫(原來MOD2,現在MOD4)
收尾工作:
1.將舊的雙主同步解除
2.增加新的雙主(shadow-master)
3.刪除多余的數據
總結
- 上一篇: iqooneo3 如何不用vivo账号下
- 下一篇: Sping框架(Ioc)