「分散式技術專題」時鐘系列二:資料庫世界中為什麼要有時鐘?

Hubble資料庫發表於2023-02-13

時間概念來源於事件發生順序的最基本概念,如果說事件發生在 3點15分,說明它發生在3點15分到3點16分之間。

在現實世界裡,想知道當前時間好像並不是什麼難事,可對於電腦來說,事情卻沒有那麼簡單。

現代計算機系統中,對於時間流逝的感知和度量,大部分來自石英晶體振盪器。

石英晶體振盪器是高精度和高穩定度的振盪器,被廣泛應用於彩電、計算機、遙控器等各類振盪電路中,以及通訊系統中用於頻率發生器、為資料處理裝置產生時鐘訊號和為特定系統提供基準訊號。

但其並不以絕對恆定的頻率震動,所以總會出現頻率稍高或稍低的狀況,而這種偏差反映到系統時鐘上, 就是系統時間比標準時間稍快或稍慢。

在資料庫中可以把事務看成一個一個的事件,資料庫就是對這些事件的排序,而事件的順序就是靠時鐘來保障的。

分散式資料庫下的時鐘

對於單機資料庫,因為所有的任務和作業都是在單一計算機完成,似乎系統時間快或慢影響並不大,我們可以設想這個時間稍快或稍慢的單機資料庫是一個獨立的世界,在這個世界中,時鐘速率的變化,帶來的影響可能就是各種事件發生的更快或者更慢,但事件的因果先後順序不變。只要不與外部時間的時間協調同步,這裡就是一個平行宇宙,時間速率的變化對世界本身並沒有影響, 因為事件發生的順序是確定的。

相對於單機資料庫,分散式資料庫中事件在空間上是分開的,資料庫中各個節點需要透過交換訊息相互通訊。單機資料庫的排序很簡單,透過標記日誌序列號或事務 ID就可以表示事務的順序,而在分散式資料庫中,資料庫有多個節點組成,每個節點上的資料庫例項擁有獨立的時鐘或日誌,每一個節點上的時鐘不能反映全域性的順序,因為在各個節點上可能存在網路延遲、時鐘偏移等情況,實際情況下,可能還有時鐘校對,發生時鐘跳躍的情況,導致分散式資料庫每個節點都相當於一個世界,而這些世界的時間流速可能不同,從而導致在不同的世界中,事件由時間標記的順序可能存在不確定性。節點之間存在時鐘偏移,理想情況是這些節點的時鐘是完全同步的,而實際上節點與節點之間時鐘有快慢之差, 所以分散式資料庫下的時鐘無法做到全域性設定的反映。

全域性授時服務 -TSO

為了使分散式資料庫擁有確定的全域性唯一時鐘,時鐘的解決方案有很多,例如使用統一的中心節點,或單獨的伺服器產生分散式時鐘。這樣,每個節點的時鐘都有一個統一中心授時即可。

這就是分散式系統領域裡常用的 TSO(Timestamp Oracle)方案,TSO最早由google在percolator論文中提出。

全域性授時顧名思義存在一箇中心化的單一授時節點,因為它是一個單點,即一臺計算機,所以它可以保證按照遞增的方式分配一個邏輯時鐘,任何事件申請的時鐘都不會重複,這樣,分散式資料庫直接使用這個邏輯時鐘就可以去判定事件的先後順序了。邏輯時鐘存在的意義,就是用於仲裁具備相關性的事件的先後順序。

全域性授時服務的優點是實現簡單,通常來說全域性授時服務會比其他方案多一次網路開銷,但全域性授時的授時節點會和分散式資料庫的節點放在同一網路下,網路的開銷會非常小,通常一次網路請求都在 0.1ms或0.2ms內返回,但這也能說明為什麼傳統資料庫的一次請求可以在0ms內返回,而分散式資料庫很少能在0ms內返回了,因為分散式資料庫節點通訊,時鐘同步等都需要額外的網路開銷。

全域性授時的優點是實現簡單,資源消耗可以接受,效能上有時候甚至會比混合邏輯時鐘亦或者原子鐘方案更快,但缺點也很明顯,那就是存在單點瓶頸,擴充套件性差,授時服務節點很容易稱為系統的效能瓶頸,所以一般採用全域性授時服務的資料庫一般不適合大規模部署,也不適合跨地域部署, TSO一般更適合於服務OLAP系統,或者小規模不跨地域的OLTP系統。

 

以上為資料庫世界中為什麼要有時鐘, 「分散式技術專題」是國產資料庫 hubble 團隊精心整編,專題會持續更新,歡迎大家保持關注。

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026685/viewspace-2935012/,如需轉載,請註明出處,否則將追究法律責任。

相關文章