蜜桃av色欲a片精品一区,麻豆aⅴ精品无码一区二区,亚洲人成网站在线播放影院在线,亚洲 素人 字幕 在线 最新

微立頂科技

新聞資訊

創(chuàng)新 服務(wù) 價(jià)值

  分布式系統(tǒng)設(shè)計(jì)模式,你用過哪些?

發(fā)布日期:2022/8/16 13:11:07      瀏覽量:

1、布隆過濾器

Bloom過濾器是一種節(jié)省空間的概率數(shù)據(jù)結(jié)構(gòu),用于測試元素是否為某集合的成員。它用于我們只需要檢查元素是否屬于對象的場景。


在BigTable(和Cassandra)中,任何讀取操作都必須從組成Tablet的SSTable中讀取。如果這些SSTable不在內(nèi)存中,則讀取操作可能最終會執(zhí)行許多磁盤訪問以便讀取所需的SSTable。為了減少磁盤訪問次數(shù),BigTable 使用Bloom過濾器。

2、一致性哈希

一致的哈希允許您輕松擴(kuò)展,從而允許以有效的方式復(fù)制數(shù)據(jù),從而實(shí)現(xiàn)更好的可用性和容錯(cuò)能力。

通過對數(shù)據(jù)項(xiàng)的鍵進(jìn)行哈希處理以產(chǎn)生其在環(huán)上的位置,然后順時(shí)針遍歷環(huán)以查找位置大于該項(xiàng)位置的第一個(gè)節(jié)點(diǎn),將每個(gè)由鍵標(biāo)識的數(shù)據(jù)項(xiàng)分配給節(jié)點(diǎn)。與節(jié)點(diǎn)關(guān)聯(lián)的節(jié)點(diǎn)是數(shù)據(jù)項(xiàng)的位置。

一致散列的主要優(yōu)點(diǎn)是增量穩(wěn)定性;節(jié)點(diǎn)離開或到達(dá)集群僅影響其直接鄰居,其他節(jié)點(diǎn)不受影響。

3、Quorum

在分布式環(huán)境中,quorum是在確認(rèn)操作成功之前需要成功執(zhí)行此分布式操作的最小服務(wù)器數(shù)。


Cassandra,為了確保數(shù)據(jù)一致性,每個(gè)寫入請求都可以配置為僅當(dāng)數(shù)據(jù)已寫入至少一個(gè)quorum(或大多數(shù))副本節(jié)點(diǎn)時(shí)才成功。

對于領(lǐng)導(dǎo)者選舉,Chubby使用Paxos,它使用quorum來確保強(qiáng)大的一致性。

Dynamo 將寫入復(fù)制到系統(tǒng)中其他節(jié)點(diǎn)的草率quorum,而不是像Paxos那樣的嚴(yán)格多數(shù)quorum。所有讀/寫操作都在首選項(xiàng)列表中的第一個(gè)NN正常節(jié)點(diǎn)上執(zhí)行,該節(jié)點(diǎn)可能并不總是在遍歷一致哈希環(huán)時(shí)遇到的第一個(gè)NN節(jié)點(diǎn)。

4、領(lǐng)導(dǎo)者(Leader)和追隨者(Follower)

為了在管理數(shù)據(jù)的系統(tǒng)中實(shí)現(xiàn)容錯(cuò),需要在多個(gè)服務(wù)器上復(fù)制數(shù)據(jù)。

在集群中選擇一個(gè)服務(wù)器作為領(lǐng)導(dǎo)者。領(lǐng)導(dǎo)者負(fù)責(zé)代表整個(gè)集群做出決策,并將決策傳播到所有其他服務(wù)器。

三到五個(gè)節(jié)點(diǎn)的集群,就像在實(shí)現(xiàn)共識的系統(tǒng)中一樣,領(lǐng)導(dǎo)者選舉可以在數(shù)據(jù)集群本身內(nèi)實(shí)施,而不依賴于任何外部系統(tǒng)。領(lǐng)導(dǎo)者選舉在服務(wù)器啟動時(shí)進(jìn)行。每個(gè)服務(wù)器在啟動時(shí)都會啟動領(lǐng)導(dǎo)者選舉,并嘗試選舉領(lǐng)導(dǎo)者。除非選出領(lǐng)導(dǎo)者,否則系統(tǒng)不接受任何客戶端請求。

5、心跳

心跳機(jī)制用于檢測現(xiàn)有領(lǐng)導(dǎo)者是否失敗,以便可以啟動新的領(lǐng)導(dǎo)者選舉。

6、Fencing

在領(lǐng)導(dǎo)者-追隨者模式中,當(dāng)領(lǐng)導(dǎo)者失敗時(shí),不可能確定領(lǐng)導(dǎo)者已停止工作。例如,慢速網(wǎng)絡(luò)或網(wǎng)絡(luò)分區(qū)可能會觸發(fā)新的領(lǐng)導(dǎo)者選舉,即使前一個(gè)領(lǐng)導(dǎo)者仍在運(yùn)行并認(rèn)為它仍然是活動的領(lǐng)導(dǎo)者。

屏蔽是指在以前處于活動狀態(tài)的領(lǐng)導(dǎo)者周圍設(shè)置圍欄,使其無法訪問集群資源,從而停止為任何讀/寫請求提供服務(wù)。

使用以下兩種技術(shù):

資源屏蔽:系統(tǒng)會阻止以前處于活動狀態(tài)的領(lǐng)導(dǎo)者訪問執(zhí)行基本任務(wù)所需的資源。

節(jié)點(diǎn)屏蔽:系統(tǒng)會阻止以前處于活動狀態(tài)的領(lǐng)導(dǎo)者訪問所有資源。執(zhí)行此操作的常見方法是關(guān)閉節(jié)點(diǎn)電源或重置節(jié)點(diǎn)。

7、WAL(預(yù)寫日志W(wǎng)rite-ahead Log)

預(yù)寫日志記錄是解決操作系統(tǒng)中文件系統(tǒng)不一致的問題的高級解決方案。受數(shù)據(jù)庫管理系統(tǒng)的啟發(fā),此方法首先將要執(zhí)行的操作的摘要記入“日志”中,然后再將其實(shí)際寫入磁盤。在發(fā)生崩潰的情況下,操作系統(tǒng)只需檢查此日志并從中斷的位置繼續(xù)。

8、分段日志

將日志拆分為多個(gè)較小的文件,而不是單個(gè)大文件,以便于操作。

單個(gè)日志文件在啟動時(shí)讀取時(shí)可能會增長并成為性能瓶頸。較舊的日志會定期清理,并且很難對單個(gè)大文件執(zhí)行清理操作。

單個(gè)日志拆分為多個(gè)段。日志文件在指定的大小限制后滾動。使用日志分段,需要有一種將邏輯日志偏移量(或日志序列號)映射到日志段文件的簡單方法。

9、高水位線(High-Water mark)

跟蹤領(lǐng)導(dǎo)者上的最后一個(gè)日志條目,該條目已成功復(fù)制到追隨者的quorum。日志中此條目的索引稱為高水位線索引。領(lǐng)導(dǎo)者僅公開到高水位線索引的數(shù)據(jù)。

Kafka:為了處理非可重復(fù)讀取并確保數(shù)據(jù)一致性,Kafka broker會跟蹤高水位線,這是特定分區(qū)的最大偏移量。使用者只能看到高水位線之前的消息。

10、租約(Lease)

租約就像一個(gè)鎖,但即使客戶端離開,它也能工作??蛻舳苏埱笥邢奁谙薜淖饧s,之后租約到期。如果客戶端想要延長租約,它可以在租約到期之前續(xù)訂租約。

Chubby客戶端與領(lǐng)導(dǎo)者保持有時(shí)限的會話租約。在此時(shí)間間隔內(nèi),領(lǐng)導(dǎo)者保證不會單方面終止會話。

11、Gossip協(xié)議

Gossip協(xié)議是點(diǎn)對點(diǎn)通信機(jī)制,其中節(jié)點(diǎn)定期交換有關(guān)自己和他們所知道的其他節(jié)點(diǎn)的狀態(tài)信息。

每個(gè)節(jié)點(diǎn)每秒啟動一輪Gossip回合,以與另一個(gè)隨機(jī)節(jié)點(diǎn)交換有關(guān)自己和其他節(jié)點(diǎn)的狀態(tài)信息。

12、Phi 累計(jì)故障檢測(Phi Accrual Failure Detection)

此算法使用歷史檢測信號信息使閾值自適應(yīng)。通用的應(yīng)計(jì)故障檢測器不會判斷服務(wù)器是否處于活動狀態(tài),而是輸出有關(guān)服務(wù)器的可疑級別。

Cassandra使用Phi應(yīng)計(jì)故障檢測器算法來確定群集中節(jié)點(diǎn)的狀態(tài)。

13、腦裂

分布式系統(tǒng)具有兩個(gè)或多個(gè)活動領(lǐng)導(dǎo)者的場景稱為腦裂。

通過使用生成時(shí)鐘(Generation Clock)可以解決腦裂問題,生成時(shí)鐘只是一個(gè)單調(diào)遞增的數(shù)字,用于指示服務(wù)器的生成。

每次選出新領(lǐng)導(dǎo)者時(shí),時(shí)鐘數(shù)字(generation number)都會增加。這意味著,如果舊領(lǐng)導(dǎo)者的時(shí)鐘數(shù)為“1”,則新領(lǐng)導(dǎo)人的時(shí)鐘數(shù)將為“2”。此時(shí)鐘號包含在從領(lǐng)導(dǎo)發(fā)送到其他節(jié)點(diǎn)的每個(gè)請求中。通過這種方式,節(jié)點(diǎn)現(xiàn)在可以通過簡單地信任具有最高數(shù)字的領(lǐng)導(dǎo)者來輕松區(qū)分真正的領(lǐng)導(dǎo)者。

Kafka:為了處理腦裂(我們可以有多個(gè)active controller broker),Kafka使用“紀(jì)元數(shù)”(Epoch number),這只是一個(gè)單調(diào)增加的數(shù)字來表示服務(wù)器的代次(generation)。

HDFS:ZooKeeper用于確保任何時(shí)候只有一個(gè)NameNode處于活動狀態(tài)。epoch編號作為每個(gè)事務(wù)ID的一部分進(jìn)行維護(hù),以反映NameNode的代次。

14、校驗(yàn)和(checksum)

在分布式系統(tǒng)中,在組件之間移動數(shù)據(jù)時(shí),從節(jié)點(diǎn)獲取的數(shù)據(jù)可能會損壞。

計(jì)算校驗(yàn)和并將其與數(shù)據(jù)一起存儲。

要計(jì)算校驗(yàn)和,請使用MD5、SHA-1、SHA-256或SHA-512等加密哈希函數(shù)。哈希函數(shù)獲取輸入數(shù)據(jù)并生成固定長度的字符串(包含字母和數(shù)字);此字符串稱為校驗(yàn)和。

當(dāng)系統(tǒng)存儲某些數(shù)據(jù)時(shí),它會計(jì)算數(shù)據(jù)的校驗(yàn)和,并將校驗(yàn)和與數(shù)據(jù)一起存儲。當(dāng)客戶端檢索數(shù)據(jù)時(shí),它會驗(yàn)證從服務(wù)器接收的數(shù)據(jù)是否與存儲的校驗(yàn)和匹配。如果沒有,則客戶端可以選擇從另一個(gè)副本檢索該數(shù)據(jù)。

HDFS和Chubby將每個(gè)文件的校驗(yàn)和與數(shù)據(jù)一起存儲。

15、CAP定理

CAP定理指出,分布式系統(tǒng)不可能同時(shí)提供以下所有三個(gè)理想屬性:

一致性(C)、可用性(A)和分區(qū)容差(P)。

根據(jù)CAP定理,任何分布式系統(tǒng)都需要從三個(gè)屬性中選擇兩個(gè)。這三個(gè)選項(xiàng)是CA、CP和AP。

Dynamo:在CAP定理術(shù)語中,Dynamo屬于AP系統(tǒng)的類別,旨在犧牲強(qiáng)一致性為代價(jià)實(shí)現(xiàn)高可用性。

BigTable:就CAP定理而言,BigTable是一個(gè)CP系統(tǒng),即它具有嚴(yán)格一致的讀取和寫入。

16、PACELEC定理

PACELC定理指出,在復(fù)制數(shù)據(jù)的系統(tǒng)中:

如果有一個(gè)分區(qū)(’P’),分布式系統(tǒng)可以在可用性和一致性(即’A’和’C’)之間進(jìn)行權(quán)衡;

否則(’E’),當(dāng)系統(tǒng)在沒有分區(qū)的情況下正常運(yùn)行時(shí),系統(tǒng)可以在延遲(’L’)和一致性(’C’)之間進(jìn)行權(quán)衡。

定理(PAC)的第一部分與CAP定理相同,ELC是擴(kuò)展。整個(gè)論點(diǎn)假設(shè)我們通過復(fù)制來保持高可用性。因此,當(dāng)失敗時(shí),CAP定理占上風(fēng)。但如果沒有,我們?nèi)匀槐仨毧紤]復(fù)制系統(tǒng)的一致性和延遲之間的權(quán)衡。

17、提示交接(Hinted Handoff)

如果節(jié)點(diǎn)關(guān)閉,系統(tǒng)會保留它們錯(cuò)過的所有請求的提示(或注釋)。故障節(jié)點(diǎn)恢復(fù)后,將根據(jù)存儲的提示將請求轉(zhuǎn)發(fā)給它們。

當(dāng)節(jié)點(diǎn)關(guān)閉時(shí),領(lǐng)導(dǎo)者會在本地磁盤上的文本文件中寫入提示。此提示包含數(shù)據(jù)及其所屬的節(jié)點(diǎn)信息。當(dāng)領(lǐng)導(dǎo)者意識到它為其保留提示的節(jié)點(diǎn)已恢復(fù)時(shí),它會將每個(gè)提示的寫入請求轉(zhuǎn)發(fā)到該節(jié)點(diǎn)。

18、讀取時(shí)修復(fù)

在分布式系統(tǒng)中,數(shù)據(jù)跨多個(gè)節(jié)點(diǎn)復(fù)制,某些節(jié)點(diǎn)最終可能會擁有過時(shí)的數(shù)據(jù)。

在讀取操作期間修復(fù)過時(shí)的數(shù)據(jù),因?yàn)榇藭r(shí),我們可以從多個(gè)節(jié)點(diǎn)讀取數(shù)據(jù)以進(jìn)行比較并找到具有過時(shí)數(shù)據(jù)的節(jié)點(diǎn)。此機(jī)制稱為讀取修復(fù)。一旦已知具有舊數(shù)據(jù)的節(jié)點(diǎn),讀取修復(fù)操作就會將較新版本的數(shù)據(jù)推送到具有較舊版本的節(jié)點(diǎn)。

Cassandra和Dynamo使用“讀取修復(fù)”將最新版本的數(shù)據(jù)推送到具有舊版本的節(jié)點(diǎn)。

19、默克爾樹(Merkle Trees)

“讀取修復(fù)”可在處理讀取請求時(shí)消除沖突。但是,如果某個(gè)副本明顯落后于其他副本,則可能需要很長時(shí)間才能解決沖突。

副本可以包含大量數(shù)據(jù)。單純地拆分整個(gè)范圍來計(jì)算校驗(yàn)和進(jìn)行比較并不是很可行;有太多的數(shù)據(jù)需要傳輸。相反,我們可以使用Merkle樹來比較一個(gè)范圍的副本。

Merkle樹是哈希的二叉樹,其中每個(gè)內(nèi)部節(jié)點(diǎn)是其兩個(gè)子節(jié)點(diǎn)的哈希,每個(gè)葉節(jié)點(diǎn)是原始數(shù)據(jù)一部分的哈希。


比較Merkle樹在概念上很簡單:

比較兩個(gè)樹的根哈希。

如果它們相等,請停止。

在左邊和右邊的孩子上遞歸檢查。

為了實(shí)現(xiàn)反熵和在后臺解決沖突,Dynamo使用Merkle樹。




  業(yè)務(wù)實(shí)施流程

需求調(diào)研 →

團(tuán)隊(duì)組建和動員 →

數(shù)據(jù)初始化 →

調(diào)試完善 →

解決方案和選型 →

硬件網(wǎng)絡(luò)部署 →

系統(tǒng)部署試運(yùn)行 →

系統(tǒng)正式上線 →

合作協(xié)議

系統(tǒng)開發(fā)/整合

制作文檔和員工培訓(xùn)

售后服務(wù)

馬上咨詢: 如果您有業(yè)務(wù)方面的問題或者需求,歡迎您咨詢!我們帶來的不僅僅是技術(shù),還有行業(yè)經(jīng)驗(yàn)積累。
QQ: 39764417/308460098     Phone: 13 9800 1 9844 / 135 6887 9550     聯(lián)系人:石先生/雷先生