時間概念來源于事件發(fā)生順序的最基本概念掘剪,如果說事件發(fā)生在3點15分,說明它發(fā)生在3點15分到3點16分之間奈虾。
在現(xiàn)實世界里夺谁,想知道當(dāng)前時間好像并不是什么難事,可對于電腦來說肉微,事情卻沒有那么簡單匾鸥。
現(xiàn)代計算機系統(tǒng)中,對于時間流逝的感知和度量碉纳,大部分來自石英晶體振蕩器勿负。
石英晶體振蕩器是高精度和高穩(wěn)定度的振蕩器,被廣泛應(yīng)用于彩電劳曹、計算機奴愉、遙控器等各類振蕩電路中,以及通信系統(tǒng)中用于頻率發(fā)生器铁孵、為數(shù)據(jù)處理設(shè)備產(chǎn)生時鐘信號和為特定系統(tǒng)提供基準(zhǔn)信號锭硼。
但其并不以絕對恒定的頻率震動,所以總會出現(xiàn)頻率稍高或稍低的狀況蜕劝,而這種偏差反映到系統(tǒng)時鐘上檀头, 就是系統(tǒng)時間比標(biāo)準(zhǔn)時間稍快或稍慢。
在數(shù)據(jù)庫中可以把事務(wù)看成一個一個的事件岖沛,數(shù)據(jù)庫就是對這些事件的排序暑始,而事件的順序就是靠時鐘來保障的。
分布式數(shù)據(jù)庫下的時鐘
對于單機數(shù)據(jù)庫婴削,因為所有的任務(wù)和作業(yè)都是在單一計算機完成廊镜,似乎系統(tǒng)時間快或慢影響并不大,我們可以設(shè)想這個時間稍快或稍慢的單機數(shù)據(jù)庫是一個獨立的世界馆蠕,在這個世界中期升,時鐘速率的變化惊奇,帶來的影響可能就是各種事件發(fā)生的更快或者更慢,但事件的因果先后順序不變播赁。只要不與外部時間的時間協(xié)調(diào)同步颂郎,這里就是一個平行宇宙,時間速率的變化對世界本身并沒有影響容为, 因為事件發(fā)生的順序是確定的乓序。
相對于單機數(shù)據(jù)庫,分布式數(shù)據(jù)庫中事件在空間上是分開的坎背,數(shù)據(jù)庫中各個節(jié)點需要通過交換消息相互通信替劈。單機數(shù)據(jù)庫的排序很簡單,通過標(biāo)記日志序列號或事務(wù)ID就可以表示事務(wù)的順序得滤,而在分布式數(shù)據(jù)庫中陨献,數(shù)據(jù)庫有多個節(jié)點組成,每個節(jié)點上的數(shù)據(jù)庫實例擁有獨立的時鐘或日志懂更,每一個節(jié)點上的時鐘不能反映全局的順序眨业,因為在各個節(jié)點上可能存在網(wǎng)絡(luò)延遲、時鐘偏移等情況沮协,實際情況下龄捡,可能還有時鐘校對,發(fā)生時鐘跳躍的情況慷暂,導(dǎo)致分布式數(shù)據(jù)庫每個節(jié)點都相當(dāng)于一個世界聘殖,而這些世界的時間流速可能不同,從而導(dǎo)致在不同的世界中行瑞,事件由時間標(biāo)記的順序可能存在不確定性奸腺。節(jié)點之間存在時鐘偏移,理想情況是這些節(jié)點的時鐘是完全同步的蘑辑,而實際上節(jié)點與節(jié)點之間時鐘有快慢之差洋机, 所以分布式數(shù)據(jù)庫下的時鐘無法做到全局設(shè)置的反映坠宴。
全局授時服務(wù)-TSO
為了使分布式數(shù)據(jù)庫擁有確定的全局唯一時鐘洋魂,時鐘的解決方案有很多,例如使用統(tǒng)一的中心節(jié)點喜鼓,或單獨的服務(wù)器產(chǎn)生分布式時鐘副砍。這樣,每個節(jié)點的時鐘都有一個統(tǒng)一中心授時即可庄岖。
這就是分布式系統(tǒng)領(lǐng)域里常用的TSO(Timestamp Oracle)方案,TSO最早由google在percolator論文中提出豁翎。
全局授時顧名思義存在一個中心化的單一授時節(jié)點,因為它是一個單點隅忿,即一臺計算機心剥,所以它可以保證按照遞增的方式分配一個邏輯時鐘邦尊,任何事件申請的時鐘都不會重復(fù),這樣优烧,分布式數(shù)據(jù)庫直接使用這個邏輯時鐘就可以去判定事件的先后順序了蝉揍。邏輯時鐘存在的意義,就是用于仲裁具備相關(guān)性的事件的先后順序畦娄。
全局授時服務(wù)的優(yōu)點是實現(xiàn)簡單又沾,通常來說全局授時服務(wù)會比其他方案多一次網(wǎng)絡(luò)開銷,但全局授時的授時節(jié)點會和分布式數(shù)據(jù)庫的節(jié)點放在同一網(wǎng)絡(luò)下熙卡,網(wǎng)絡(luò)的開銷會非常小杖刷,通常一次網(wǎng)絡(luò)請求都在0.1ms或0.2ms內(nèi)返回,但這也能說明為什么傳統(tǒng)數(shù)據(jù)庫的一次請求可以在0ms內(nèi)返回驳癌,而分布式數(shù)據(jù)庫很少能在0ms內(nèi)返回了滑燃,因為分布式數(shù)據(jù)庫節(jié)點通信,時鐘同步等都需要額外的網(wǎng)絡(luò)開銷颓鲜。
全局授時的優(yōu)點是實現(xiàn)簡單不瓶,資源消耗可以接受,性能上有時候甚至?xí)然旌线壿嫊r鐘亦或者原子鐘方案更快灾杰,但缺點也很明顯蚊丐,那就是存在單點瓶頸,擴展性差艳吠,授時服務(wù)節(jié)點很容易稱為系統(tǒng)的性能瓶頸麦备,所以一般采用全局授時服務(wù)的數(shù)據(jù)庫一般不適合大規(guī)模部署,也不適合跨地域部署昭娩,TSO一般更適合于服務(wù)OLAP系統(tǒng)凛篙,或者小規(guī)模不跨地域的OLTP系統(tǒng)。
以上為數(shù)據(jù)庫世界中為什么要有時鐘栏渺,「分布式技術(shù)專題」是國產(chǎn)數(shù)據(jù)庫hubble團隊精心整編呛梆,專題會持續(xù)更新,歡迎大家保持關(guān)注磕诊。