後臺架構設計—數據存儲層

數據存儲重要性: mysql

    數據是企業最重要的財產; linux

    數據可靠性是企業的命根,必定要保證。 sql

 

單機存儲原理: 數據庫

    存儲引擎:存儲系統的發動機,它決定存儲系統的功能和性能; windows

    引擎類型:哈希存儲引擎、B樹存儲引擎、LSM存儲引擎 數組

  1. 哈希存儲引擎:基於哈希表結構 :數組+鏈表;支持Create\Update\Delete\隨機Read
  2. B樹存儲引擎:基於B Tree實現,支持單條記錄的CURD,支持順序查找。RDBMS使用較多。
  3. LSM樹存儲引擎:對數據的修改增量保存在內存,達到必定條件再批量更新到磁盤;優點在於批量寫入;劣勢在於讀取需合併磁盤和內存;
    1. 避免內存數據丟失:修改操做寫入到CommitLog日誌。

數據模型: 服務器

  1. 文件:以目錄樹組織,如linux,mac,windows;
  2. 關係型:每一個關係是一個表格,多行組成,每行多列;
  3. 鍵值(Key-Value):Memcached, Tokey, Redis;
  4. 列存儲型:Casadra, Hbase;
  5. 圖形數據庫:Neo4J, InfoGrid, Infinite Graph
  6. 文檔型:MongoDB, CouchDB

事務與併發控制: 併發

    事務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);

    執行步驟:

  1. 批准:Proposer發送accept消息給Accepter要求接受某個提議者;
  2. 確認:超一半的Accepter接受,則提議值生效,Proposer發送acknowledge消息通知全部的Accepter提議生效。

    與2PC比較::

2PC協議保證多個數據分片上操做的原子性;

        Paxos協議保證一個數據分片多個副本之間的數據一致性;

    Paxos協議用法:

        實現全局的鎖服務或者命名和配置服務;

            ---Apache Zookeeper

        將用戶數據複製到多個數據中心;

            ---Google Megastore

 

數據存儲層冗餘:

    多個副本,實現訪問的高可用性。

    如何實現:

        數據複製:

            基於日誌;

            Master-Slave:mysql\MongoDB

            Replic Set:MongoDB

        雙寫:

            存儲層多主對等結構;比較靈活,但數據模塊層成本較高;

    數據備份:

        冷備份:

            按期將數據複製到某個存儲介質,是傳統的數據保護手段;

            優勢:簡單、廉價,技術難度低;

            缺點:按期存在數據不一致;恢復數據時間長;

        熱備份:

            online備份;提供更好的高可用性;

            異步熱備份:

                從主存儲寫入即返回給應用端,由存儲系統異步寫入其餘副本;

            同步熱備份:

                多份數據副本寫入同步完成,無主從之分;

                爲提升性能,應用程序併發寫入;

                響應延遲是最慢的那臺服務器;

 

數據存儲層失效轉移機制:

    失效確認:是否宕機、心跳;

    訪問轉移:訪問路由到非宕機機器;存儲數據徹底一致;

    數據恢復:主從、日誌;

相關文章
相關標籤/搜索