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