偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

容錯(cuò)虛擬機(jī)分布式系統(tǒng)的設(shè)計(jì)

數(shù)據(jù)庫(kù) 分布式
本文主要講述如何使用虛擬機(jī)來(lái)設(shè)計(jì)一個(gè)分布式容錯(cuò)系統(tǒng)。

這篇文章是我閱讀論文《 The Design of a Practical System for Fault-Tolerant Virtual Machines 》時(shí)的筆記,這篇論文是 VMware 發(fā)表的論文,使用虛擬機(jī)來(lái)設(shè)計(jì)一個(gè)分布式容錯(cuò)系統(tǒng)。

在分布式系統(tǒng)中,容錯(cuò)方法有很多種,常見(jiàn)的傳統(tǒng)方法有:主/副服務(wù)器方法(當(dāng)主服務(wù)器宕機(jī)之后,由副服務(wù)器來(lái)接管它的工作),這種方法通常需要機(jī)器之間的高帶寬。

另外還有確定(deterministic)狀態(tài)機(jī)方法:將另一臺(tái)服務(wù)器初始化為和主服務(wù)器一樣的狀態(tài),然后讓它們都接受到同樣的輸入,這樣它們的狀態(tài)始終保持一致,但是這種方法對(duì)于非確定的(non-deterministic)操作并不適用。

本文中討論的方法是使用虛擬機(jī)作為狀態(tài)機(jī),它具有以下優(yōu)點(diǎn):

  • 操作全部被虛擬化
  • 虛擬機(jī)本身就支持 non-deterministic 操作
  • 虛擬機(jī)管理程序(Hypervision)能夠記錄所有在虛擬機(jī)上的操作,所以能夠記錄主服務(wù)器(Primary)所有操作,然后在副服務(wù)器(Backup)上進(jìn)行演繹

基本設(shè)計(jì)方案

容錯(cuò)虛擬機(jī)分布式系統(tǒng)的設(shè)計(jì)

如圖就是本文提到的容錯(cuò)系統(tǒng)的架構(gòu),一個(gè) Primary,一個(gè) Backup,Primary 和 Backup 之間通過(guò) Logging Channel 進(jìn)行通信,Primary 和 Backup 基本保持同步,Backup 稍稍落后,它們兩個(gè)之間會(huì)通過(guò) heartbeat 進(jìn)行 fail 檢測(cè),并且它們使用共享磁盤(pán)(Shared Disk)。

確定(deterministic)操作的演繹

讓兩臺(tái)機(jī)器初始狀態(tài)相同,它們接受相同的輸入,順序相同,兩臺(tái)機(jī)器執(zhí)行的任務(wù)的結(jié)果就會(huì)相同。

但是如果存在非確定的(non-deterministic)操作(比如中斷事件、讀取CPU時(shí)鐘計(jì)數(shù)器的值操作就是非確定的),它會(huì)影響狀態(tài)機(jī)的執(zhí)行。

難點(diǎn)在于:

  • 需要捕捉全部的輸入和 non-deterministic 操作在保證 Backup 是deterministic 的
  • 需要準(zhǔn)確將全部輸入和 non-deterministic 操作應(yīng)用到 Backup 中
  • 需要保證系統(tǒng)高效

設(shè)計(jì)方案為:將所有的 input 和 non-deterministic 操作寫(xiě)入到 log 中(file),對(duì)于 non-deterministic 操作還要記錄和它相關(guān)的狀態(tài)信息等,確保 non-deterministic 操作后Backup狀態(tài)還是和 Primary 一致

FT(Fault-Tolerance)協(xié)議

FT 協(xié)議是應(yīng)用于 logging channel 的協(xié)議,協(xié)議的基本要求為:

如果 Primary 宕機(jī)了,Backup 接替它的工作,Backup 之后向外界發(fā)出所有的 Output 要和 Primary 原本應(yīng)當(dāng)發(fā)送的一致。

為了保證以上的要求,設(shè)計(jì)如下系統(tǒng):

  • Primary會(huì)在所有關(guān)于本次Output 的所有信息都發(fā)送給 Backup 之后(并且要確保 Backup 收到)才會(huì)把 output 發(fā)送給外界
  • Primary 只是推遲將 output 發(fā)送給外界,而不會(huì)暫停執(zhí)行后邊的任務(wù)

流程如圖所示:

容錯(cuò)虛擬機(jī)分布式系統(tǒng)的設(shè)計(jì)

但是這種方法不能保證 output 只發(fā)出一次,如果 primary 宕機(jī)了,backup 不能判斷它是在發(fā)送了 output 之前還是之后宕機(jī)的,因此 backup 會(huì)再發(fā)送一次 output。但是這個(gè)問(wèn)題很容易解決,因?yàn)椋?/p>

  • output 是通過(guò)網(wǎng)絡(luò)進(jìn)行發(fā)送的,例如 TCP 之類(lèi)的網(wǎng)絡(luò)協(xié)議能夠檢測(cè)重復(fù)的數(shù)據(jù)包
  • 即使 output 被發(fā)送了2次其實(shí)也沒(méi)關(guān)系。如果 output 是一個(gè)寫(xiě)操作,它會(huì)在同一個(gè)位置寫(xiě)入兩次,結(jié)果不會(huì)發(fā)生變化;如果 output 是讀取操作,讀的內(nèi)容會(huì)被放入 bounce buffer(為了消除 DMA 競(jìng)爭(zhēng)),數(shù)據(jù)會(huì)在 IO 中斷之后被送到

宕機(jī)檢測(cè)

如何知道有機(jī)器宕機(jī),在該系統(tǒng)中是十分重要的。該設(shè)計(jì)使用的是UDP heartbeat 機(jī)制來(lái)檢測(cè) Primary 與 Backup 之間的通信是否正常。

但是使用這種方法會(huì)存在裂腦問(wèn)題(split-brain,Primary 和 Backup 同時(shí)宕機(jī)),該怎么解決呢?

該設(shè)計(jì)中使用了共享存儲(chǔ)(Shared Storage),對(duì)它的操作是原子的,Primary 和 Backup不能同時(shí)進(jìn)行一個(gè)操作(提供原子的 test-and-set 操作)

如果檢測(cè)出 Primary 宕機(jī),Backup 會(huì)成為 Primary,接替之前的工作,然后再尋找一個(gè) Backup。

具體實(shí)現(xiàn)

啟動(dòng)/重啟 Virtual Machine

如何啟動(dòng)一個(gè)和 Primary 狀態(tài)一樣的 Backup?

VMware Vmotion 操作能夠?qū)⒁慌_(tái) VM 從一個(gè) Server 完整的遷移到另一個(gè) Server(只需要很短的中斷),在該設(shè)計(jì)中的方法對(duì) Vmotion 做了一點(diǎn)修改,不是進(jìn)行遷移,而是直接克隆。

管理 Logging Channel

容錯(cuò)虛擬機(jī)分布式系統(tǒng)的設(shè)計(jì)

如圖,該設(shè)計(jì)使用了一個(gè)大的 buffer,來(lái)保存 logging entries,Primary 把自己的 entry 存到 buffer 中,由 logging channel 發(fā)送給Backup 的 buffer,然后 Backup 從 buffer 讀取命令執(zhí)行。

  • 如果 Backup 的 buffer 空了,沒(méi)有命令執(zhí)行了,Backup 會(huì)等待新的 entry
  • 如果 Primary 的 buffer 滿了,Primary 會(huì)等待,等 buffer 中有空余空間再繼續(xù)執(zhí)行

Disk I/O問(wèn)題

disk 操作是并行的,同時(shí)對(duì) disk 的同一位置進(jìn)行操作會(huì)導(dǎo)致 non-deterministic

解決方案:檢測(cè) IO 競(jìng)爭(zhēng),使這些操作串行執(zhí)行

Disk IO 使用 DMA(Direct Memory Access),同時(shí)訪問(wèn)內(nèi)存同一位置的操作會(huì)導(dǎo)致 non-deterministic

解決方案:對(duì) disk 操作的內(nèi)存設(shè)置內(nèi)存的頁(yè)保護(hù),但是這種方法代價(jià)太高;該設(shè)計(jì)中使用了 bounce buffer,它的大小和 disk 所操作的內(nèi)存部分大小是一致的,read 操作直接將內(nèi)容讀入 buffer,當(dāng)其他操作完成,寫(xiě)入內(nèi)存,write 操作將寫(xiě)內(nèi)容寫(xiě)入 buffer,之后再寫(xiě)入磁盤(pán)。

總結(jié)

Vmware 提出的這種 Primary/Backup 方法是分布式容錯(cuò)方法中非常重要的一部分,可以用在許多系統(tǒng)中,不僅僅是分布式存儲(chǔ)(GFS 的容錯(cuò)方法),也可以用在分布式計(jì)算中,因?yàn)樗菍⑺械牟僮鞫加涗浵聛?lái),將它們重新在 Backup 上進(jìn)行演繹,從而起到了備份的作用,能夠做到容錯(cuò)(Fault-Tolerance)。

責(zé)任編輯:未麗燕 來(lái)源: 遠(yuǎn)航
相關(guān)推薦

2023-10-08 10:49:16

搜索系統(tǒng)分布式系統(tǒng)

2019-09-05 09:02:45

消息系統(tǒng)緩存高可用

2022-04-07 17:13:09

緩存算法服務(wù)端

2022-08-16 18:52:20

分布式容錯(cuò)架構(gòu)

2022-08-04 00:05:11

系統(tǒng)分布式流量

2023-05-12 08:23:03

分布式系統(tǒng)網(wǎng)絡(luò)

2022-01-12 09:01:24

分布式系統(tǒng)容錯(cuò)服務(wù)

2015-05-26 11:18:06

分布式系統(tǒng)可擴(kuò)展性

2022-04-14 10:24:27

分布式系統(tǒng)性能

2023-02-11 00:04:17

分布式系統(tǒng)安全

2017-12-12 14:51:15

分布式緩存設(shè)計(jì)

2013-01-07 10:29:31

大數(shù)據(jù)

2023-05-29 14:07:00

Zuul網(wǎng)關(guān)系統(tǒng)

2023-11-07 12:00:05

分布式系統(tǒng)數(shù)據(jù)訪問(wèn)

2015-11-10 17:45:00

分布式系統(tǒng)設(shè)計(jì)開(kāi)源模塊

2017-10-27 08:40:44

分布式存儲(chǔ)剪枝系統(tǒng)

2023-10-26 18:10:43

分布式并行技術(shù)系統(tǒng)

2023-05-05 06:13:51

分布式多級(jí)緩存系統(tǒng)

2017-08-30 16:47:49

Kafka設(shè)計(jì)原理

2019-07-12 09:14:07

分布式系統(tǒng)負(fù)載均衡
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)