前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >巧妙测量服务器之间的时间差

巧妙测量服务器之间的时间差

作者头像
架构师之路
发布2018-03-01 11:02:26
1.2K0
发布2018-03-01 11:02:26
举报
文章被收录于专栏:架构师之路架构师之路

昨天,和大家讨论了无线APP时代如何进行日志上报优化【回复“日志”阅读】,今天和大家一起讨论一下如何巧妙测量服务器之间的时间差。

缘起:无绝对时钟

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的时间差

为什么是“德尔塔”?

因为那个三角形我打不出来。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档