精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linode 實(shí)時(shí)遷移詳解

云計(jì)算
借助實(shí)時(shí)遷移技術(shù),Linode 實(shí)例可在不中斷服務(wù)的前提下在不同物理服務(wù)器之間移動(dòng)。通過實(shí)時(shí)遷移工具移動(dòng) Linode 實(shí)例時(shí),遷移過程對(duì) Linode 實(shí)例中運(yùn)行的進(jìn)程是完全不可見的。這幾乎成為一種決定性的技術(shù),也成為云技術(shù)和非云技術(shù)之間的轉(zhuǎn)折點(diǎn)。本文我們將深入了解這項(xiàng)技術(shù)背后的細(xì)節(jié)。?

當(dāng)開發(fā)者將工作負(fù)載部署到云計(jì)算平臺(tái)時(shí),往往并不需要考慮運(yùn)行這些服務(wù)的底層硬件。在人們對(duì) 的理想化印象中,硬件維護(hù)和物理限制往往是無形的,然而硬件不可避免需要時(shí)不時(shí)進(jìn)行維護(hù),這可能會(huì)導(dǎo)致停機(jī)。為避免這樣的停機(jī)時(shí)間被轉(zhuǎn)嫁給我們的客戶,并真正實(shí)現(xiàn)云的承諾,Linode 提供了一種名為實(shí)時(shí)遷移(Live Migration)的工具。

借助實(shí)時(shí)遷移技術(shù),Linode 實(shí)例可在不中斷服務(wù)的前提下在不同物理服務(wù)器之間移動(dòng)。通過實(shí)時(shí)遷移工具移動(dòng) Linode 實(shí)例時(shí),遷移過程對(duì) Linode 實(shí)例中運(yùn)行的進(jìn)程是完全不可見的。如果一臺(tái)主機(jī)的硬件需要維護(hù),即可通過實(shí)時(shí)遷移,將該主機(jī)上的所有 Linode 實(shí)例無縫轉(zhuǎn)移到另一臺(tái)主機(jī)中。遷移操作完成后,即可開始修理物理硬件,全過程中并不產(chǎn)生會(huì)影響到客戶的停機(jī)時(shí)間。

這幾乎成為一種決定性的技術(shù),也成為云技術(shù)和非云技術(shù)之間的轉(zhuǎn)折點(diǎn)。本文我們將深入了解這項(xiàng)技術(shù)背后的細(xì)節(jié)。

為慶祝 Linode 加入 Akamai 解決方案大家庭,現(xiàn)在注冊(cè) Linode,就可免費(fèi)獲得價(jià)值 100 美元的使用額度,可以隨意使用 Linode 云平臺(tái)提供的各種服務(wù)。立即點(diǎn)擊這里了解詳情并注冊(cè)吧↓↓↓

出海云服務(wù),Akamai 是您的不二之選!

實(shí)時(shí)遷移的工作原理

和大部分新項(xiàng)目類似,Linode 的實(shí)時(shí)遷移也是這樣啟動(dòng)的:進(jìn)行大量研究,創(chuàng)建一系列原型,獲得同事和管理層的大量幫助。我們的第一步是調(diào)查 QEMU 如何處理實(shí)時(shí)遷移。QEMU 是 Linode 使用的一種虛擬化技術(shù),而實(shí)時(shí)遷移也是 QEUM 的一項(xiàng)功能。因此我們團(tuán)隊(duì)的重點(diǎn)是將這項(xiàng)技術(shù)引入 Linode,而非重新發(fā)明一個(gè)類似的技術(shù)。

那么實(shí)時(shí)遷移技術(shù)到底是如何以 QEMU 的方式實(shí)現(xiàn)的?整個(gè)過程分為以下四步:

  1. 啟動(dòng)目標(biāo) QEUM 實(shí)例,該實(shí)例的各項(xiàng)參數(shù)與需要遷移的源 QEUM 實(shí)例完全相同。
  2. 對(duì)磁盤進(jìn)行實(shí)時(shí)遷移。數(shù)據(jù)傳輸過程中,對(duì)磁盤內(nèi)容進(jìn)行的任何更改也會(huì)提交至目標(biāo)磁盤。
  3. 對(duì)內(nèi)存數(shù)據(jù)進(jìn)行實(shí)時(shí)遷移。遷移過程中,內(nèi)存內(nèi)容的任何變化也會(huì)提交至目標(biāo)內(nèi)存。如果這一過程中磁盤內(nèi)容也出現(xiàn)了變化,相關(guān)變化同樣會(huì)被提交至目標(biāo) QEUM 實(shí)例的磁盤中。
  4. 執(zhí)行割接點(diǎn)。當(dāng) QEMU 確認(rèn)有足夠多的內(nèi)存頁可以放心進(jìn)行割接后,源和目標(biāo) QEMU 實(shí)例將會(huì)暫停。QEMU 會(huì)復(fù)制最后幾頁內(nèi)存數(shù)據(jù)和機(jī)器狀態(tài),機(jī)器狀態(tài)包括 CPU 緩存和下一條 CPU 指令。隨后,QEMU 會(huì)讓目標(biāo)開始運(yùn)行,這樣目標(biāo)實(shí)例就可以從源實(shí)例停止時(shí)的狀態(tài)恢復(fù)運(yùn)行了。

這些步驟概括介紹了 QEMU 實(shí)時(shí)遷移的執(zhí)行過程。然而依然需要通過包含很多手工操作的方式來精確指定目標(biāo) QEMU 實(shí)例的啟動(dòng)方式。此外,上述過程中的每個(gè)操作都必須在正確的時(shí)間執(zhí)行。

Linode 實(shí)現(xiàn)實(shí)時(shí)遷移的方式

在分析過 QEMU 開發(fā)者已經(jīng)實(shí)現(xiàn)的技術(shù)后,我們?cè)摽紤]具體用怎樣的方式將其實(shí)給 Linode。這個(gè)答案恰恰是我們工作的重中之重。

在實(shí)時(shí)遷移工作流程的第 1 步,需要啟動(dòng)目標(biāo) QEMU 實(shí)例以接受傳入的實(shí)施遷移連接。在實(shí)現(xiàn)這一步時(shí),我們最初的想法是拿到當(dāng)前 Linode 實(shí)例的配置文件,隨后將其應(yīng)用到目標(biāo)計(jì)算機(jī)。理論上這應(yīng)該很簡(jiǎn)單,但進(jìn)一步思考就會(huì)發(fā)現(xiàn),實(shí)際情況要復(fù)雜很多。尤其是,配置文件雖然可以告訴我們 Linode 實(shí)例是如何啟動(dòng)的,但并不一定可以完整描述啟動(dòng)后的 Linode 實(shí)例的完整狀態(tài)。例如,用戶可以在 Linode 實(shí)例啟動(dòng)完畢后通過熱插拔的方式連接塊存儲(chǔ)設(shè)備,但這種情況并不會(huì)記錄到配置文件中。

為了在目標(biāo)主機(jī)上創(chuàng)建 QEMU 實(shí)例,必須對(duì)當(dāng)前運(yùn)行的 QEMU 實(shí)例進(jìn)行剖析。我們通過檢查 QMP 接口的方式對(duì)運(yùn)行中的 QEMU 實(shí)例進(jìn)行剖析,該接口為我們提供了與 QEMU 實(shí)例布局情況有關(guān)的豐富信息,但它無法幫助我們從來賓系統(tǒng)的視角了解實(shí)例內(nèi)部正在發(fā)生的事情。例如,對(duì)于本地 SSD 和塊存儲(chǔ),它只能告訴我們磁盤鏈接到哪里,以及虛擬磁盤連接到哪個(gè)虛擬化 PCI 插槽上。在查詢 QMP 以及檢查并分析了 QEMU 接口后,可以構(gòu)建一個(gè) Profile 來描述如何在目標(biāo)位置創(chuàng)建一個(gè)完全相同的實(shí)例。

在目標(biāo)計(jì)算機(jī)上,我們將收到完整的描述信息,借此了解源實(shí)例到底是什么樣,隨后就可以在目標(biāo)位置忠實(shí)重建這個(gè)實(shí)例,但此時(shí)還有一個(gè)差異。這個(gè)差別主要在于,目標(biāo) QEMU 實(shí)例在啟動(dòng)時(shí)使用了一個(gè)選項(xiàng),該選項(xiàng)可以讓 QEMU 接受傳入的遷移。

至此,實(shí)時(shí)遷移的記錄過程已經(jīng)基本結(jié)束,接下來需要看看 QEMU 是如何實(shí)現(xiàn)這些操作的。QEMU 進(jìn)程樹由一個(gè)控制進(jìn)程和多個(gè)工作進(jìn)程組成,其中一個(gè)工作進(jìn)程負(fù)責(zé)返回 QMP 調(diào)用或處理實(shí)時(shí)遷移等任務(wù),其他進(jìn)程需要一對(duì)一映射至來賓 CPU。來賓環(huán)境與 QEMU 端的功能相互隔離,具體行為類似于獨(dú)立的系統(tǒng)。

從這個(gè)意義來看,我們需要處理三層內(nèi)容:

  • 第 1 層是管理層;
  • 第 2 層是 QEMU 進(jìn)程的一部分,負(fù)責(zé)處理所有操作;
  • 第 3 層是實(shí)際的來賓層,負(fù)責(zé)與 Linode 用戶進(jìn)行交互。

目標(biāo)實(shí)例啟動(dòng)并準(zhǔn)備好接受傳入的遷移后,目標(biāo)硬件會(huì)告知源硬件開始發(fā)送數(shù)據(jù)。源端會(huì)在收到這個(gè)信號(hào)后開始進(jìn)行處理,并會(huì)在軟件中告知 QEMU 開始傳輸磁盤內(nèi)容。軟件會(huì)自主監(jiān)控磁盤傳輸進(jìn)度,借此檢查傳輸操作是否完成,并會(huì)在磁盤傳輸完成后自動(dòng)開始遷移內(nèi)存內(nèi)容。此時(shí)軟件依然會(huì)自主監(jiān)控內(nèi)存遷移進(jìn)度,并在內(nèi)存遷移完畢后自動(dòng)切換至割接模式。上述全過程都是通過 Linode 的 40Gbps 網(wǎng)絡(luò)進(jìn)行的,因此網(wǎng)絡(luò)方面的操作都可以快速完成。

割接:關(guān)鍵環(huán)節(jié)

割接操作是實(shí)時(shí)遷移過程中最重要的一環(huán),只有理解了它,才能完全理解實(shí)時(shí)遷移操作。

在割接點(diǎn)狀態(tài)下,QEMU 已經(jīng)確認(rèn)做好了所有準(zhǔn)備,可以進(jìn)行割接并在目標(biāo)計(jì)算機(jī)上運(yùn)行。源 QEMU 實(shí)例會(huì)讓兩端暫停運(yùn)行,這意味著:

  1. 來賓系統(tǒng)被時(shí)停。如果來賓系統(tǒng)橫在運(yùn)行時(shí)間同步服務(wù)(如 NTP),NTP 會(huì)在遷移完成后自動(dòng)重新同步時(shí)間。這是因?yàn)橄到y(tǒng)時(shí)鐘會(huì)產(chǎn)生幾秒鐘的落后。
  2. 網(wǎng)絡(luò)請(qǐng)求停止。如果網(wǎng)絡(luò)請(qǐng)求是 TCP 請(qǐng)求(如 SSH 或 HTTP),基本上不會(huì)產(chǎn)生可感知的連接中斷;如果網(wǎng)絡(luò)請(qǐng)求是 UDP 請(qǐng)求(如流媒體視頻),可能會(huì)導(dǎo)致少量丟幀。

由于時(shí)間和網(wǎng)絡(luò)請(qǐng)求均已停止,我們希望割接能盡量快速完成。然而為保證成功割接,還需要進(jìn)行一些檢查:

  • 確保實(shí)時(shí)遷移順利完成不出錯(cuò)。如果出錯(cuò)則要進(jìn)行回滾,解除源 Linode 實(shí)例的暫停狀態(tài),不再進(jìn)一步執(zhí)行其他操作。開發(fā)過程中,我們?cè)谶@方面進(jìn)行了大量實(shí)驗(yàn)并解決了很多錯(cuò)誤,雖然這為我們?cè)斐闪撕芏囝^疼的問題,但最終都順利解決了。
  • 確保關(guān)閉源實(shí)例的網(wǎng)絡(luò),并在目標(biāo)實(shí)例上正確連接。
  • 讓我們的其余基礎(chǔ)設(shè)施清楚得知遷移后的 Linode 實(shí)例是通過哪臺(tái)物理計(jì)算機(jī)運(yùn)行的。

由于割接過程時(shí)間有限,我們希望能盡快完成上述操作。解決了這些問題后,即可繼續(xù)進(jìn)行割接了。源 Linode 實(shí)例會(huì)自動(dòng)會(huì)自動(dòng)收到 割接完成 信號(hào)并讓目標(biāo)實(shí)例運(yùn)行起來。目標(biāo) Linode 實(shí)例會(huì)從源實(shí)例暫停時(shí)的狀態(tài)恢復(fù)運(yùn)行。源和目標(biāo)實(shí)例上的其余內(nèi)容則會(huì)被清理。如果目標(biāo) Linode 實(shí)例在未來某個(gè)時(shí)間需要再次進(jìn)行實(shí)時(shí)遷移,則會(huì)重復(fù)執(zhí)行上述步驟。

邊緣案例概述

實(shí)時(shí)遷移的大部分過程都是直接實(shí)現(xiàn)的,但考慮到邊緣案例后,該功能本身的開發(fā)也進(jìn)行了大量擴(kuò)展。這個(gè)項(xiàng)目的順利完成很大程度上要?dú)w功于管理團(tuán)隊(duì),他們堅(jiān)信該工具有著極大的愿景,并提供了完成該任務(wù)所需的各項(xiàng)資源,另外當(dāng)然也離不開堅(jiān)信該項(xiàng)目能夠成功完成的大量員工。

我們?cè)谙铝羞@些領(lǐng)域遇到了很多邊緣案例:

  1. 通過開發(fā)內(nèi)部工具為 Linode 客戶支持人員和硬件運(yùn)維團(tuán)隊(duì)進(jìn)行與實(shí)時(shí)遷移有關(guān)的協(xié)調(diào)工作。這些工具與我們當(dāng)時(shí)正在使用的其他同類工具較為類似,但也有些許差異,我們?yōu)榇送度肓舜罅块_發(fā)工作:
  • 該工具必須能自動(dòng)檢查數(shù)據(jù)中心內(nèi)部的所有硬件設(shè)施,進(jìn)而確定哪臺(tái)主機(jī)可以成為每個(gè)需要遷移的 Linode 實(shí)例的最佳目標(biāo)。在進(jìn)行這種選擇和決策時(shí),考慮的相關(guān)規(guī)格包括可用 SSD 存儲(chǔ)空間及內(nèi)存分配情況等。
  • 目標(biāo)計(jì)算機(jī)的物理處理器必須與傳入的 Linode 實(shí)例相兼容。尤其是 CPU 必須具備用戶所運(yùn)行的軟件必不可少的某些功能(我們將其稱之為 CPU 標(biāo)記)。例如,AES 就是這樣的一種功能,該功能提供了基于硬件加速的加密能力。實(shí)時(shí)遷移的目標(biāo)計(jì)算機(jī) CPU 必須支持與源計(jì)算機(jī)相同的 CPU 標(biāo)記。我們發(fā)現(xiàn)這是一種極為復(fù)雜的邊緣用例,下文將介紹我們所采用的方法。
  1. 優(yōu)雅地處理故障,包括最終用戶的干預(yù)或?qū)崟r(shí)遷移過程中網(wǎng)絡(luò)連接丟失等情況。下文還將詳細(xì)介紹這些信息。
  2. 緊跟 Linode 平臺(tái)自身的變化,而這是一個(gè)持續(xù)不斷的長(zhǎng)期過程。對(duì)于 Linode 平臺(tái)當(dāng)前和未來所支持的每個(gè)功能,我們都需要確保這些功能可與實(shí)時(shí)遷移兼容。詳細(xì)信息請(qǐng)繼續(xù)閱讀下文。

CPU 標(biāo)記

在向來賓操作系統(tǒng)呈現(xiàn) CPU 方面,QEMU 有不同的選項(xiàng)。其中一個(gè)選項(xiàng)可將主機(jī) CPU 的型號(hào)和功能(即 CPU 標(biāo)記)直接傳遞給來賓系統(tǒng)。通過使用該選項(xiàng),來賓即可不受約束地使用 KVM 虛擬化系統(tǒng)所支持的全部能力。當(dāng) Linode 首次采用 KVM 時(shí)(當(dāng)時(shí)還沒有實(shí)時(shí)遷移功能),為了實(shí)現(xiàn)最大化性能,我們就使用了該選項(xiàng)。然而在開發(fā)實(shí)時(shí)遷移功能的過程中,該選項(xiàng)為我們?cè)斐闪撕芏嗵魬?zhàn)。

在實(shí)時(shí)遷移的測(cè)試環(huán)境中,源和目標(biāo)主機(jī)是兩臺(tái)完全相同的計(jì)算機(jī)。但在現(xiàn)實(shí)世界中,我們的硬件集群并非 100% 完全相同的,計(jì)算機(jī)之間的某些配置差異可能導(dǎo)致產(chǎn)生不同的 CPU 標(biāo)記。這很重要,因?yàn)楫?dāng)一個(gè)程序被載入 Linode 的操作系統(tǒng)后,Linode 會(huì)向該程序呈現(xiàn) CPU 標(biāo)記,為了充分利用這些標(biāo)記,程序可以將軟件中的特定部分載入內(nèi)存。如果一個(gè) Linode 實(shí)例被實(shí)時(shí)遷移到不支持該 CPU 標(biāo)記的目標(biāo)計(jì)算機(jī),程序?qū)?huì)崩潰。這可能導(dǎo)致來賓操作系統(tǒng)崩潰,甚至導(dǎo)致 Linode 重啟動(dòng)。

我們發(fā)現(xiàn)有三個(gè)因素會(huì)影響到計(jì)算機(jī)的 CPU 標(biāo)記如何呈現(xiàn)給來賓系統(tǒng):

  • 取決于購(gòu)買時(shí)間,不同 CPU 之間會(huì)存在一些細(xì)微差異。取決于 CPU 制造商何時(shí)發(fā)布新硬件,年底購(gòu)買的 CPU 可能與年初購(gòu)買的具備不同標(biāo)記。為了擴(kuò)容,Linode 會(huì)持續(xù)購(gòu)買新硬件,但就算兩個(gè)硬件訂單購(gòu)買了同款 CPU,它們的 CPU 標(biāo)記也可能存在差異。
  • 不同的 Linux 內(nèi)核可能會(huì)向 QEMU 傳遞不同的標(biāo)記。尤其是,參與實(shí)時(shí)遷移的源計(jì)算機(jī)的 Linux 內(nèi)核可能會(huì)向 QEMU 傳遞與目標(biāo)計(jì)算機(jī)的 Linux 內(nèi)核不同的標(biāo)記。為源計(jì)算機(jī)更新 Linux 內(nèi)核必須重啟動(dòng),因此無法在實(shí)時(shí)遷移之前通過升級(jí)內(nèi)核版本的方式解決這種不匹配問題,因?yàn)檫@會(huì)導(dǎo)致計(jì)算機(jī)上的 Linode 實(shí)例停機(jī)。
  • 同理,不同的 QEMU 版本也會(huì)影響所呈現(xiàn)的 CPU 標(biāo)記。更新 QEMU 同樣需要重啟動(dòng)計(jì)算機(jī)。

因此在實(shí)現(xiàn)實(shí)時(shí)遷移時(shí),我們必須設(shè)法防止程序因?yàn)?CPU 標(biāo)記的不匹配而崩潰。可行的選項(xiàng)有兩個(gè):

  • 讓 QEMU 模擬 CPU 標(biāo)記。但這可能導(dǎo)致原本快速運(yùn)行的軟件運(yùn)行速度變慢,并且完全無法調(diào)查原因。
  • 收集源計(jì)算機(jī)的 CPU 標(biāo)記列表,確保目標(biāo)計(jì)算機(jī)具備完全相同的標(biāo)記,隨后再進(jìn)行遷移。這種方式更復(fù)雜,但不會(huì)影響用戶程序的運(yùn)行速度。我們最終選擇了這種方式。

在決定對(duì)源和目標(biāo)的 CPU 標(biāo)記進(jìn)行匹配后,我們使用下列兩種方法的組合最終實(shí)現(xiàn)了目標(biāo):

  • 第一種方法更簡(jiǎn)單。將源硬件的所有 CPU 標(biāo)記發(fā)送給目標(biāo)硬件,當(dāng)目標(biāo)硬件設(shè)置新的 QEMU 實(shí)例時(shí),會(huì)通過檢查來確保自己至少擁有和源 Linode 實(shí)例相同的標(biāo)記。如果不匹配,將不進(jìn)行實(shí)時(shí)遷移。
  • 第二種方法更復(fù)雜,但可以避免因?yàn)?CPU 標(biāo)記不匹配導(dǎo)致的遷移失敗。在發(fā)起實(shí)施遷移前,我們會(huì)對(duì)具備可兼容 CPU 標(biāo)記的硬件創(chuàng)建一個(gè)列表,隨后從該列表中選擇硬件來創(chuàng)建目標(biāo)計(jì)算機(jī)。

第二種方法必須能快速執(zhí)行,并且讓我們的工作變得更復(fù)雜。某些情況下,我們需要針對(duì)超過 900 臺(tái)計(jì)算機(jī)檢查最多 226 個(gè) CPU 標(biāo)記。為所有這 226 個(gè) CPU 標(biāo)記編寫檢查代碼本就很困難,而這些代碼還需要不斷進(jìn)行維護(hù)。但 Linode 的創(chuàng)始人 Chris Aker 提出的一個(gè)驚人想法最終解決了這個(gè)問題。

方法的關(guān)鍵在于為所有 CPU 標(biāo)記創(chuàng)建一個(gè)列表,并將其表示為一個(gè)二進(jìn)制字符串。隨后,可以使用 Bitwise and(按位與)運(yùn)算來對(duì)比字符串。我們可以用下面這個(gè)簡(jiǎn)單的例子來演示這個(gè)算法。下面這段 Python 代碼可以使用 按位與 對(duì)比兩個(gè)數(shù):

>>> 1 & 1
1
>>> 2 & 3
2
>>> 1 & 3
1

要理解為何按位與 運(yùn)算能產(chǎn)生這樣的結(jié)果,首先需要將數(shù)字用二進(jìn)制形式表示。一起看看十進(jìn)制的23 在用二進(jìn)制形式表示的情況下,按位與 是如何處理的:

>>> # 2: 00000010
>>> # &
>>> # 3: 00000011
>>> # =
>>> # 2: 00000010

按位與 會(huì)對(duì)比二進(jìn)制的數(shù),也就是兩個(gè)不同數(shù)字中的。該操作會(huì)從上述數(shù)字最右邊的位開始向左處理:

  • 23 最右側(cè)(第一)位分別是01,0 & 1 的按位與結(jié)果為 0
  • 23 右數(shù)第二位都是1,1 & 1 的按位與結(jié)果為 1
  • 這兩個(gè)數(shù)的所有其他位都是0,0 & 0 的按位與結(jié)果為 0

因此完整結(jié)果的二進(jìn)制表示就是 00000010,也就是十進(jìn)制的 2

對(duì)于實(shí)時(shí)遷移,CPU 標(biāo)記完整列表會(huì)表示為一個(gè)二進(jìn)制字符串,其中每一位都代表一個(gè)標(biāo)記。如果一個(gè)位為 0,代表對(duì)應(yīng)的標(biāo)記不存在;如果某個(gè)位為1,則代表標(biāo)記存在。例如,一個(gè)位可以代表 AES 標(biāo)記,另一個(gè)位可以代表 MMX 標(biāo)記。這些標(biāo)記在二進(jìn)制字符串中的位置會(huì)維護(hù)并記錄在案,隨后用于我們數(shù)據(jù)中心內(nèi)的所有計(jì)算機(jī)。

相比維護(hù)一組 if 語句來檢查某個(gè) CPU 標(biāo)記是否存在,這種列表的維護(hù)工作無疑更簡(jiǎn)單也更高效。例如,假設(shè)總共需要追蹤并檢查 7 個(gè) CPU 標(biāo)記,這些標(biāo)記可以存儲(chǔ)在一個(gè) 8 位數(shù)字中(多出的一位供未來進(jìn)行擴(kuò)展)。例如這樣的字符串可能類似于 00111011,最右側(cè)的一位代表 AES 已啟用,右數(shù)第二位代表 MMX 已啟用,右數(shù)第三位代表其他標(biāo)記已啟用,以此類推。

在下文的代碼片段中,我們可以看到哪些硬件支持這些標(biāo)記的組合,這段代碼可以在一個(gè)周期內(nèi)返回所有匹配的結(jié)果。如果用一組 if 語句進(jìn)行對(duì)比,則需要更多周期才能獲得所需結(jié)果。如果進(jìn)行實(shí)時(shí)遷移的源計(jì)算機(jī)包含 4 個(gè) CPU 標(biāo)記,這種情況下就需要 203400 個(gè)周期才能找到匹配的硬件。

實(shí)時(shí)遷移操作會(huì)在源和目標(biāo)計(jì)算機(jī)上針對(duì) CPU 標(biāo)記字符串執(zhí)行 按位與 操作。如果兩個(gè)計(jì)算機(jī)的 CPU 標(biāo)記字符串運(yùn)算結(jié)果相等,意味著目標(biāo)計(jì)算機(jī)是兼容的。該過程可參考下列 Python 代碼片段:

>>> # The b'' syntax below represents a binary string
>>>
>>> # The s variable stores the example CPU flag 
>>> # string for the source:
>>> s = b'00111011'
>>> # The source CPU flag string is equivalent to the number 59:
>>> int(s.decode(), 2)
59
>>> 
>>> # The d variable stores the example CPU flag 
>>> # string for the source:
>>> d = b'00111111
>>> # The destination CPU flag string is equivalent to the number 63:
>>> int(d.decode(), 2)
63
>>>
>>> # The bitwise and operation compares these two numbers:
>>> int(s.decode(), 2) & int(d.decode(), 2) == int(s.decode(), 2)
True
>>> # The previous statement was equivalent to 59 & 63 == 59.
>>>
>>> # Because source & destination == source, 
>>> # the machines are compatible

請(qǐng)注意,在上述代碼片段中,目標(biāo)計(jì)算機(jī)比源計(jì)算機(jī)支持更多的標(biāo)記。此時(shí)可以認(rèn)為目標(biāo)計(jì)算機(jī)是兼容的,因?yàn)樵吹乃?CPU 標(biāo)記都已包含在目標(biāo)計(jì)算機(jī)中,這一點(diǎn)可以由 按位與 運(yùn)算提供保證。

我們的內(nèi)部工具可以使用上述算法得到的結(jié)果為可兼容的硬件構(gòu)建一個(gè)列表。該列表會(huì)展示給我們的客戶支持和硬件運(yùn)維團(tuán)隊(duì),這些團(tuán)隊(duì)可以使用我們的內(nèi)部工具來編排不同的運(yùn)維任務(wù):

  • 使用該工具為特定 Linode 實(shí)例挑選兼容性最高的硬件。
  • 在不指定目標(biāo)的情況下發(fā)起 Linode 實(shí)例實(shí)時(shí)遷移。隨后,同一數(shù)據(jù)中心內(nèi)兼容性最高的硬件會(huì)被自動(dòng)選中并立即開始遷移。
  • 通過一個(gè)任務(wù),對(duì)一臺(tái)主機(jī)上的所有 Linode 實(shí)例發(fā)起實(shí)時(shí)遷移。針對(duì)主機(jī)執(zhí)行維護(hù)任務(wù)前通常會(huì)執(zhí)行這樣的操作。我們的工具會(huì)自動(dòng)為所有實(shí)例選擇目標(biāo),并為每個(gè)實(shí)例進(jìn)行必要的編排。
  • 將需要維護(hù)的多臺(tái)計(jì)算機(jī)指定為一個(gè)列表,我們的工具可以跨越所有主機(jī),自動(dòng)為所有實(shí)例編排實(shí)時(shí)遷移。

僅僅為了讓軟件能夠跑起來,就需要進(jìn)行大量的開發(fā)工作……

失敗處理

軟件領(lǐng)域有一個(gè)話題很少被人討論:優(yōu)雅地處理失敗。軟件至少應(yīng)該能夠跑起來。為了實(shí)現(xiàn)這一點(diǎn),往往需要進(jìn)行大量開發(fā)工作,實(shí)時(shí)遷移功能的開發(fā)也是如此。我們花了很多時(shí)間考慮如果該工具無法正常運(yùn)行要怎么辦,以及該如何優(yōu)雅地處理這種情況。我們考慮了很多場(chǎng)景,并確定了具體的應(yīng)對(duì)方式:

  • 如果客戶希望從 Cloud Manager 訪問 Linode 的某項(xiàng)功能該如何處理?例如用戶可能會(huì)重啟動(dòng) Linode 或?yàn)閷?shí)例連接 Block Storage Volume。

     o  解決方法:客戶完全可以這樣做。實(shí)時(shí)遷移會(huì)被打斷,無法繼續(xù)處理。這種處理方法是合適的,因?yàn)閷?shí)時(shí)遷移可以稍后重試。


  • 目標(biāo) Linode 啟動(dòng)失敗怎么辦?

     o 解決方法:通知源硬件,通過專門設(shè)計(jì)的內(nèi)部工具在數(shù)據(jù)中心內(nèi)自動(dòng)選擇另一個(gè)硬件。此外還將通知運(yùn)維團(tuán)隊(duì),以便調(diào)查失敗的目標(biāo)硬件。這種情況曾在生產(chǎn)環(huán)境中發(fā)生過,我們的實(shí)時(shí)遷移可以順利應(yīng)對(duì)。


  • 如果遷移過程中網(wǎng)絡(luò)連接丟失該怎么辦?

     o 解決方法:自主監(jiān)測(cè)實(shí)時(shí)遷移進(jìn)度,如果過去一分鐘內(nèi)沒有產(chǎn)生任何進(jìn)展,將會(huì)取消實(shí)時(shí)遷移并通知運(yùn)維團(tuán)隊(duì)。這種情況在測(cè)試環(huán)境之外從未發(fā)生過,但我們也針對(duì)這種場(chǎng)景做好了充分準(zhǔn)備。

  • 如果互聯(lián)網(wǎng)的其他部分?jǐn)嚅_了,但源和目標(biāo)硬件依然在運(yùn)行和通信,并且源和目標(biāo) Linode 實(shí)例都在正常運(yùn)行,此時(shí)會(huì)發(fā)生什么情況?

    o解決方法:如果實(shí)時(shí)遷移未進(jìn)行到關(guān)鍵環(huán)節(jié),將停止實(shí)時(shí)遷移,并在稍后重試。

    o如果已進(jìn)行到關(guān)鍵環(huán)節(jié),則將繼續(xù)遷移。這一點(diǎn)很重要,因?yàn)樵?Linode 已被暫停,目標(biāo) Linode 需要處于啟動(dòng)狀態(tài)才能繼續(xù)恢復(fù)操作。

這些場(chǎng)景都已在測(cè)試環(huán)境中進(jìn)行了模擬,我們認(rèn)為上述行為也是不同情況下的最佳應(yīng)對(duì)措施。

緊跟技術(shù)變化的步伐

成功進(jìn)行了數(shù)十萬次實(shí)時(shí)遷移后,我們不免會(huì)考慮:實(shí)時(shí)遷移的開發(fā)工作何時(shí)才能結(jié)束? 隨著時(shí)間推移,實(shí)時(shí)遷移這項(xiàng)技術(shù)的使用范圍會(huì)越來越廣,并且會(huì)不斷完善,因此該項(xiàng)目似乎會(huì)永遠(yuǎn)持續(xù)下去。回答這個(gè)問題的一種方法是考慮該項(xiàng)目的大部分工作什么時(shí)候會(huì)結(jié)束。答案也很簡(jiǎn)單:為了獲得可靠、可信賴的軟件,我們的工作還將持續(xù)很久。

隨著時(shí)間推移,Linode 會(huì)增加新的功能,我們也許要繼續(xù)努力保證實(shí)時(shí)遷移可以兼容這些功能。引入某些新功能時(shí),可能無需圍繞實(shí)時(shí)遷移執(zhí)行新的開發(fā)工作,但我們可能依然需要測(cè)試該功能是否可以按照預(yù)期正常工作。對(duì)于某些功能,則可能需要在開發(fā)的早期階段,針對(duì)實(shí)時(shí)遷移進(jìn)行必要的兼容性測(cè)試和相關(guān)工作。

和其他幾乎所有軟件類似,對(duì)于同一件事,通過不斷研究,總能發(fā)現(xiàn)更好的實(shí)現(xiàn)方法。例如,從長(zhǎng)遠(yuǎn)來看,為實(shí)時(shí)遷移功能開發(fā)更多模塊化的集成方法,無疑可以降低維護(hù)負(fù)擔(dān)。或者我們甚至可能將實(shí)時(shí)遷移的相關(guān)功能納入到底層代碼中,從而使其成為 Linode 一項(xiàng)拆箱即用的功能。

我們的團(tuán)隊(duì)已經(jīng)考慮過所有這些選項(xiàng),并且堅(jiān)信驅(qū)動(dòng) Linode 平臺(tái)的工具是活躍的,還會(huì)繼續(xù)努力,使其不斷進(jìn)化和發(fā)展。

這篇文章的內(nèi)容感覺還行吧?有沒有想要立即在 Linode 平臺(tái)上親自嘗試一下?別忘了,現(xiàn)在注冊(cè)可以免費(fèi)獲得價(jià)值 100 美元的使用額度,快點(diǎn)自己動(dòng)手體驗(yàn)本文介紹的功能和服務(wù)吧↓↓↓

出海云服務(wù),Akamai 是您的不二之選!

歡迎關(guān)注 Akamai ,第一時(shí)間了解高可用的 MySQL/MariaDB 參考架構(gòu),以及豐富的應(yīng)用程序示例。

責(zé)任編輯:張燕妮
相關(guān)推薦

2023-08-18 12:17:03

Linode實(shí)時(shí)遷移云計(jì)算

2024-06-06 11:26:03

2017-03-07 16:41:03

LXD 2.0Linux實(shí)時(shí)遷移

2024-10-25 10:00:00

云服務(wù)計(jì)算

2012-11-22 14:38:44

Windows Azu

2013-11-25 09:37:03

虛擬機(jī)實(shí)時(shí)遷移

2010-06-30 09:05:02

Hyper-V遷移

2021-06-09 17:51:12

Hadoop數(shù)據(jù)遷移

2013-04-17 10:26:53

2014-12-17 11:36:31

云遷移云服務(wù)公有云

2011-06-24 10:10:35

SVN

2009-03-17 13:25:13

查詢遷移SQL Server

2012-09-12 10:35:51

Hyper-V

2010-05-26 18:32:07

SVN庫

2010-03-09 09:49:01

Oracle跨平臺(tái)遷移

2023-07-07 10:37:43

自動(dòng)駕駛技術(shù)

2013-04-17 15:54:40

2022-04-07 09:30:00

自動(dòng)化LinodeKubernetes

2024-02-28 11:33:01

云服務(wù)開發(fā)

2013-04-17 11:06:46

Linode黑客信息泄露
點(diǎn)贊
收藏

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

国产婷婷色一区二区三区四区| 婷婷伊人综合| 日韩欧美亚洲范冰冰与中字| 免费久久一级欧美特大黄| 中文字幕在线观看视频免费| 色婷婷热久久| 亚洲精品在线免费观看视频| 99久久久无码国产精品6| 色开心亚洲综合| 国产成a人亚洲| 日本一欧美一欧美一亚洲视频| 中文字幕第69页| 国产精品17p| 欧美日韩色一区| 欧美在线一区视频| 日本中文字幕在线播放| 99久久精品免费看| 91香蕉电影院| 精人妻无码一区二区三区| 欧美成人69| 伊人激情综合网| 性高潮免费视频| 免费视频观看成人| 日韩欧美精品中文字幕| 性一交一乱一伧国产女士spa| jizz日韩| 久久久久久久久一| 国模精品一区二区三区| 国产美女裸体无遮挡免费视频| 老鸭窝亚洲一区二区三区| 欧美激情小视频| 永久av免费网站| 国产一区二区精品久| 精品99一区二区三区| 亚洲精品综合在线观看| 久久精品女人天堂av免费观看 | 狂野欧美一区| 午夜精品免费视频| 精品视频久久久久| 91精品国产调教在线观看| 国产一区二区三区久久精品| 99久久人妻无码中文字幕系列| 日韩在线观看中文字幕| 91精品国产欧美一区二区成人 | 欧美成人aaaaⅴ片在线看| 香蕉久久网站| 日韩一区视频在线| 午夜黄色福利视频| 视频在线不卡免费观看| 亚洲免费观看| 天天干天天插天天操| 男女黄床上色视频| 免费a级黄色片| 日韩精品影院| 一本高清dvd不卡在线观看| 僵尸世界大战2 在线播放| 中文字幕有码在线观看| 亚洲天堂免费在线观看视频| 亚洲成人精品电影在线观看| 成年人在线观看网站| 国产日本欧美一区二区| 日本午夜精品电影| 成人在线播放视频| 国产精品夫妻自拍| 国产日韩第一页| 日本动漫理论片在线观看网站 | 亚洲美女尤物影院| 福利微拍一区二区| 久草在在线视频| 国产69精品久久久久9999人| 欧美日韩另类一区| 黑人性生活视频| 国产无遮挡裸体免费久久| 亚洲一区二区三区四区五区午夜 | 蜜臀av一级做a爰片久久| 国产精品免费福利| 国产精品永久久久久久久久久| 韩日av一区二区| 97se亚洲综合| 五月婷婷六月丁香综合| 国产亚洲成av人在线观看导航| 日韩一区免费观看| 色视频在线免费观看| 亚洲一区影音先锋| 不卡影院一区二区| 9999在线精品视频| 亚洲高清不卡av| 一级黄色毛毛片| 亚洲午夜精品一区二区国产 | 黄瓜视频免费观看在线观看www| av在线免费网站| 懂色aⅴ精品一区二区三区蜜月| 成人免费视频久久| 精品一区二区三区中文字幕| 亚洲精品ady| 香蕉久久久久久久| 亚洲人人精品| 国产日韩精品在线播放| 动漫一区二区在线| 国产免费av一区| 韩国v欧美v日本v亚洲v| 精品在线视频一区二区| 性开放的欧美大片| 亚洲国产精品一区二区久久| 免费黄色一级网站| 1769国产精品视频| 色妞色视频一区二区三区四区| 久久精品99国产精| 美腿丝袜亚洲综合| 欧美大香线蕉线伊人久久国产精品| 蜜桃视频在线观看www社区| 天涯成人国产亚洲精品一区av| 亚洲综合日韩欧美| 亚洲成在人线免费观看| 久久777国产线看观看精品| 国产主播第一页| 成人av在线电影| 秋霞在线一区二区| 成人啊v在线| 日韩av在线免费看| 免费视频一二三区| 国产一区 二区 三区一级| 日本a级片久久久| 99爱在线观看| 欧美成人精品3d动漫h| 少妇的滋味中文字幕bd| 新67194成人永久网站| 成人动漫在线观看视频| 黄色精品在线观看| 欧美在线一二三四区| 国精产品一区一区三区免费视频| 国产综合欧美| 97久久夜色精品国产九色 | 卡一精品卡二卡三网站乱码| 久久伊人精品一区二区三区| 午夜视频网站在线观看| 久久先锋资源网| 18岁网站在线观看| av资源吧首页| 亚洲成人精品| 国产精品视频在线播放| 深夜福利视频一区| 图片区小说区国产精品视频| 国产精品白丝jk白祙喷水网站| 欧美在线视频一二三| 亚洲精选一区二区三区| 亚洲人亚洲人成电影网站色| 免费av不卡在线| 欧美国产小视频| 成人激情在线观看| 乱人伦中文视频在线| 欧美日韩二区三区| 欧美一级片在线视频| 久久99国产精品久久99果冻传媒| 亚洲一区二区三区欧美| 欧美亚洲黄色| www.xxxx欧美| 99精品人妻无码专区在线视频区| 综合亚洲深深色噜噜狠狠网站| 日本高清久久久| 亚洲最新av| 国产九色91| 色偷偷色偷偷色偷偷在线视频| 日韩av在线看| 国产成人精品亚洲| 国产精品国产三级国产有无不卡| 99热一区二区| 欧美深夜福利| 久久伊人一区二区| 99riav视频一区二区| 爱福利视频一区| www.黄色国产| 黑人欧美xxxx| www.av免费| 成人午夜又粗又硬又大| 国产成人无码一二三区视频| 第九色区aⅴ天堂久久香| 91在线视频免费| caoprom在线| 国产亚洲成精品久久| 国产美女三级无套内谢| 偷拍一区二区三区| 久久精品三级视频| 国产成人8x视频一区二区| 无码播放一区二区三区| 久久在线免费| 国精产品99永久一区一区| av亚洲一区二区三区| 久久色免费在线视频| 天堂网在线播放| 欧美日韩高清一区二区三区| 国产亚洲欧美精品久久久www| www成人在线观看| 两性午夜免费视频| 亚洲永久免费| 丰满人妻一区二区三区53号| 亚洲伊人春色| 51成人做爰www免费看网站| 韩国成人漫画| 久久久久国产精品www| lutube成人福利在线观看| 亚洲成年人影院在线| 亚洲无码精品在线观看| 精品久久久久久久大神国产| www.av免费| 日本一区二区三区免费乱视频| 欧美69精品久久久久久不卡| 日本视频免费一区| 日韩a级在线观看| 婷婷精品进入| 日韩电影免费观看在| 亚洲综合色婷婷在线观看| 国产精品女人网站| 亚洲最大成人| 国内精品一区二区三区四区| av在线免费播放网站| 亚洲二区中文字幕| 国产黄频在线观看| 欧美日韩第一区日日骚| 亚洲欧美一区二区三区在线观看| 亚洲一区二区三区四区在线 | 外国成人在线视频| 99在线国产| 亚洲狼人综合| 国产日韩av在线播放| 国产精成人品2018| 热久久这里只有| 国产无遮挡裸体视频在线观看| 久久成人在线视频| 日本三级视频在线播放| 亚洲视频欧美视频| 四虎在线观看| 精品伊人久久97| 亚洲AV第二区国产精品| 亚洲国产精品专区久久| 日本高清视频在线| 欧美精品一区二区三区蜜臀| www.久久精品.com| 日韩精品一区二区三区在线播放 | 中文字幕国产日韩| av动漫在线看| 亚洲精品乱码久久久久久蜜桃欧美| 中文字幕免费视频观看| 91免费看片在线观看| 五月天丁香社区| 国产精品蜜月aⅴ在线| 九九久久综合网站| 91精品久久久久久粉嫩| 久久精品成人一区二区三区 | 日本午夜精品久久久久| 亚洲人成精品久久久久久| 在线黄色免费网站| 国产v综合v亚洲欧| 中文字幕a在线观看| 99国产精品久| jizz欧美性20| 国产日产亚洲精品系列| 肉色超薄丝袜脚交69xx图片| 国产精品色呦呦| 欧洲美女女同性互添| 亚洲精品中文在线影院| 欧美xxxx黑人xyx性爽| 亚洲图片一区二区| 欧美bbbbbbbbbbbb精品| 日本韩国一区二区| 在线观看xxxx| 日韩毛片一二三区| 久久精品免费播放| 丰满人妻妇伦又伦精品国产| 精品久久久久久久久久久久包黑料| 亚洲大尺度网站| 日韩av在线网| 最新真实国产在线视频| 色综合视频一区中文字幕| 神马午夜在线视频| 国产精品高清免费在线观看| 亚洲一区二区三区久久久| wwwxx欧美| 女人丝袜激情亚洲| 久久av秘一区二区三区| 亚洲第一黄网| 亚州精品一二三区| 国产91丝袜在线播放九色| 国产精品无码午夜福利| 中文字幕亚洲成人| 日本免费在线播放| 欧美色精品天天在线观看视频| 99久久久久久久| 精品中文视频在线| 97caopron在线视频| 欧美一区二区.| avtt久久| 蜜桃视频在线观看91| 亚洲色图二区| 免费激情视频在线观看| 风流少妇一区二区| 天天摸日日摸狠狠添| 午夜日韩在线观看| 国产精品怡红院| 国产亚洲人成网站在线观看| 国产精品探花在线| 国产在线精品成人一区二区三区| 欧美综合精品| 免费cad大片在线观看| 日韩成人av影视| av漫画在线观看| 亚洲欧美一区二区视频| 狠狠人妻久久久久久| 精品国产乱码久久久久久1区2区| 自拍视频在线| 国产成人中文字幕| 欧美一级色片| 成人性生活视频免费看| 国产在线一区二区综合免费视频| 国产夫妻性爱视频| 亚洲国产人成综合网站| 国产又粗又猛又黄又爽| 国产视频一区在线| heyzo高清在线| 91久久大香伊蕉在人线| 欧美丰满老妇| 日韩中文字幕免费在线| 97se亚洲国产综合在线| 欧美黑人精品一区二区不卡| 欧美日本乱大交xxxxx| 视频一区二区三区在线看免费看| 欧美国产日韩一区| 美女日韩一区| 亚洲黄色网址在线观看| 看电视剧不卡顿的网站| 国产又黄又粗视频| 在线观看一区不卡| 六十路在线观看| 日韩av成人在线观看| 欧美一级二级三级视频| 日韩国产一级片| 成人免费毛片片v| 日韩成人在线免费视频| 亚洲第一精品自拍| av人人综合网| 韩国成人动漫在线观看| 亚洲人成免费| 亚洲熟妇无码av| 日本道色综合久久| 福利在线观看| 国产精品亚洲精品| 久久精品欧美一区| 国产精品久久久久久久99| 一区二区三区高清不卡| 亚洲高清精品视频| 国模gogo一区二区大胆私拍| 成人精品动漫一区二区三区| 野外做受又硬又粗又大视频√| 丁香婷婷综合激情五月色| 五月天婷婷丁香| 日韩av在线电影网| 欧美日韩女优| 中文字幕一区综合| 国产精品1024久久| 日本一级黄色录像| 亚洲午夜av电影| 亚洲欧美在线综合| 国产激情片在线观看| 成人福利在线看| 日韩精品成人免费观看视频| 亚洲色图校园春色| 国产精品日本一区二区不卡视频| 日韩视频一二三| 91视频免费观看| 懂色av蜜臀av粉嫩av喷吹| 久久影视电视剧免费网站清宫辞电视 | 日本免费一级视频| 日本一区二区高清| 成人av免费播放| 日本精品一区二区三区在线| 菠萝蜜一区二区| 四虎国产精品免费| 色综合天天综合狠狠| 日韩在线观看www| 国产伦精品一区二区三区免| 久久国产日本精品| 精品无码久久久久成人漫画| 亚洲激情在线观看视频免费| 日韩精品一区二区三区av| 成年在线观看视频| 国产欧美一二三区| 免费av一级片| 国产精品永久在线| 亚洲国产一区二区三区a毛片| 欧美偷拍一区二区三区| 日韩免费在线观看| 日韩欧美一区二区三区在线观看 | 成年人国产精品| 中文字幕精品无| 欧美大片在线免费观看| 精品国产乱码久久久| 国产精品欧美性爱| 欧美日韩第一区日日骚| 午夜影院在线播放| 日本精品福利视频|