為什么我們在 TiDB 里面使用全局授時服務(wù)

前言

在 TiDB 里面决侈,為了支持分布式事務(wù)史飞,我們通過 PD,這個全局的單點服務(wù)瓷翻,為事務(wù)分配全局唯一的時間聚凹,這個做法就是簡單高效,但獲取 timestamp 的時候會有網(wǎng)絡(luò)開銷齐帚。這點對一些人來說妒牙,就認為我們設(shè)計很挫,事務(wù)延遲會非常高对妄,從而再推斷出 TiDB 性能很差的結(jié)論湘今。

對于這些聲音,我們通常不予置評剪菱,不過這里倒是可以聊一聊為什么我們會考慮使用一個全局授時服務(wù)摩瞎,為什么不考慮其它的一些方案。

分布式系統(tǒng)的時間這篇文章里面孝常,我已經(jīng)提到了在分布式系統(tǒng)里面通過時間來確定事件先后順序的重要性旗们,以及常用的幾種方案,這里在重新過一遍构灸。

TrueTime 或者 HLC

TrueTime 是 Google Spanner 里面提出來的一種方案上渴,它采用硬件的方式來解決了分布式時間的問題,但硬件畢竟有誤差喜颁,所以 Spanner 有一個 commit wait time稠氮,也就是必須在等待 2 ε 的時間后,才能保證讀取數(shù)據(jù)的正確性洛巢。

最開始 Spanner 的誤差是 7 ms 左右括袒,但現(xiàn)在隨著硬件的提升,誤差應(yīng)該更小了稿茉。但無論怎樣锹锰,還是有誤差的芥炭,即使 ε 優(yōu)化到 1 ms,事務(wù)因為 commit wait time 也會有 2 ms 的延遲恃慧。但 Spanner 最大的問題在于因為是硬件解決方案园蝠,不可能在其他地方大規(guī)模的推廣,通用性不足痢士。

為了解決這個問題彪薛,Kudu 和 CockroachDB 使用了 Hybrid Time 的方案,也就是混合了物理時鐘和邏輯時鐘怠蹂,具體的算法大家可以去參考實際的 Paper 以及相關(guān)的開源實現(xiàn)善延,這里不做過多解釋。

HLC 雖然沒有硬件依賴城侧,但HLC 仍然有一個 bound易遣,需要保證 |l.e - pt.e| 在這個 bound 范圍內(nèi),如果超過了這個 bound嫌佑,HLC 就不能正常工作了豆茫。所以使用 HLC 仍然有一個 wait time 的問題,只是大家可以選擇到底是 commit 的時候 wait 還是 read 的時候 wait屋摇。另外揩魂,因為 HLC 依賴 NTP,但 NTP 有可能出現(xiàn)同步錯誤等問題炮温,所以通常 HLC 都會使用一個比較大的 bound time 來容忍 NTP 的異常火脉。譬如,一些 HLC 的實現(xiàn)使用了 250 ms 或者 500ms 的 bound柒啤,這個已經(jīng)非常大了忘分,也就是說,如果我們要完全做到線性一致性白修,延遲會非常的高。不過如果系統(tǒng)對強一致性不 care重斑,那么也完全可以將這個 bound 設(shè)置的非常小兵睛,或者壓根不處理。

但 HLC 畢竟適用于跨多個 IDC 或者全球化部署的場景窥浪,因為這個時候祖很,各個節(jié)點之前本身的網(wǎng)絡(luò)延遲已經(jīng)非常大了,有可能上百 ms 以上漾脂,這時候 HLC 的 bound 問題反倒會弱化不少假颇。因為當消息發(fā)到其它節(jié)點的時候,減去網(wǎng)絡(luò)延遲的時間骨稿,要 wait 的時間其實就沒多少了笨鸡。

Why TSO

TiDB 的事務(wù)模型是基于 Google Percolator 的姜钳,所以從一開始,我們就考慮使用的是類似 Percolator 的 Timestamp Oracle(TSO)機制形耗,由 PD 統(tǒng)一進行時間的分配哥桥,除了這么做簡單之外,還有就是性能的考量激涤。

也許有人會質(zhì)疑拟糕,你都多了一次網(wǎng)絡(luò)開銷了,怎么可能性能好倦踢?這個有一定的道理送滞,但要看情況。如果我們的集群在同一個 IDC辱挥,網(wǎng)絡(luò)的開銷是非常的小的犁嗅,通常一次網(wǎng)絡(luò)請求,都是在 0.1 ms 或者 0.2 ms 就返回般贼,這就是意味著愧哟,即使有網(wǎng)絡(luò)開銷,使用 TSO 的方式在一些情況下仍然比 Spanner 或者 HLC 的 lantecy 要低哼蛆。

如果是跨多 IDC 的場景蕊梧,雖然網(wǎng)絡(luò)問題避免不了,我們?nèi)匀豢梢杂幸恍┓椒▉砭徑馊椤F┤缈梢詫?TiDB 跟 PD Leader 放在一塊肥矢, 這樣獲取 timestamp 仍然很快,只是如果 client 跟 TiDB 沒在一個 IDC叠洗,這個延遲就可能比較高了甘改。但我覺得,一套系統(tǒng)如果跨多 IDC 部署了灭抑,用戶也應(yīng)該能理解網(wǎng)絡(luò)延遲高的情況十艾,畢竟現(xiàn)在我們還不能超光速傳輸數(shù)據(jù)。

其實現(xiàn)在對我們來說腾节,使用 TSO 最大的問題并不是在 TSO 本身忘嫉,而是坑爹的 Go 調(diào)度,時不時會抽風抖動一下案腺,導致獲取 TSO 變慢庆冕,這個現(xiàn)在我們也正在優(yōu)化。

小結(jié)

使用 TSO 也許并不是最優(yōu)劈榨,但對我們來說访递,現(xiàn)階段是最合適的一種方式,沒準以后我們可能會考慮其他的方式同辣,但至少不是現(xiàn)在拷姿。

而對于 HLC 來說惭载,它雖然能解決很多問題,但也并不是解決分布式時間問題的銀彈跌前,并不是所有的系統(tǒng)都適用的棕兼。

我個人覺得,即使 Google 沒把 TrueTime 的實現(xiàn)開源抵乓,但未來這個技術(shù)其實很容易搞定伴挚,現(xiàn)在一些大廠已經(jīng)在做了,所以沒準 TrueTime 在未來會變成一個通用的解決方案了灾炭。

當然茎芋,更可能我們推翻了現(xiàn)有的物理定律,能超光速傳輸數(shù)據(jù)啥的蜈出,不過那時候田弥,我覺得我們應(yīng)該考慮的是跨星球部署 TiDB 的問題了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铡原,一起剝皮案震驚了整個濱河市偷厦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌燕刻,老刑警劉巖只泼,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卵洗,居然都是意外死亡请唱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門过蹂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來十绑,“玉大人,你說我怎么就攤上這事酷勺”境龋” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵脆诉,是天一觀的道長勋功。 經(jīng)常有香客問我,道長库说,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任片择,我火速辦了婚禮潜的,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘字管。我一直安慰自己啰挪,他們只是感情好信不,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著亡呵,像睡著了一般抽活。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锰什,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天下硕,我揣著相機與錄音,去河邊找鬼汁胆。 笑死梭姓,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的嫩码。 我是一名探鬼主播誉尖,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼铸题!你這毒婦竟也來了铡恕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤丢间,失蹤者是張志新(化名)和其女友劉穎探熔,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體千劈,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡祭刚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了墙牌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涡驮。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖喜滨,靈堂內(nèi)的尸體忽然破棺而出捉捅,到底是詐尸還是另有隱情,我是刑警寧澤虽风,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布棒口,位于F島的核電站,受9級特大地震影響辜膝,放射性物質(zhì)發(fā)生泄漏无牵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一厂抖、第九天 我趴在偏房一處隱蔽的房頂上張望茎毁。 院中可真熱鬧,春花似錦、人聲如沸七蜘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽橡卤。三九已至扮念,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碧库,已是汗流浹背柜与。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谈为,地道東北人旅挤。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像伞鲫,于是被迫代替她去往敵國和親粘茄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容