數據存儲重要性: mysql
數據是企業最重要的財產; linux
數據可靠性是企業的命根,必定要保證。 sql
單機存儲原理: 數據庫
存儲引擎:存儲系統的發動機,它決定存儲系統的功能和性能; windows
引擎類型:哈希存儲引擎、B樹存儲引擎、LSM存儲引擎 數組
數據模型: 服務器
事務與併發控制: 併發
事務4個基本屬性:ACID 原子性、一致性、隔離性、持久性 負載均衡
併發控制: 異步
鎖粒度:Process->DB->Table->Row
提供Read併發,Read不加鎖:寫時複製、MVCC
數據恢復:經過操做日誌
多機存儲原理:
單機存儲原理在多機存儲仍然可用;多級存儲基於單機存儲;
數據分佈:
分佈在多個節點,節點間負載均衡;
分佈方式:
靜態:取模、uid%32;
動態:一致性hash,數據飄移問題(A節點更新前出現故障,更新遷移到B節點後A節點又恢復);
複製:
分佈式存儲多個副本;保證高可靠和高可用;Commit Log。
故障檢測:
心跳機制、數據遷移、故障恢復;
FLP定理與設計:
FLP Impossiblity(FLP不可能性):
在異步消息通訊場景,即便只有一個進程失敗,沒有任何方法能保證非失敗進程達到一致性。
CAP定理與設計:
CAP:一致性(Consistency)、可用性(Availabilty)、分區容忍性(Tolerance of network Partition)。
一致性和可用性須要折中權衡
分佈式存儲系統須要可以自動容錯,也就是說分區容忍性須要保證。
2PC(Two Phase Commit)協議與設計:
用於分佈式事務;
兩類節點組成:
協調者(1個);
事務參與者(多個);
分兩階段:
請求階段:協調者通知參與者準備提交或取消事務,全部參與者都須要表決贊成或者不一樣意。
提交階段:
收到參與者全部決策後,協調者進行決策(提交或取消);
通知參與者執行操做,全部參與者都贊成就提交,不然取消;
參與者收到協調者的通知後執行操做。
2PC協議是阻塞式:
事務參與者可能發生故障
--設置超時時間;
協議者可能發生故障
--日誌記錄、備用協調者
應用:交易訂單 等;
Paxos協議與設計:
做用:
解決節點間的一致性問題;
主節點宕掉,則選擇新節點;
主節點常以操做日誌的形式同步備節點。
分兩種角色:提議者(Prpposer)、接受者(Acceptor);
執行步驟:
與2PC比較::
2PC協議保證多個數據分片上操做的原子性;
Paxos協議保證一個數據分片多個副本之間的數據一致性;
Paxos協議用法:
實現全局的鎖服務或者命名和配置服務;
---Apache Zookeeper
將用戶數據複製到多個數據中心;
---Google Megastore
數據存儲層冗餘:
多個副本,實現訪問的高可用性。
如何實現:
數據複製:
基於日誌;
Master-Slave:mysql\MongoDB
Replic Set:MongoDB
雙寫:
存儲層多主對等結構;比較靈活,但數據模塊層成本較高;
數據備份:
冷備份:
按期將數據複製到某個存儲介質,是傳統的數據保護手段;
優勢:簡單、廉價,技術難度低;
缺點:按期存在數據不一致;恢復數據時間長;
熱備份:
online備份;提供更好的高可用性;
異步熱備份:
從主存儲寫入即返回給應用端,由存儲系統異步寫入其餘副本;
同步熱備份:
多份數據副本寫入同步完成,無主從之分;
爲提升性能,應用程序併發寫入;
響應延遲是最慢的那臺服務器;
數據存儲層失效轉移機制:
失效確認:是否宕機、心跳;
訪問轉移:訪問路由到非宕機機器;存儲數據徹底一致;
數據恢復:主從、日誌;