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