溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

online DDL的原理以及Vitess如何幫助處理模式遷移

發(fā)布時(shí)間:2022-01-12 13:56:12 來源:億速云 閱讀:141 作者:柒染 欄目:云計(jì)算

這篇文章主要為大家分析了 online DDL的原理以及Vitess如何幫助處理模式遷移的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì)易懂,操作細(xì)節(jié)合理,具有一定參考價(jià)值。如果感興趣的話,不妨跟著跟隨小編一起來看看,下面跟著小編一起深入學(xué)習(xí)“ online DDL的原理以及Vitess如何幫助處理模式遷移”的知識(shí)吧。


Vitess 引入了一種運(yùn)行模式遷移的新方法:非阻塞的、異步的、預(yù)定的online DDL。通過 online DDL,Vitess 簡(jiǎn)化了模式遷移過程,它獲得了操作開銷的所有權(quán),并為用戶提供了一個(gè)簡(jiǎn)單、熟悉的界面:標(biāo)準(zhǔn)的 ALTER TABLE 語句。

讓我們首先介紹一些背景知識(shí)并解釋為什么模式遷移在數(shù)據(jù)庫世界中是一個(gè)如此重要的問題,然后深入研究實(shí)現(xiàn)細(xì)節(jié)。 

關(guān)系模型和操作開銷

關(guān)系模型是軟件世界中存在時(shí)間最長(zhǎng)的模型之一,它是幾十年前引入的,直到今天仍被廣泛使用。SQL 同樣古老而可靠,甚至在非關(guān)系數(shù)據(jù)庫中也可以找到 SQL 或類似 SQL 的語言。

關(guān)系模型對(duì)許多常見的用例都有意義,具有屬性的實(shí)體(分別為表和列)可以很好地映射到流行的結(jié)構(gòu),如用戶、產(chǎn)品、成員關(guān)系、消息等,而且 SQL 的表達(dá)能力足夠強(qiáng),能夠構(gòu)造簡(jiǎn)單和復(fù)雜的問題。

但從歷史上看,關(guān)系模型是有代價(jià)的。雖然許多數(shù)據(jù)庫系統(tǒng)對(duì)讀和寫進(jìn)行了優(yōu)化,但它們對(duì)元數(shù)據(jù)更改(特別是模式更改)的優(yōu)化程度并不高。此類更改的最大挑戰(zhàn)之一是,它們需要一個(gè)操作程序,而且大多不在開發(fā)人員的領(lǐng)域之內(nèi)。

在早期,數(shù)據(jù)庫管理員(DBA)充當(dāng)數(shù)據(jù)庫的保鏢是很常見的。他們會(huì)拖延來自開發(fā)者的“瘋狂請(qǐng)求”。變更的要求需要經(jīng)過漫長(zhǎng)的程序和文書工作。

幸運(yùn)的是,這些日子已經(jīng)過去了,我們?cè)诔掷m(xù)部署和快速開發(fā)方面更加協(xié)作。然而,新的變化加劇了這個(gè)問題。在過去,你需要每月更改一次模式;也許幾個(gè)月就有一次。你應(yīng)該為此做好準(zhǔn)備,推出一個(gè)新的版本。如今,世界上最繁忙的數(shù)據(jù)庫部署每天都要運(yùn)行多個(gè)模式遷移,這并不少見。

這重新引入并強(qiáng)化了模式遷移問題:該過程大部分不在開發(fā)人員的領(lǐng)域之內(nèi)。它要求他們是數(shù)據(jù)庫專家。在每天進(jìn)行多次遷移的情況下,他們需要以與自己的開發(fā)流程不兼容的方式與其他開發(fā)人員協(xié)作和同步(例如,這與比較和合并 git 分支完全不同)。在小公司中,你會(huì)看到開發(fā)人員只是在他們認(rèn)為合適的時(shí)候擁有和運(yùn)行他們的遷移,但這并不能擴(kuò)展,而且產(chǎn)品和組織越大,就越需要一個(gè)更正式的流程。

MySQL 世界中,直接的模式遷移是阻塞的,如果不是在主服務(wù)器上,那就是在副本上。他們對(duì)資源咄咄逼人,無法被打斷或壓制。在線模式更改工具已經(jīng)存在了十多年,但是它們引入了自己的復(fù)雜性:你需要將它們與數(shù)據(jù)庫一起安裝、允許訪問、安排執(zhí)行、登錄、執(zhí)行、通知這些工具如何進(jìn)行限制、處理錯(cuò)誤、為它們的操作提供可見性等等。在規(guī)模較大的公司中,有專門的 DBA 或 Ops 團(tuán)隊(duì)手動(dòng)執(zhí)行模式更改是很常見的。這些團(tuán)隊(duì)可以每周甚至每天花費(fèi)數(shù)小時(shí)來處理模式遷移的操作開銷。

對(duì)于開發(fā)人員來說,這是一種所有權(quán)的喪失。雖然他們有向某個(gè)表添加列的想法,但他們需要從外部團(tuán)隊(duì)請(qǐng)求幫助,并且常常等待,而對(duì)進(jìn)展?fàn)顟B(tài)沒有太多的可見性。這就打破了他們的流程。也許 NoSQL 數(shù)據(jù)庫最大的吸引力之一是它們不會(huì)對(duì)開發(fā)人員的流程施加這種級(jí)別的約束。

對(duì)于 DBA 來說,模式遷移是一種負(fù)擔(dān)。一些開發(fā)人員對(duì)他們自己的工作流程的意外中斷。

 

操作的一些復(fù)雜性

操作開銷始于模式遷移跨越多個(gè)域這一事實(shí)。讓我們來看看模式遷移流的不完整分解:

  • 正規(guī)化:某些人(開發(fā)人員?)需要正規(guī)化遷移。通常會(huì)有人提出一個(gè) CREATE,DROP,或者 ALTER TABLE 語句。這種說法正確嗎?它在語法上有效嗎?它是否與現(xiàn)有的慣例相沖突?
  • 發(fā)現(xiàn):這條語句需要在生產(chǎn)環(huán)境的什么地方運(yùn)行?開發(fā)人員可能不知道模式是如何跨不同集群部署的。發(fā)現(xiàn)機(jī)制是什么?并且,如果我們找到了正確的集群,那么哪個(gè)服務(wù)器作為該集群的主服務(wù)器呢?數(shù)據(jù)是否分片?如果是,我們?nèi)绾螜z測(cè)所有的碎片?
  • 調(diào)度:是否已經(jīng)在需要的集群上運(yùn)行了遷移?數(shù)據(jù)庫對(duì)并發(fā)遷移的反應(yīng)很差;最好是按順序運(yùn)行它們。我們需要等嗎?多長(zhǎng)時(shí)間?如果我們要睡覺,誰來搶我們的空位?我們還會(huì)再失去一天的工作嗎?
  • 執(zhí)行:我們需要登錄到某個(gè)服務(wù)器上嗎?我們應(yīng)該在哪里運(yùn)行我們的在線模式遷移工具?我們應(yīng)該傳遞什么命令行標(biāo)志?
  • 監(jiān)控:我們能說說進(jìn)展情況嗎?我們能讓所有人都看到嗎?當(dāng)遷移完成時(shí),我們?nèi)绾瓮ㄖ嚓P(guān)方?
  • 清理:MySQL 的模式遷移工具會(huì)留下一些工件:需要?jiǎng)h除的大型表。刪除表本身就是一個(gè)問題。我們?nèi)绾巫詣?dòng)清理這些工件?
  • 恢復(fù):如果遷移失敗,我們?nèi)绾卫^續(xù)?還有其他的清理工作要做嗎?

online DDL的原理以及Vitess如何幫助處理模式遷移

對(duì)于生產(chǎn)環(huán)境中的多個(gè)集群(其中一些是分片的),用于識(shí)別正確的集群的發(fā)現(xiàn)機(jī)制是什么?用于應(yīng)用模式更改的集群的主機(jī)是?

 

Vitess 幫助處理模式遷移流程

Vitess 的架構(gòu)使其處于一個(gè)獨(dú)特的位置,可以處理大多數(shù)模式遷移流程。例如:

  • 發(fā)現(xiàn)是微不足道的。Vitess 在內(nèi)部將所有模式映射到碎片和集群,并在任何給定時(shí)間知道應(yīng)該在何處應(yīng)用遷移(或查詢)。
  • Vitess 模擬了一個(gè)單一的數(shù)據(jù)庫。用戶通過 vtgate 訪問 Vitess,這是一個(gè)智能代理,可以從語義上理解查詢。當(dāng) Vitess 攔截一個(gè)查詢時(shí),它不必嚴(yán)格地將該查詢發(fā)送到后端數(shù)據(jù)庫服務(wù)器。對(duì)于 online DDL,Vitess 會(huì)注意模式更改請(qǐng)求,并在之后安排它。適當(dāng)?shù)暮蠖?tablet 將接收該請(qǐng)求,并各自安排它,以避免運(yùn)行并發(fā)遷移。
  • tablet 自己執(zhí)行在線模式遷移工具。今天,Vitess 支持 pt-online-schema-change 和 gh-ost。tablet 決定如何執(zhí)行這些工具,提供命令行標(biāo)志,任何必要的掛鉤/插件。而且,在 Linux/amd64 上,gh-ost 是預(yù)編譯的,并與 Vitess 綁定,所以不需要安裝。Vitess 指示工具使用它自己的內(nèi)部節(jié)流機(jī)制,因此工具不需要擔(dān)心要監(jiān)視哪些副本。節(jié)流機(jī)制可以動(dòng)態(tài)適應(yīng)拓?fù)渥兓?/section>
  • Vitess 提供了一個(gè)跨所有碎片查詢遷移進(jìn)度的接口。此外,它還提供了一個(gè)接口,用于中止遷移,或重新嘗試中止的遷移或失敗的遷移。
  • Vitess 了解哪些工件是由模式遷移工具生成的。事實(shí)上,它指示他們生成什么工件。無論成功還是失敗,Vitess 都可以在遷移后進(jìn)行清理。它將把工件表發(fā)送到垃圾收集機(jī)制。它將為 pt-osc 遷移清理遺留的觸發(fā)器。Vitess 為每個(gè)遷移創(chuàng)建一個(gè)臨時(shí)帳戶,并在遷移完成后銷毀它。
  • Vitess 知道遷移何時(shí)失敗,并運(yùn)行適當(dāng)?shù)那謇恚词?Vitess 本身在遷移過程中失敗。此時(shí),Vitess 為故障轉(zhuǎn)移導(dǎo)致的遷移失敗提供了一次性的自動(dòng)重試。

online DDL的原理以及Vitess如何幫助處理模式遷移

Vitess 知道模式部署在何處、存在哪些碎片、在任何給定時(shí)間誰是主節(jié)點(diǎn),并且可以在正確的數(shù)據(jù)庫服務(wù)器上應(yīng)用 DDL,而無需用戶干預(yù)。

 

對(duì)用戶來說是什么樣子的?

開發(fā) Vitess online DDL 的目標(biāo)是盡可能地向用戶隱藏所有的復(fù)雜性。因此,所有用戶需要運(yùn)行的是:

SET @@ddl_strategy=’gh-ost’;
ALTER TABLE my_table ADD COLUMN some_column INT NOT NULL;

ALTER TABLE 語句本身是完全正常的,但是響應(yīng)不同。它立即返回,并帶有一個(gè)作業(yè) ID,用戶可以使用該 ID 跟蹤遷移的進(jìn)度。用戶可以選擇 gh-ost 策略、pt-osc 策略或普通 direct 策略(不是 online DDL)。

關(guān)于“ online DDL的原理以及Vitess如何幫助處理模式遷移”就介紹到這了,更多相關(guān)內(nèi)容可以搜索億速云以前的文章,希望能夠幫助大家答疑解惑,請(qǐng)多多支持億速云網(wǎng)站!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI