后臺架構(gòu)設(shè)計—數(shù)據(jù)存儲層
數(shù)據(jù)存儲重要性:
- 數(shù)據(jù)是企業(yè)最重要的財產(chǎn);
- 數(shù)據(jù)可靠性是企業(yè)的命根,一定要保證。
單機存儲原理:
存儲引擎:存儲系統(tǒng)的發(fā)動機,它決定存儲系統(tǒng)的功能和性能;
引擎類型:哈希存儲引擎、B樹存儲引擎、LSM存儲引擎
- 哈希存儲引擎:基于哈希表結(jié)構(gòu) :數(shù)組+鏈表;支持Create\Update\Delete\隨機Read
- B樹存儲引擎:基于B Tree實現(xiàn),支持單條記錄的CURD,支持順序查找。RDBMS使用較多。
- LSM樹存儲引擎:對數(shù)據(jù)的修改增量保存在內(nèi)存,達到一定條件再批量更新到磁盤;優(yōu)勢在于批量寫入;劣勢在于讀取需合并磁盤和內(nèi)存;
避免內(nèi)存數(shù)據(jù)丟失:修改操作寫入到CommitLog日志。
數(shù)據(jù)模型:
- 文件:以目錄樹組織,如linux,mac,windows;
- 關(guān)系型:每個關(guān)系是一個表格,多行組成,每行多列;
- 鍵值(Key-Value):Memcached, Tokey, Redis;
- 列存儲型:Casadra, Hbase;
- 圖形數(shù)據(jù)庫:Neo4J, InfoGrid, Infinite Graph
- 文檔型:MongoDB, CouchDB
事務(wù)與并發(fā)控制:
事務(wù)4個基本屬性:ACID 原子性、一致性、隔離性、持久性
并發(fā)控制:
鎖粒度:Process->DB->Table->Row
提供Read并發(fā),Read不加鎖:寫時復制、MVCC
數(shù)據(jù)恢復:通過操作日志
多機存儲原理:
單機存儲原理在多機存儲仍然可用;多級存儲基于單機存儲;
數(shù)據(jù)分布:
分布在多個節(jié)點,節(jié)點間負載均衡;
分布方式:
靜態(tài):取模、uid%32;
動態(tài):一致性hash,數(shù)據(jù)飄移問題(A節(jié)點更新前出現(xiàn)故障,更新遷移到B節(jié)點后A節(jié)點又恢復);
復制:
分布式存儲多個副本;保證高可靠和高可用;Commit Log。
故障檢測:
心跳機制、數(shù)據(jù)遷移、故障恢復;
FLP定理與設(shè)計:
FLP Impossiblity(FLP不可能性):
在異步消息通信場景,即使只有一個進程失敗,沒有任何方法能保證非失敗進程達到一致性。
CAP定理與設(shè)計:
CAP:一致性(Consistency)、可用性(Availabilty)、分區(qū)容忍性(Tolerance of network Partition)。
一致性和可用性需要折中權(quán)衡
分布式存儲系統(tǒng)需要能夠自動容錯,也就是說分區(qū)容忍性需要保證。
2PC(Two Phase Commit)協(xié)議與設(shè)計:
用于分布式事務(wù);
兩類節(jié)點組成:
協(xié)調(diào)者(1個);
事務(wù)參與者(多個);
分兩階段:
請求階段:協(xié)調(diào)者通知參與者準備提交或取消事務(wù),所有參與者都需要表決同意或者不同意。
提交階段:
收到參與者所有決策后,協(xié)調(diào)者進行決策(提交或取消);
通知參與者執(zhí)行操作,所有參與者都同意就提交,否則取消;
參與者收到協(xié)調(diào)者的通知后執(zhí)行操作。
2PC協(xié)議是阻塞式:
事務(wù)參與者可能發(fā)生故障
--設(shè)置超時時間;
協(xié)議者可能發(fā)生故障
--日志記錄、備用協(xié)調(diào)者
應(yīng)用:交易訂單 等;
Paxos協(xié)議與設(shè)計:
作用:
解決節(jié)點間的一致性問題;
主節(jié)點宕掉,則選擇新節(jié)點;
主節(jié)點常以操作日志的形式同步備節(jié)點。
分兩種角色:提議者(Prpposer)、接受者(Acceptor);
執(zhí)行步驟:
批準:Proposer發(fā)送accept消息給Accepter要求接受某個提議者;
確認:超一半的Accepter接受,則提議值生效,Proposer發(fā)送acknowledge消息通知所有的Accepter提議生效。
與2PC比較::
2PC協(xié)議保證多個數(shù)據(jù)分片上操作的原子性;
Paxos協(xié)議保證一個數(shù)據(jù)分片多個副本之間的數(shù)據(jù)一致性;
Paxos協(xié)議用法:
實現(xiàn)全局的鎖服務(wù)或者命名和配置服務(wù);
---Apache Zookeeper
將用戶數(shù)據(jù)復制到多個數(shù)據(jù)中心;
---Google Megastore
數(shù)據(jù)存儲層冗余:
多個副本,實現(xiàn)訪問的高可用性。
如何實現(xiàn):
數(shù)據(jù)復制:
基于日志;
Master-Slave:mysql\MongoDB
Replic Set:MongoDB
雙寫:
存儲層多主對等結(jié)構(gòu);比較靈活,但數(shù)據(jù)模塊層成本較高;
數(shù)據(jù)備份:
冷備份:
定期將數(shù)據(jù)復制到某個存儲介質(zhì),是傳統(tǒng)的數(shù)據(jù)保護手段;
優(yōu)點:簡單、廉價,技術(shù)難度低;
缺點:定期存在數(shù)據(jù)不一致;恢復數(shù)據(jù)時間長;
熱備份:
online備份;提供更好的高可用性;
異步熱備份:
從主存儲寫入即返回給應(yīng)用端,由存儲系統(tǒng)異步寫入其他副本;
同步熱備份:
多份數(shù)據(jù)副本寫入同步完成,無主從之分;
為提高性能,應(yīng)用程序并發(fā)寫入;
響應(yīng)延遲是最慢的那臺服務(wù)器;
數(shù)據(jù)存儲層失效轉(zhuǎn)移機制:
失效確認:是否宕機、心跳;
訪問轉(zhuǎn)移:訪問路由到非宕機機器;存儲數(shù)據(jù)完全一致;
數(shù)據(jù)恢復:主從、日志;

























