當前位置:首頁 » 存儲配置 » 數據存儲演算法

數據存儲演算法

發布時間: 2023-08-26 15:49:40

① 數據在網路上傳輸為什麼要加密現在常用的數據加密演算法主要有哪些

數據傳輸加密技術的目的是對傳輸中的數據流加密,通常有線路加密與端—端加密兩種。線路加密側重在線路上而不考慮信源與信宿,是對保密信息通過各線路採用不同的加密密鑰提供安全保護。

端—端加密指信息由發送端自動加密,並且由TCP/IP進行數據包封裝,然後作為不可閱讀和不可識別的數據穿過互聯網,當這些信息到達目的地,將被自動重組、解密,而成為可讀的數據。

數據存儲加密技術的目的是防止在存儲環節上的數據失密,數據存儲加密技術可分為密文存儲和存取控制兩種。前者一般是通過加密演算法轉換、附加密碼、加密模塊等方法實現;後者則是對用戶資格、許可權加以審查和限制,防止非法用戶存取數據或合法用戶越權存取數據。

常見加密演算法

1、DES(Data Encryption Standard):對稱演算法,數據加密標准,速度較快,適用於加密大量數據的場合;

2、3DES(Triple DES):是基於DES的對稱演算法,對一塊數據用三個不同的密鑰進行三次加密,強度更高;

3、RC2和RC4:對稱演算法,用變長密鑰對大量數據進行加密,比 DES 快;

4、IDEA(International Data Encryption Algorithm)國際數據加密演算法,使用 128 位密鑰提供非常強的安全性;

5、RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰演算法,需要加密的文件塊的長度也是可變的,非對稱演算法; 演算法如下:

首先, 找出三個數,p,q,r,其中 p,q 是兩個不相同的質數,r 是與 (p-1)(q-1) 互為質數的數。

p,q,r這三個數便是 private key。接著,找出 m,使得 rm == 1 mod (p-1)(q-1).....這個 m 一定存在,因為 r 與 (p-1)(q-1) 互質,用輾轉相除法就可以得到了。再來,計算 n = pq.......m,n 這兩個數便是 public key。

6、DSA(Digital Signature Algorithm):數字簽名演算法,是一種標準的 DSS(數字簽名標准),嚴格來說不算加密演算法;

7、AES(Advanced Encryption Standard):高級加密標准,對稱演算法,是下一代的加密演算法標准,速度快,安全級別高,在21世紀AES 標準的一個實現是 Rijndael 演算法。

8、BLOWFISH,它使用變長的密鑰,長度可達448位,運行速度很快;

9、MD5:嚴格來說不算加密演算法,只能說是摘要演算法;

對MD5演算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。

(1)數據存儲演算法擴展閱讀

數據加密標准

傳統加密方法有兩種,替換和置換。上面的例子採用的就是替換的方法:使用密鑰將明文中的每一個字元轉換為密文中的一個字元。而置換僅將明文的字元按不同的順序重新排列。單獨使用這兩種方法的任意一種都是不夠安全的,但是將這兩種方法結合起來就能提供相當高的安全程度。

數據加密標准(Data Encryption Standard,簡稱DES)就採用了這種結合演算法,它由IBM制定,並在1977年成為美國官方加密標准。

DES的工作原理為:將明文分割成許多64位大小的塊,每個塊用64位密鑰進行加密,實際上,密鑰由56位數據位和8位奇偶校驗位組成,因此只有56個可能的密碼而不是64個。

每塊先用初始置換方法進行加密,再連續進行16次復雜的替換,最後再對其施用初始置換的逆。第i步的替換並不是直接利用原始的密鑰K,而是由K與i計算出的密鑰Ki。

DES具有這樣的特性,其解密演算法與加密演算法相同,除了密鑰Ki的施加順序相反以外。

參考資料來源:網路-加密演算法

參考資料來源:網路-數據加密

② 數據的演算法都有哪些……

A*搜尋演算法
俗稱A星演算法。這是一種在圖形平面上,有多個節點的路徑,求出最低通過成本的演算法。常用於游戲中的 NPC的移動計算,或線上游戲的 BOT的移動計算上。該演算法像 Dijkstra演算法一樣,可以找到一條最短路徑;也像BFS一樣,進行啟發式的搜索。

Beam Search
束搜索(beam search)方法是解決優化問題的一種啟發式方法,它是在分枝定界方法基礎上發展起來的,它使用啟發式方法估計k個最好的路徑,僅從這k個路徑出發向下搜索,即每一層只有滿意的結點會被保留,其它的結點則被永久拋棄,從而比分枝定界法能大大節省運行時間。束搜索於20 世紀70年代中期首先被應用於 人工智慧領域,1976 年Lowerre在其稱為 HARPY的語音識別系統中第一次使用了束搜索方法。他的目標是並行地搜索幾個潛在的最優決策路徑以減少回溯,並快速地獲得一個解。

二分取中查找演算法
一種在有序數組中查找某一特定元素的搜索演算法。搜素過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜素過程結束;如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。這種搜索演算法每一次比較都使搜索范圍縮小一半。

Branch and bound
分支定界演算法是一種在問題的解空間樹上搜索問題的解的方法。但與回溯演算法不同,分支定界演算法採用廣度優先或最小耗費優先的方法搜索解空間樹,並且,在分支定界演算法中,每一個活結點只有一次機會成為擴展結點。

數據壓縮
數據壓縮是通過減少計算機中所存儲數據或者通信傳播中數據的冗餘度,達到增大數據密度,最終使數據的存儲空間減少的技術。數據壓縮在文件存儲和分布式系統領域有著十分廣泛的應用。數據壓縮也代表著尺寸媒介容量的增大和網路帶寬的擴展。

Diffie–Hellman密鑰協商
Diffie–Hellman key exchange,簡稱「D–H」,是一種安全協議。它可以讓雙方在完全沒有對方任何預先信息的條件下通過不安全信道建立起一個密鑰。這個密鑰可以在後續的通訊中作為對稱密鑰來加密通訊內容。

Dijkstra』s 演算法
迪科斯徹演算法(Dijkstra)是由荷蘭計算機科學家艾茲格·迪科斯徹發明的。演算法解決的是有向圖中單個源點到其他頂點的最短路徑問題。舉例來說,如果圖中的頂點表示城市,而邊上的權重表示著城市間開車行經的距離,迪科斯徹演算法可以用來找到兩個城市之間的最短路徑。

動態規劃
動態規劃是一種在 數學和計算機科學中使用的,用於求解包含重疊子問題的最優化問題的方法。其基本思想是,將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。 動態規劃的思想是多種演算法的基礎,被廣泛應用於計算機科學和工程領域。比較著名的應用實例有:求解最短路徑問題,背包問題,項目管理,網路流優化等。這里也有一篇文章說得比較詳細。

歐幾里得演算法
在 數學中,輾轉相除法,又稱 歐幾里得演算法,是求 最大公約數的演算法。輾轉相除法首次出現於 歐幾里得的《幾何原本》(第VII卷,命題i和ii)中,而在中國則可以追溯至 東漢出現的《九章算術》。

快速傅里葉變換(FFT)
快速傅里葉變換(Fast Fourier Transform,FFT),是離散傅里葉變換的快速演算法,也可用於計算離散傅里葉變換的逆變換。快速傅里葉變換有廣泛的應用,如數字信號處理、計算大整數乘法、求解偏微分方程等等。

哈希函數
HashFunction是一種從任何一種數據中創建小的數字「指紋」的方法。該 函數將數據打亂混合,重新創建一個叫做散列值的指紋。散列值通常用來代表一個短的隨機字母和數字組成的字元串。好的散列 函數在輸入域中很少出現散列沖突。在散列表和數據處理中,不抑制沖突來區別數據,會使得資料庫記錄更難找到。

堆排序
Heapsort是指利用堆積樹(堆)這種 數據結構所設計的一種排序演算法。堆積樹是一個近似完全二叉樹的結構,並同時滿足堆積屬性:即子結點的鍵值或索引總是小於(或者大於)它的父結點。

歸並排序
Merge sort是建立在歸並操作上的一種有效的排序演算法。該演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。

RANSAC 演算法
RANSAC 是」RANdom SAmpleConsensus」的縮寫。該演算法是用於從一組觀測數據中估計 數學模型參數的迭代方法,由Fischler and Bolles在1981提出,它是一種非確定性演算法,因為它只能以一定的概率得到合理的結果,隨著迭代次數的增加,這種概率是增加的。該演算法的基本假設是觀測數據集中存在」inliers」(那些對模型參數估計起到支持作用的點)和」outliers」(不符合模型的點),並且這組觀測數據受到雜訊影響。RANSAC 假設給定一組」inliers」數據就能夠得到最優的符合這組點的模型。

RSA加密演演算法
這是一個公鑰加密演算法,也是世界上第一個適合用來做簽名的演算法。今天的RSA已經 專利失效,其被廣泛地用於 電子商務加密,大家都相信,只要密鑰足夠長,這個演算法就會是安全的。

並查集Union-find
並查集是一種樹型的 數據結構,用於處理一些不相交集合(Disjoint Sets)的合並及查詢問題。常常在使用中以森林來表示。

Viterbi algorithm
尋找最可能的隱藏狀態序列
等等這些,演算法很多。

③ 雲計算環境下的數據安全存儲技術_雲計算數據安全

【 摘 要 】 作為雲計算在發展過程中的主要問題,數據安全在雲計算使用中的性能還需要大幅提高,同時,還應該有效提高數據運行中的讀寫效率問題。本文在研究已有演算法的基礎上,採用對稱和費對稱的加密演算法來對數據進行加密和解密操作,從而有效實現了一種安全性和讀寫效率都比較高的數據存儲巧族數策略,從而順利實現數據在安全性達到非對稱密鑰加密的前提下,使所用演算法阿德效率更加接近對稱密鑰加密的水平。
【 關鍵詞 】 雲計算;雲存儲;數據安全;加密演算法;安全策略
1 引言
近幾年來,雲計算已經逐漸成為人們熱衷研究和開發的領域,受到了多個領域、多個行業的人們的普遍關注。所以,本文對基於雲計算模型的數據存儲服務模型進行廣泛研究,在充分考慮雲計算模型具有成本低且實現靈活的特點的基礎上,提出了一種面向服務的數據存儲和傳輸方案,該方案通過將對稱加密和費對稱加密算相結合,實現對數據的加密和解密,為雲計算服務在應用中的數據安全問題找到一種行之有效的方法。
2 雲計算相關概念
從其本質上來看,雲計算其實就是一種分布式系統,該系統能夠成分借鑒互聯網將分散的超大規模計算能力實穗此體和各種存儲資源進行有效整合,然後再將該系統所能夠實現的服務反饋給用戶。在這些過程中,採用高安全性的雲存儲是實現雲計算所有服務的基本條件,通過互聯網上的各種存儲設備,可以構成龐大的雲存儲系統,這也是雲計算環境下對數據進行存儲和調用的基礎,這樣,雲存儲就可以通過分布式的系統來實現將分散存儲設備整合為一個高性能整體的目的。
2.1 數據容錯管理
在眾多的性能要求中,可靠性是存儲系統的最根本要求。而對於具有大量節點且系統結構復雜的雲存儲系統來說,系統的可靠性更加重要。在雲存儲結構中,可以充分利用分布式數據的備份功能,並將其作為提高系統可靠性的有效手段和方式,同時,還可以通過增強系統的容錯能力來確保數據的一致性。
2.2 雲存儲運行效率
雲計算過程中,對數據進行存儲和備份會極大地導致系統整體輸入和輸出的延遲,因此,如何提供雲存儲系統的運行效率也是應該考慮的問題。
2.3 數據的安全性
在雲計算理念的應用過程中,數據的安全問題早就成為人們關注的問題,所以,為了能夠從根本上提高數據安全性,徹底解決數據在存儲處理中的安全問題,從根本上提高雲計算的防護能力,然後再根據雲計算系統中可能存在的安全威脅和安全請求,從確定數據的安全策略。
3 雲計算的數據安全存儲分析
雲計算不僅能夠給人們帶來極大便利,還有可能由於數據的集中處理而危及到用戶的數據安全性。在眾多現在已經廣泛應用的雲計算系統中,數據的安全性問題一直為人們所擔憂,這也是雲計算在應用過程中所面臨的巨大挑戰。現在,雲計算的基礎是應用廣泛的分布式網路,在這種體系下,每台網路終端都可以看成是一個節點,所以,如果沒有完善的安全保障,理論上,可以通過任何節點對其他節點進行訪問,給雲計算的數據安全帶來隱患。一般而言,雲計算體系中的數據安全主要涉及數據傳輸、恢復、長期生存等諸多問題。
4 雲計算環境下的數據安全存儲策略
現在,經常使用的數據加密演算法主要為對稱加密演算法和非對稱加密演算法等兩類。統計表明,對稱加密演算法的理論比較成熟,應用較為廣泛,且由於該類演算法的加密和解密的實現比較容易,而被廣泛的應用於大數據量的數據傳輸,在基於對稱加密的演算法中個,數據的接收和發送發可以利用同一個密鑰對數據進行加密和解密。相對於對稱加密演算法,就是非對稱加密演算法,該類算撒可以將傳統的密鑰分為加密鑰和解密鑰,從而實現對數據加密和解密的分開控制,從而在計算復雜度上確保的安全性。
4.1 加密處理
在對數據的加密過程中,可以通過對稱加密算的密鑰生成器器,來隨機生成包含校驗信息的密鑰,然後再將包含給校驗信息的密鑰通過非對稱加密演算法進行加密。這樣,就可以將經過加密演算法處理後的數據信息和對稱加密演算法的密鑰密文,統一打包後發給用戶端。此外,在實現數據加密過孝首程中,可以將數據量巨大的用戶數據通過對稱的加密演算法對其進行加密,不僅如此,還可對數據量較小的對稱加密演算法的有關密鑰通過非對稱演算法進行加密,可以將這兩中的加密鑰和密文數據一起存儲在雲存儲中心,而在用戶終端,只對非對稱加密演算法和解密密鑰進行保存就可以。
4.2 解密處理
在對數據進行解密的過程中,用戶首先應該利用非對稱加密演算法的有關密鑰對對稱演算法的密鑰進行解密,以此來還原密鑰;然後,在根據還原的密鑰通過對稱演算法對數據包進行解密,這樣就可以對全文進行還原。通過對兩種加密演算法的結合使用,能夠充分發揮兩類演算法的優點,最大限度的避免演算法缺陷給數據安全帶來的影響,可以在保證密鑰安全的同時,利用對稱密鑰來對所有數據進行加密,還可以利用非對稱密鑰對數據非常小的校驗信息進行加密。通過這種復合演算法,希望數據安全性在達到非對稱密鑰演算法水平的同時,是演算法的效率接近或達到對稱密鑰演算法的加密水平,徹底解決現代雲計算中所面臨的數據安全性問題。
5 結束語
雲計算已經逐漸成為人們熱衷研究和開發的領域,受到了人們的普遍關注。本文對基於雲計算模型的數據存儲服務模型進行廣泛研究,採用一種面向服務的數據存儲和傳輸方案,該方案通過將對稱加密和費對稱加密算相結合,實現對數據的加密和解密,為雲計算服務在應用中的數據安全問題找到一種行之有效的方法。
參考文獻
[1] 劉新華,胡純蓉.雲計算中數據安全關鍵技術和解決方案[J]. 全國商情(理論研究), 2011(04).
[2] 章功干.面向雲計算的安全數據關鍵技術研究[J].科技信息,2011(30).
[3] Armbrust M, Fox A, Griffith R,etal. Above the clouds: A Berkeley view of cloud computing. 2009.
[4] Bellard F.QEMU,a Fast and Portable Dynamic Translator[A]. 2005.
[5] 呂驥,張堯學,周悅芝.雲計算環境中P2P計算的優化組織模型[J]. 清華大學學報(自然科學版),2011(11).
[6] 孟慶偉,劉婷.基於雲計算的網路教學系統的設計與實現[J].信息與電腦(理論版), 2011(11).
[7] 沈文傑.基於雲計算的關鍵技術在高校中的應用與研究[J].信息與電腦(理論版),2011(11).
[8] Rangan K,Cooke A,Post J,et al.The Cloud Wars:100+billionat stake[J]. 2008.

作者簡介:
蘇孝青(1981-),男,漢族,江蘇常熟人,工程師,碩士學位,主要從事信息網路安全研究。
盛志華,男,漢族,江蘇常熟人,工程師,本科,主要從事信息網路。

④ 金窩窩區塊鏈技術的核心演算法(分布式存儲)是指什麼

分布式存儲是一種數據存儲技術,通過網路使用每台機器上的磁碟空間,並將這些分散的存儲資源構成一個虛擬的存儲設備,數據分散的存儲在網路中的各個角落。

⑤ 分布式存儲中,怎樣使用paxos演算法保證數據的一致性

在分布式系統中,我們經常遇到多數據副本保持一致的問題,在我們所能找到的資料中該問題講的很籠統,模模糊糊的,把多個問題或分類糅合在一起,難以理解。在思考和翻閱資料後,通俗地把一致性的問題可分解為2個問題:
1、任何一次修改保證數據一致性。
2、多次數據修改的一致性。
在弱一致性的演算法,不要求每次修改的內容在修改後多副本的內容是一致的,對問題1的解決比較寬松,更多解決問題2,該類演算法追求每次修改的高度並發性,減少多副本之間修改的關聯性,以獲得更好的並發性能。例如最終一致性,無所謂每次用戶修改後的多副本的一致性及格過,只要求在單調的時間方向上,數據最終保持一致,如此獲得了修改極大的並發性能。
在強一致性的演算法中,強調單次修改後結果的一致,需要保證了對問題1和問題2要求的實現,犧牲了並發性能。本文是討論對解決問題1實現演算法,這些演算法往往在強一致性要求的應用中使用。
解決問題1的方法,通常有兩階段提交演算法、採用分布式鎖服務和採用樂觀鎖原理實現的同步方式,下面分別介紹這幾種演算法的實現原理。

兩階段提交演算法

在兩階段提交協議中,系統一般包含兩類機器(或節點):一類為協調者(coordinator),通常一個系統中只有一個;另一類為事務參與者(participants,cohorts或workers),一般包含多個,在數據存儲系統中可以理解為數據副本的個數。兩階段提交協議由兩個階段組成,在正常的執行下,這兩個階段的執行過程如下所述:
階段1:請求階段(commit-request phase,或稱表決階段,voting phase)。
在請求階段,協調者將通知事務參與者准備提交或取消事務,然後進入表決過程。在表決過程中,參與者將告知協調者自己的決策:同意(事務參與者本地作業執行成功)或取消(本地作業執行故障)。
階段2:提交階段(commit phase)。
在該階段,協調者將基於第一個階段的投票結果進行決策:提交或取消。當且僅當所有的參與者同意提交事務協調者才通知所有的參與者提交事務,否則協調者將通知所有的參與者取消事務。參與者在接收到協調者發來的消息後將執行響應的操作。
舉個例子:A組織B、C和D三個人去爬長城:如果所有人都同意去爬長城,那麼活動將舉行;如果有一人不同意去爬長城,那麼活動將取消。用2PC演算法解決該問題的過程如下:
首先A將成為該活動的協調者,B、C和D將成為該活動的參與者。
階段1:A發郵件給B、C和D,提出下周三去爬山,問是否同意。那麼此時A需要等待B、C和D的郵件。B、C和D分別查看自己的日程安排表。B、C發現自己在當日沒有活動安排,則發郵件告訴A它們同意下周三去爬長城。由於某種原因,D白天沒有查看郵件。那麼此時A、B和C均需要等待。到晚上的時候,D發現了A的郵件,然後查看日程安排,發現周三當天已經有別的安排,那麼D回復A說活動取消吧。
階段2:此時A收到了所有活動參與者的郵件,並且A發現D下周三不能去爬山。那麼A將發郵件通知B、C和D,下周三爬長城活動取消。此時B、C回復A「太可惜了」,D回復A「不好意思」。至此該事務終止。
兩階段提交演算法在分布式系統結合,可實現單用戶對文件(對象)多個副本的修改,多副本數據的同步。其結合的原理如下:
1、客戶端(協調者)向所有的數據副本的存儲主機(參與者)發送:修改具體的文件名、偏移量、數據和長度信息,請求修改數據,該消息是1階段的請求消息。
2、存儲主機接收到請求後,備份修改前的數據以備回滾,修改文件數據後,向客戶端回應修改成功的消息。 如果存儲主機由於某些原因(磁碟損壞、空間不足等)不能修改數據,回應修改失敗的消息。
3、客戶端接收發送出去的每一個消息回應,如果存儲主機全部回應都修改成功,向每存儲主機發送確認修改的提交消息;如果存在存儲主機回應修改失敗,或者超時未回應,客戶端向所有存儲主機發送取消修改的提交消息。該消息是2階段的提交消息。
4、存儲主機接收到客戶端的提交消息,如果是確認修改,則直接回應該提交OK消息;如果是取消修改,則將修改數據還原為修改前,然後回應取消修改OK的消息。
5、 客戶端接收全部存儲主機的回應,整個操作成功。
在該過程中可能存在通信失敗,例如網路中斷、主機宕機等諸多的原因,對於未在演算法中定義的其它異常,都認為是提交失敗,都需要回滾,這是該演算法基於確定的通信回復實現的,在參與者的確定回復(無論是回復失敗還是回復成功)之上執行邏輯處理,符合確定性的條件當然能夠獲得確定性的結果哲學原理。

分布式鎖服務

分布式鎖是對數據被外界修改持保守態度,在整個數據處理過程中將數據處於鎖定狀態,在用戶修改數據的同時,其它用戶不允許修改。
採用分布式鎖服務實現數據一致性,是在操作目標之前先獲取操作許可,然後再執行操作,如果其他用戶同時嘗試操作該目標將被阻止,直到前一個用戶釋放許可後,其他用戶才能夠操作目標。分析這個過程,如果只有一個用戶操作目標,沒有多個用戶並發沖突,也申請了操作許可,造成了由於申請操作許可所帶來的資源使用消耗,浪費網路通信和增加了延時。
採用分布式鎖實現多副本內容修改的一致性問題, 選擇控制內容顆粒度實現申請鎖服務。例如我們要保證一個文件的多個副本修改一致, 可以對整個文件修改設置一把鎖,修改時申請鎖,修改這個文件的多個副本,確保多個副本修改的一致,修改完成後釋放鎖;也可以對文件分段,或者是文件中的單個位元組設置鎖, 實現更細顆粒度的鎖操作,減少沖突。
常用的鎖實現演算法有Lamport bakery algorithm (俗稱麵包店演算法), 還有Paxos演算法。下面對其原理做簡單概述。

Lamport麵包店演算法

是解決多個線程並發訪問一個共享的單用戶資源的互斥問題的演算法。 由Leslie Lamport(英語:Leslie Lamport)發明。
Lamport把這個並發控制演算法可以非常直觀地類比為顧客去麵包店采購。麵包店只能接待一位顧客的采購。已知有n位顧客要進入麵包店采購,安排他們按照次序在前台登記一個簽到號碼。該簽到號碼逐次加1。根據簽到號碼的由小到大的順序依次入店購貨。完成購買的顧客在前台把其簽到號碼歸0. 如果完成購買的顧客要再次進店購買,就必須重新排隊。
這個類比中的顧客就相當於線程,而入店購貨就是進入臨界區獨占訪問該共享資源。由於計算機實現的特點,存在兩個線程獲得相同的簽到號碼的情況,這是因為兩個線程幾乎同時申請排隊的簽到號碼,讀取已經發出去的簽到號碼情況,這兩個線程讀到的數據是完全一樣的,然後各自在讀到的數據上找到最大值,再加1作為自己的排隊簽到號碼。為此,該演算法規定如果兩個線程的排隊簽到號碼相等,則線程id號較小的具有優先權。
把該演算法原理與分布式系統相結合,即可實現分步鎖。

Paxos演算法

該演算法比較熱門,參見WIKI,http://zh.wikipedia.org/wiki/Paxos%E7%AE%97%E6%B3%95
Paxos演算法解決的問題是一個分布式系統如何就某個值(決議)達成一致。一個典型的場景是,在一個分布式資料庫系統中,如果各節點的初始狀態一致,每個節點都執行相同的操作序列,那麼他們最後能得到一個一致的狀態。為保證每個節點執行相同的命令序列,需要在每一條指令上執行一個「一致性演算法」以保證每個節點看到的指令一致。一個通用的一致性演算法可以應用在許多場景中,是分布式計算中的重要問題。節點通信存在兩種模型:共享內存(Shared memory)和消息傳遞(Messages passing)。Paxos演算法就是一種基於消息傳遞模型的一致性演算法。BigTable使用一個分布式數據鎖服務Chubby,而Chubby使用Paxos演算法來保證備份的一致性。

採用樂觀鎖原理實現的同步

我們舉個例子說明該演算法的實現原理。如一個金融系統,當某個操作員讀取用戶的數據,並在讀出的用戶數據的基礎上進行修改時(如更改用戶帳戶余額),如果採用前面的分布式鎖服務機制,也就意味著整個操作過程中(從操作員讀出數據、開始修改直至提交修改結果的全過程,甚至還包括操作員中途去煮咖啡的時間),資料庫記錄始終處於加鎖狀態,可以想見,如果面對幾百上千個並發,這樣的情況將導致怎樣的後果。
樂觀鎖機制在一定程度上解決了這個問題。樂觀鎖,大多是基於數據版本( Version)記錄機制實現。何謂數據版本?即為數據增加一個版本標識,在基於資料庫表的版本解決方案中,一般是通過為資料庫表增加一個 「version」 欄位來實現。讀取出數據時,將此版本號一同讀出,之後更新時,對此版本號加一。此時,將提交數據的版本數據與資料庫表對應記錄的當前版本信息進行比對,如果提交的數據版本號大於資料庫表當前版本號,則予以更新,否則認為是過期數據。
對於上面修改用戶帳戶信息的例子而言,假設資料庫中帳戶信息表中有一個 version 欄位,當前值為 1 ;而當前帳戶余額欄位( balance )為 $100 。
操作員 A 此時將其讀出(version=1 ),並從其帳戶余額中扣除 $50($100-$50 )。
在操作員 A 操作的過程中,操作員B也讀入此用戶信息( version=1 ),並從其帳戶余額中扣除 $20 ( $100-$20 )。
操作員 A 完成了修改工作,將數據版本號加一( version=2 ),連同帳戶扣除後余額( balance=$50 ),提交至資料庫更新,此時由於提交數據版本大於資料庫記錄當前版本,數據被更新,資料庫記錄 version 更新為 2 。
操作員 B 完成了操作,也將版本號加一( version=2 )試圖向資料庫提交數據( balance=$80 ),但此時比對資料庫記錄版本時發現,操作員 B 提交的數據版本號為 2 ,資料庫記錄當前版本也為 2 ,不滿足 「 提交版本必須大於記錄當前版本才能執行更新 「 的樂觀鎖策略,因此,操作員 B 的提交被駁回。這樣,就避免了操作員 B 用基於 version=1 的舊數據修改的結果覆蓋操作員A 的操作結果的可能。
樂觀鎖機制與分布式系統相結合上, 我整理了偽代碼如下:
obj 操作的目標
vlaue 修改的值
atom_update_ver 每個目標上的版本,每次修改該值遞增
set( obj, value)
{
//從每個節點上取出修改前的對象版本
get original_ver = obj.atom_update_ver from each node;
//將值賦到每個節點的obj目標
set obj = value from each node;
//條件修改每個節點的obj版本,目標版本加一
//比較和修改操作是原子操作
result = (set obj.atom_update_ver = original_ver + 1
where original_ver + 1 > obj.atom_update_ver
for each node);
if(result == ok)
return set_ok;
else
return set(obj, value);//不成功遞歸修改

該演算法未考慮節點下線、失效等問題,在後續我將分析採用樂觀鎖原理實現一致性演算法,解決問題2、節點失效、通信失敗等問題。

熱點內容
創建資料庫過程 發布:2025-01-31 20:06:31 瀏覽:429
諾安成長與鑫靈活配置哪個好 發布:2025-01-31 19:58:54 瀏覽:604
b樹磁碟存儲 發布:2025-01-31 19:42:53 瀏覽:837
聯想小新air15怎麼配置環境 發布:2025-01-31 19:06:57 瀏覽:968
什麼配置玩3a 發布:2025-01-31 19:05:22 瀏覽:586
phpoa系統 發布:2025-01-31 18:58:42 瀏覽:10
值e的編程 發布:2025-01-31 18:57:06 瀏覽:977
安卓手機的軟體認證在哪裡 發布:2025-01-31 18:57:01 瀏覽:535
android彈出來 發布:2025-01-31 18:56:56 瀏覽:232
辦公室白領新解壓方法 發布:2025-01-31 18:55:23 瀏覽:558