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