主頁 > 資料庫 > 多圖預警——從 RAID 到分布式系統中的副本分布

多圖預警——從 RAID 到分布式系統中的副本分布

2020-09-13 17:35:26 資料庫

原文首發于個人博客「tobe的囈語」歡迎大家的訪問收藏啊~

我們知道,在面對大規模資料的計算和存盤時,有兩種處理思路:

  • 垂直擴展(scale up):通過升級單機的硬體,如 CPU、記憶體、磁盤等,提高計算機的處理能力,
  • 水平擴展(scale out):通過添加更多的機器到分布式系統中,提高整個系統的處理能力,

在分布式技術尚未成熟的時候,小型機、中型機、大型機、超級計算機逐步升級的方案幾乎是大型公司的唯一選擇,但是這種垂直擴展是有天花板的,硬體升級的速度遠遠比不上資料規模的增速,即使是超級計算機也無法滿足人們對計算資源的需求,

水平擴展方案,也就是在一個系統里不斷添加機器的方案,就這么走上了歷史舞臺,這就是現在的分布式技術,

在這篇文章里,我將分別介紹單機系統下的 RAID 存盤技術以及分布式系統下的存盤分布技術,這兩種技術在思想上有很相近的地方,希望讀者慢慢體會,

RAID

RAID,全稱是Redundant Array of Inexpensive/Independent Disks,也就是磁盤冗余陣列,這里的 I 有兩種說法,一種是 Inexpensive,廉價,另一種是Independent ,獨立,所謂 RAID 就是將多塊磁盤組合在一起,對外抽象成一個容量大讀寫速度高容錯性好的大型磁盤,

我很喜歡「抽象」這個概念,因為它為我們屏蔽了更底層的細節,比如作業系統中的檔案系統,虛擬記憶體等,在我看來,RAID 就是對多個獨立磁盤的抽象,

注意,上面的圖里的三個方面(存盤容量、讀寫速度、資料可靠性)是衡量存盤系統的重要標準,我們在分布式系統里也會提及,不過現在讓我們先來看看常用的 RAID 技術,

RAID 0

RAID 0 是資料在從記憶體緩沖區寫入磁盤時,根據磁盤的數量,將資料分成 N 份,然后把這些資料并發寫入 N 塊磁盤,每塊磁盤上存盤不同的資料,這樣整體的資料寫入速度是單個磁盤的 N 倍,讀取當然也是并發執行的,

因此 RAID 0 具有極快的資料讀寫速度,但是RAID 0不做資料備份,N塊磁盤中只要有一塊損壞,資料完整性就被破壞,其他磁盤的資料就無法使用了,

RAID 1

RAID 1 的策略更為簡單,不管你有幾個磁盤,都給我存一樣的資料,這樣資料的可靠性極高,但是寫入速度收到很大影響,

Any read request can be serviced by any drive in the set. If a request is broadcast to every drive in the set, it can be serviced by the drive that accesses the data first (depending on its seek time and rotational latency), improving performance. Sustained read throughput, if the controller or software is optimized for it, approaches the sum of throughputs of every drive in the set, just as for RAID 0. Actual read throughput of most RAID 1 implementations is slower than the fastest drive. Write throughput is always slower because every drive must be updated, and the slowest drive limits the write performance. The array continues to operate as long as at least one drive is functioning.[1]

這段話意思是說,RAID 1 的讀取速度取決于哪一個硬碟能最先訪問到待讀取的資料,如果軟體上有優化,可以達到 RAID 0 的讀取速度,但是最慢的磁盤限制了寫入速度,因為系統需要等待最慢的磁盤完成寫入并做好檢驗作業,RAID 1 的可靠性好,只要陣列里有任意一塊磁盤還能用,陣列就能繼續作業,而且當新磁盤替代舊磁盤后,系統會自動復制資料,

RAID 10

RAID 0 讀寫速度高,但沒有資料冗余, RAID 1 做了資料備份,但讀寫速度受到制約,所以就需要想辦法結合 RAID 0 和 RAID 1,揚長避短,RAID 10 就這么出現了,

RAID 10 就是將 N 個磁盤平均分成兩份,這兩份互為鏡像,相當于是 RAID 1,但對于每份磁盤中的 N/2 塊磁盤來說,其存盤方式像 RAID 0 一樣,可以做到并發讀寫,這樣就做到了折中,在讀寫速度和容錯能力上有一個平衡,

我們不難看出來,RAID 10 的磁盤利用率較低,有一半的磁盤都拿來做備份了,著實有些奢侈,

就一般情況而言,服務器上很少出現同時損壞兩塊磁盤的情況,往往是損壞一塊磁盤的時候,就換上新的磁盤,然后利用恢復技識訓復損壞磁盤上的資料,所以我們可以據此設計一個磁盤利用率更高的方案,

RAID 3 and RAID 5

有了前面的討論,我們可以想到,如果任何一塊磁盤上的資料,都能通過其它 N-1 塊磁盤上的資料恢復出來,不就解決我們的問題了嗎?

校驗機制正好滿足我們的要求,

在寫入磁盤的時候,我們把資料分成 N-1 份,并發寫入 N-1 塊磁盤,然后用剩下的一塊磁盤記錄校驗資料,這樣我們就可以容忍任意一塊磁盤的損壞,

根據校驗資料寫入的位置,我們有了兩種方案:

  • RAID 3:所有的校驗資料寫在同一塊磁盤上,在資料修改較頻繁的場景下,任何一塊磁盤上資料的修改都會導致校驗盤要重新寫入資料,這會導致校驗盤比其他磁盤更容易損壞,所以 RAID 3 很少在實踐中使用,用專業一點的話來說,就是負載不均衡了,
  • RAID 5:校驗資料螺旋式地寫入所有磁盤,看上面的圖就能分辨出這兩種方案的差別,RAID 5 讓每一塊磁盤都承擔一部分的校驗作業,這樣修改校驗資料的壓力也就被分散到了所有的磁盤,做到了我們所期望的負載均衡,因此 RAID 5 是使用更為廣泛的方案,

RAID 6

相較于 RAID 5,RAID 6 的可靠性更高,因為 RAID 6 采用了兩種校驗碼螺旋寫入的方案,這樣可以容忍兩塊磁盤同時損壞,

什么情況下需要這樣的容錯能力?在大型服務器上,每塊磁盤的容量往往很大,在某一塊磁盤損壞后,即使立馬替換上了新磁盤,也需要很長時間才能把所有資料恢復完畢,那么在這段時間里,如果有另一塊磁盤損壞,資料就沒辦法恢復了,這是我們不能接受的,因此就需要 RAID 6 來確保資料的完整性,

分布式存盤方案

PS:本文著重于分布式系統的副本與資料分布的關系,因為這部分的思想與 RAID 有相似之處,關于一致性哈希等問題將單獨寫一篇文章介紹,

分布式系統應對的存盤規模要比單機大很多,但基本思想和設計目標都是一致的:

  • 提高系統的吞吐量
  • 提高系統的存盤容量
  • 利用資料備份,提高系統可靠性

與單機情況不同,分布式系統面臨的問題要多得多,因為服務器之間的資料是通過網路傳輸,延時較高,甚至可能會出現網路中斷,導致某些機器無法訪問,這對我們的存盤方案有很大影響,比如,我們還能用類似 RAID 5 的校驗方式來做冗余嗎?

答案是否定的,因為做校驗的成本太高了,一次校驗需要其它 N-1 臺機器的回應,一等就是幾十毫秒,效率極低,而且網路負載太大了,相反,RAID 10 的方案看起來更適合現在的情況,

以機器為單位的副本

在該方式下,若干機器互為副本,副本機器之間的資料是完全一樣的,就像 RAID 1 的方案一樣,這種方式的優點就是簡單,但缺點也很明顯:

  • 恢復資料的效率低:假如機器 3 磁盤損壞,丟失了所有的資料,于是我們又調度一臺新機器進入該機器組,為了讓該機器盡快提供服務,需要從其他兩臺機器上拷貝資料,但是由于網路帶寬的限制,資料恢復的速度慢,
  • 可擴展性不高:每個機器組有三臺機器,想要擴展,就需要一次加三臺機器,
  • 不利于系統容錯:一臺機器宕機,讀寫壓力將由剩下的兩臺機器承擔,壓力增加了 50 %,很有可能超過單臺機器的處理能力,

因此,以機器作為副本單位不適合當前的場景,我們需要尋找其它的途徑,

以資料段為單位的副本

相較于以機器為副本單位,將資料拆分成以資料段為單位作為副本的靈活性更佳,下面我就用一個更直觀例子來說明該方案的優點,

該例子下,機器 1 的所有資料都分布在其他的 7 臺機器上,忽略集群中其他的機器,

這種方案為我們帶來了什么好處?

  • 恢復資料的效率高,假設機器 1 資料丟失,需要重新拷貝所有資料,由于資料分布在剩下的 7 臺機器上,我們可以從剩下的所有機器同時拷貝恢復資料,這樣,即使每臺機器都以較低的資源做拷貝作業,也能很快將資料復制完畢,注意,集群越大,每臺機器上承擔的作業量就越小,而且實作了負載均衡,
  • 集群的可擴展性高,當加入一臺新的機器時,我們只需要從每臺機器上遷移 1/8 比例的資料段到新機器上,實作新的負載均衡,
  • 系統容錯性高,假設機器 1 宕機,暫時無法提供服務,那么剩余 7 臺機器的壓力提高 14.3% ,可以接受,

但是這種方案不是沒有問題,因為我們需要一臺服務器來記錄資料段與機器的對應關系,這臺服務器稱為元資料服務器,可以想象,隨著集群規模的增長,需要管理的元資料的開銷也會不斷增大,副本的維護難度相應增大,所以現在一種折中的方案是,將某些資料段組成一個資料段分組,以資料段分組為粒度進行副本管理,這樣,可以將副本粒度控制在一個較為合適的范圍,

分布式存盤的副本分布內容就介紹到這里了,希望你在看完我的文章之后有所識訓,期待你的贊和轉發!

如果本文對你有幫助,歡迎關注我的公眾號 tobe的囈語 ,帶你深入計算機的世界~ 公眾號后臺回復關鍵詞【計算機】有驚喜哦~


  1. https://en.wikipedia.org/wiki/RAID#cite_note-Katz-2 ??

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/26114.html

標籤:大數據

上一篇:hadoop3自學入門筆記(3)-java 操作hdfs

下一篇:Cassandra 在 360 的實踐與改進

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more