于海水
摘 要:本文,首先分析Cap理論概述,其次闡明Cap理論的內涵與需求,再次探討基于Cap理論的系統(tǒng)設計定理與系統(tǒng)設計模型,旨在進一步優(yōu)化系統(tǒng)設計水平,滿足聯(lián)網的計算機信息傳遞需求。
關鍵詞:Cap理論;系統(tǒng)設計;模型
中圖分類號:TP393.08 文獻標識碼:A 文章編號:1671-2064(2018)23-0027-02
Cap原則又稱Cap定理,是指在同一個分布式系統(tǒng)中,一致性、可用性、分區(qū)容錯性三者不可兼得。如今,隨著互聯(lián)網公司的全球化發(fā)展,Google、Amzon等開始嘗試建立全球數據中心,部署服務。而為滿足可用性,Dynamo、PNUTS等系統(tǒng)都采用了復制技術,這一技術的應用引發(fā)了數據一致性問題,且違背了Cap理論,現(xiàn)應基于Cap理論進行系統(tǒng)設計,有效解決全球化數據中心服務問題。
1 Cap理論概述
1.1 內涵
Cap理論內涵是在網絡數據共享系統(tǒng)環(huán)境下其數據一致性、可用性、分區(qū)容忍性三要素不可兼得,只能同時滿足三要素中其中兩個。在Cap理論興起的十幾年里,很多研究者開始嘗試以Cap理論為基礎探究分布式系統(tǒng)的設計問題,甚至NoSQL運動在研究過程中也將Cap理論作為基礎,用于探究對抗傳統(tǒng)關系型數據庫的設計問題。
Cap理論主張的觀點非常明確,詳細界定了同一個網絡數據共享系統(tǒng)不可兼得一致性、可用性、分區(qū)容錯性,即最多能夠滿足下述條件中兩個。
(1)數據一致性(C),可做到提供一份最新的數據副本,允許所有節(jié)點訪問這一數據副本,使用數據副本;(2)可用性(A),能夠做到及時更新網絡數據共享系統(tǒng)中數據,且當某一部分節(jié)點發(fā)生故障問題以后,系統(tǒng)集群仍可正常響應客戶端讀寫要求;(3)分區(qū)容錯性(P),允許網絡分區(qū)。
Cap理論的出現(xiàn)給設計師提供了很好的設計思路,很多設計師開始以Cap理論為依據,參照取舍方案,設計各種各樣的新系統(tǒng)。
1.2 需求
在分布式環(huán)境下,系統(tǒng)設計中的一致性、可用性、分區(qū)容錯性三要素又可稱為Cap需求。其中,Cap的一致性需求,是指當分布式系統(tǒng)接收到某一數據操作指令時,其系統(tǒng)中多個副本數據會保持一致,進而成功完成多個副本中數據的增、減、刪操作指令。當某一個副本的操作顯示失敗,那么將回到一致性操作前狀態(tài),重新展開多個副本數據的增、減、改操作。在分布系統(tǒng)中,當多個副本數據達到一致性以后,客戶在訪問副本數據過程中將從中獲取到最新的數據,不會呈現(xiàn)出不同客戶端讀取到不同數據的情況。例如,假設分布式環(huán)境下有N1、N2兩個節(jié)點,數據V是N1和N2的共享數據,其初始值是V0。其中,N1節(jié)點所采用的數據算法是A,N2節(jié)點所采用的數據算法是B,算法A和算法B非常相似。前者,可將新值寫入共享數據V,后者可讀取V的值。
在存儲系統(tǒng)保持一致性的基礎上,當新的V值通過算法A寫入到共享數據V以后,將變成數據V1,數據V1將通過節(jié)點N1被發(fā)送至N2,N2將及時更新新的V值。如此,B讀取到的N1節(jié)點、N2節(jié)點V值將是一致的,都是V1。在網絡斷開環(huán)境下,N1節(jié)點通過算法A計算出的新的V值,即V1無法及時發(fā)送到N2節(jié)點,N2節(jié)點的V值仍然是初始值V0,那么B讀取的N1、N2節(jié)點V值將出現(xiàn)不一致的情況。Cap的可用性需求,是指在分布式環(huán)境下,允許客戶端訪問數據。但是,系統(tǒng)上所有節(jié)點響應的數據并不代表是一致的。例如,系統(tǒng)上有N1和N2兩個節(jié)點,客戶端要通過系統(tǒng)節(jié)點獲取文章評論,那么假設N1節(jié)點上數據是最新的,當客戶端通過N2獲取數據時,其返回的數據將缺少最新的一條。在這樣一種情況下,系統(tǒng)仍然被認為是可用的,只有當數據響應時間超過所設定好的響應時間服務,才可認定系統(tǒng)不可用,無法及時反饋所要瀏覽的數據。Cap的分區(qū)容錯性需求,是指在分布系統(tǒng)中將統(tǒng)一數據副本存儲于不同地點,當系統(tǒng)中某些子集合節(jié)點出現(xiàn)故障問題時,分布系統(tǒng)容錯性將支撐整個系統(tǒng)仍然進行正確響應,由此可提高系統(tǒng)的性能。但是,在對系統(tǒng)進行分區(qū)時,要切斷各個分區(qū)之間的網線,保證每個網絡分區(qū)都是孤立的。
由上述論述內容可知,核心系統(tǒng)有一致性、可用性、分區(qū)容錯性三個Cap需求,在基于Cap理論進行系統(tǒng)設計時,要把握好Cap需求。
2 基于Cap理論的系統(tǒng)設計定理
2.1 異步網絡模型
在系統(tǒng)活動增加和吞吐量逐漸上升背景下,Cap定理將顯得尤為重要,基于Cap理論的系統(tǒng)設計異步網絡模型,無統(tǒng)一時鐘,不能同時滿足消息可丟失或不丟失的對等運算一致性、可用性、分區(qū)容錯性Cap需求[1]。同時,在異步網絡模型時,當遇到消息被延遲的問題,任何一個算法都無法準確判斷出消息延遲原因。因為,丟失可造成消息延遲,傳輸通道受阻也可造成消息延遲。
2.2 同步網絡模型
在同步網絡模型中,所有節(jié)點上時鐘功能主要是計時器作用,每一個節(jié)點上時鐘時間顯示值可能不同,但可用于確定調度某事件后經過多長時間間隔進行另一項操作,在給定時間內接收到消息。此外,同步網絡模型與異步網絡模型不同,只是不能同時滿足消息可丟失的對等運算可用性、一致性、分區(qū)容錯性Cap需求。在Cap理論指導下Google開始嘗試使用PC機搭建計算和存儲平臺,PC機的使用讓分布式系統(tǒng)同時滿足了可用性、分區(qū)容錯性兩個Cap需求。另外,在系統(tǒng)未出現(xiàn)故障情況下,分布式系統(tǒng)還能夠提供一致性讀寫服務。
總之,基于Cap理論的系統(tǒng)設計要真正了解系統(tǒng)需求,在把握好系統(tǒng)需求前提下,合適使用Cap理論,處理好3個核心系統(tǒng)需求強調點。
3 基于Cap理論的系統(tǒng)設計模型
基于Cap理論的系統(tǒng)設計模型有ACID和BASE兩種。在ACID模型設計中,重點是依據Cap理論完成現(xiàn)代關系型數據庫的設計,現(xiàn)代關系型數據庫事務正確執(zhí)行依賴于原子性、一致性、隔離性、持久性四個基本元素。其中,原子性是指在包含多個操作的某一事務執(zhí)行時,一旦開始執(zhí)行這一事務,必須保證完成所有操作,如若某一操作沒有完成,要回到事務開始狀態(tài),重新完成操作的正確執(zhí)行。以A給B轉賬100元為案例,當開啟事務之后,要么事務中的操作都發(fā)生,要么事務中的操作都不發(fā)生。如下所示:
Begin transaction
Update account set money=money-100where name=‘A;
Update account set money=money+100where name=‘B;
If Error then
Rollback
Else
Commit
在上述案例中,扣款和加款兩條語句,要么都執(zhí)行,要么都不執(zhí)行。
一致性,是指數據庫事物執(zhí)行時系統(tǒng)開始狀態(tài)、結束狀態(tài)、給定并發(fā)數等等,都是不變的、一致的[2]。以銀行轉賬事務為例,在銀行轉賬事務執(zhí)行過程中,無論是事務執(zhí)行成功,還是事務執(zhí)行失敗,事務結束以后ACCOUNT表中aaa和bbb的存款總額應是2000元,業(yè)務邏輯要保持一致性。而為了更好的實現(xiàn)一致性,在ACID模型具體設計過程中,要建立起一個數據庫機制,用于約束事務執(zhí)行中的數據庫層面,保證其符合Check約束、唯一約束等。還有,ACID模型開發(fā)人員應處理好業(yè)務一致性問題。隔離性,是指關系型數據庫中兩個相同的事務會被隔離開來,事務之間不會相互影響,由此在隔離狀態(tài)下提高數據庫事務正確執(zhí)行效率。持久性,是指當事務執(zhí)行操作完成以后,事務執(zhí)行結果會保存到數據庫?;谏鲜鏊膫€基本元素基礎上,ACID模型設計實現(xiàn)方式要依附于WAL和shadow paging兩種形式,這兩種技術相比較,后者更加簡單,且能夠在沒有redo和undo的支持下提高寫日志記錄的開銷恢復速度。shadow paging與WAL技術相比,缺點也比較明顯,要以“塊”為單位完成事務提交輸出操作,無法滿足多個事務并發(fā)執(zhí)行需求。WAL技術,是在修改已經記錄日志后對數據文件進行修改,即當日志記錄沖刷到永久存儲器后可通過日志恢復數據庫方式,完成事務提交操作。整個過程中,如若發(fā)現(xiàn)尚未附加到數據頁記錄的情況,要以向前滾動恢復(REDO)方式在日志記錄中重做,保證事務執(zhí)行效果。
基于Cap理論的BASE模型設計,是反ACID模型,它在模型具體設計過程中不再強調一直性,而是重點考慮數據庫可用性。BASE模型,基本可以支持分區(qū)失敗,狀態(tài)可以在一段時間不同步,只要保證數據最終一致即可。所以說,BASE模型是反ACID模型,做了可用性與一致性之間的一個取舍。BASE模型的設計要依附于按功能劃分數據庫與sharding碎片兩種實現(xiàn)方式,其中,在利用sharding基本原理進行BASE模型設計時,要先根據數據庫實際情況,把數據庫分為多個部分。待數據庫切分完畢之后,將切分好的各個部分放置于不同數據庫上,有效提高單一數據庫整體性能[3]。但是,在海量數據的數據庫處理時,要根據這一種類型數據庫表多、數據多的特點,以垂直切分法為主將一個數據庫切分成多個部分。然后,再將各個部分方在sever上,由此達到最佳的BASE模型設計狀態(tài)。
總之,BASE模型設計中心思想是強調可用性,在滿足基本的可用性基礎上,可犧牲容忍性和一致性?,F(xiàn)階段,BASE模型設計性能方面的潛能還是有待挖掘的,在基于Cap理論的BASE模型具體設計中,NOSQL運動豐富了BASE模型設計方案。其一,可在BASE模型設計中參照Amaze Dynamo等人提出的Key-Value存儲思想,靈活選擇Cap三原則,設計多樣化數據庫產品。其二,可根據自己項目需求,通過靈活選擇Cap三原則,設計領域模型+分布式緩存+存儲的BASE模型,這種BASE模型設計形式與前者相比,難度更高。但不管是Key-Value存儲模型設計還是領域模型+分布式緩存+存儲的BASE模型設計,其存儲都可以是同步,也可以是異步。從二者不同點角度來看,第一種模型設計方式更加適用于非Java工作環(huán)境下,可用性更高。而第二種模型設計中更加靈活,但它只是一種架構解決方案,不能拿來就用。
4 結語
綜上可知,在系統(tǒng)設計中,復制技術的運用引發(fā)了一致性問題。在一致性問題解決過程中使用Cap理論加以指導十分重要,基于Cap理論指導的系統(tǒng)設計要遵從異步網絡模型和同步網絡模型設計定理,并通過優(yōu)化系統(tǒng)設計模型徹底解決原有系統(tǒng)設計中的一致性問題,創(chuàng)造一個良好的互聯(lián)網數據中心運行環(huán)境。
參考文獻
[1]黃瑜.大型數據庫的關聯(lián)挖掘算法設計[J].現(xiàn)代電子技術,2018,30(20):45-48.
[2]張青,任宏.智能人機交互通信系統(tǒng)設計與實現(xiàn)[J].現(xiàn)代電子技術,2018,22(20):175-178.
[3]侯荷潔.大數據環(huán)境下的軍事期刊數據庫建設芻議[J].國防,2018,11(09):68-71.