《如何巧妙地測量服務(wù)器之間的時間差》要點:
本文介紹了如何巧妙地測量服務(wù)器之間的時間差,希望對您有用。如果有疑問,可以聯(lián)系我們。
緣起:無絕對時鐘
Fischer Lynch Paterson定理是分布式理論中非常重要的一個定理,其結(jié)論相當(dāng)悲觀:在一個多進程異步系統(tǒng)中,由于沒有全局絕對時鐘,一定不存在一個一致的消息投遞協(xié)議.
工程折衷:單點序列化
每個進程,每臺服務(wù)器都有自己的本地時鐘,跨服務(wù)器的本地時鐘比較是沒有意義的,這一點很好理解,服務(wù)器A上的本地時間ta=1,服務(wù)器B上的本地時間tb=2,雖然ta<tb,但我們并不能說ta一定早發(fā)生,因為兩臺服務(wù)器的本地時間會有差異.
工程上,可以使用一臺單點服務(wù)器來分發(fā)序列號,或者使用這臺單點服務(wù)器來進行序列化,來模擬全局時鐘.
問題的提出:既然兩臺服務(wù)器的本地時間存在差值,如何來測量兩臺服務(wù)器之間的時間差呢?
答案是,發(fā)包測量.
發(fā)包流程如上圖:
1)服務(wù)器A記錄一個本地時間Ta1,然后向服務(wù)器B發(fā)送一個報文
2)服務(wù)器B接收到報文后取本地時間Tb放入到報文中,并將報文發(fā)回給服務(wù)器A
3)服務(wù)器A收到回復(fù)報文后,記錄本地時間Ta2
很容易知道,Ta1和Ta2取的是服務(wù)器A的本地時間,Tb取的是服務(wù)器B的本地時間.
假設(shè)報文往返耗時是相同的(這個假設(shè)很合理),那么
x = (Ta2 – Ta1)/2
如果,你硬要說這個x通過一次測量不準(zhǔn)確的話,可以發(fā)1億次往返請求,來求出一個相對精確的x值
假設(shè)服務(wù)器A與服務(wù)器B的絕對時間是相同的(這個假設(shè)不合理),那么
Tb = Ta1 + x = (Ta2 + Ta1)/2
可實際上,服務(wù)器A與服務(wù)器B存在一個時間差,不妨設(shè)時間差是“德爾塔”,那么Tb + “德爾塔” = Ta1 + x= (Ta2 + Ta1)/2
于是,“德爾塔” = (Ta2 + Ta1)/2– Tb
這個“德爾塔”就是服務(wù)器A與服務(wù)器B的時間差
文章素材來自:http://www.habadog.com/2015/10/22/time-diff/
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/4547.html