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

来源:http://www.cnblogs.com/xiwang6428/archive/2016/11/13/6060138.html
-Advertisement-
Play Games

數據存儲重要性: 數據是企業最重要的財產; 數據可靠性是企業的命根,一定要保證。 單機存儲原理: 存儲引擎:存儲系統的發動機,它決定存儲系統的功能和性能; 引擎類型:哈希存儲引擎、B樹存儲引擎、LSM存儲引擎 哈希存儲引擎:基於哈希表結構 :數組+鏈表;支持Create\Update\Delete\... ...


數據存儲重要性:

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

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

 

單機存儲原理:

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

    引擎類型:哈希存儲引擎、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備份;提供更好的高可用性;

            非同步熱備份:

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

            同步熱備份:

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

                為提高性能,應用程式併發寫入;

                響應延遲是最慢的那台伺服器;

 

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

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

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

    數據恢復:主從、日誌;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 對比學習Python與Cstr1 = 'hello python 2'# 字元串i = 3.1415926535print(str1)print("hello python\n")# print 自帶換行符print('%s'%str1)print(str1)print("你好,%s OK %d" ... ...
  • 【轉載自】:http://blog.csdn.net/qq7342272/article/details/7940741 java運行時異常是可能在java虛擬機正常工作時拋出的異常。 java提供了兩種異常機制。一種是運行時異常(RuntimeExepction),一種是檢查式異常(checked ...
  • 多態成員變數的特點: 運行結果: 圖解: java中,子類的實例對象在堆記憶體中的存放應如圖所示,既有子類的成員變數,又有父類的成員變數; 同一對象可以有多態,當父類變數指向時,從A入口進入,可以訪問父類的所有成員變數;當子類變數指向時,從B入口進入,可以訪問子類的所有成員變數和父類非同名變數; ja ...
  • QThread Qt Gui frozen 未響應 阻塞 processEvents ...
  • 程式開發中,經常遇到一條記錄有多個狀態位,比如一條商品,他屬於熱門,新品,特賣。我們的資料庫如何設計呢? 一般有幾種方法 (1)建立關聯表 關聯表欄位:關係Id,商品Id,屬性Id 查詢:使用關聯表的方式,查詢某屬性的商品。 程式:寫入時,寫商品表和關聯表; (2)將多個屬性存在一個欄位中,用|分割 ...
  • 最近看到有部分招聘信息,要求應聘者說一下分散式系統架構的思路。今天早晨正好有些時間,我也把我們實際在.net方面網站架構的演化路線整理一下,只是我自己的一些想法,歡迎大家批評指正。 首先說明的是.net下開源內容較少,並且也不是做並行資料庫等基礎服務,因此在這裡什麼Hadoop、Spark、ZooK ...
  • StatementHandler 語句處理器,主要負責語句的創建、參數的設置、語句的執行。不負責結果集的處理。 BaseStatementHandler 實現公共部分,具體差異通過抽象方法,留給子類實現。 首先語句級別的配置,其次配置文件中的配置。 首先語句級別的配置,其次配置文件中的配置。 Sta ...
  • Web前端技術的發展使得MVVM模式相比WPF時代更加流行,然而老舊的WinForms仍然占據桌面開發技術很大一部分,現在SOD框架提供了WinForms MVVM支持,老壇泡新菜,讓WinForms煥發新春。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...