学习
实践
活动
工具
TVP
写文章
专栏首页架构师之路巧妙测量服务器之间的时间差

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

昨天,和大家讨论了无线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的时间差

为什么是“德尔塔”?

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

文章分享自微信公众号:
架构师之路

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

作者:58到家-沈剑
原始发表时间:2015-10-22
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

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

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

    Java架构师必看
  • 使用OpenCV测量图像中物体之间的距离

    本文来自光头哥哥的博客【Measuring distance between objects in an image with OpenCV】,仅做学习分享。

    周旋
  • 使用OpenCV测量图像中物体之间的距离

    本文来自光头哥哥的博客【Measuring distance between objects in an image with OpenCV】,仅做学习分享。

    OpenCV学堂
  • SQL---计算两个日期之间的时间差

    在进行日期处理的时候,有时会需要计算一下两个日期之间相差几年零几个月,这里记录一下,如何用mysql数据库和java结合,准确的拿到两个日期之间的时间差。

    IT云清
  • 如何测量情感和感觉(以及它们之间的区别)?

    虽然情感和感觉是完全不同的,但我们都或多或少地互换使用这些词来解释过同一件事:某物或某人给我们的感觉。

    脑机接口社区
  • 机房收费系统——用DateDiff函数计算两个日期之间的时间差

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

    DannyHoo
  • 如何更巧妙的玩转服务器(使用Xshell连接)

    这几天一直在想新的一年要写什么技术文章,恰巧小编之前买的服务器还没怎么用过,于是准备将服务器连在Xshell上使用,关于Xshell的使用小编准备在下次讲到。

    小Bob来啦
  • scp 服务器之间的拷贝命令

    scp是secure copy的缩写,scp是Linux系统下基于ssh登陆进行安全的远程文件拷贝命令。

    华创信息技术
  • 服务器之间实现免密登录的简易教程

    cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys

    前端皮皮
  • 几种在多台云服务器之间共享数据的方法

    在我们日常的运维工作中,经常会涉及到需要在多台云服务器之间共享数据的情况。如果都在同一个局域网,那么使用 SMB/CIFS、NFS 等文件级共享协议就可以。但要...

    谈笑有Herald
  • Android通过Socket与服务器之间进行通信的示例

    1)、创建要操作的实体类,实现 Parcelable 接口,以便序列化/反序列化 2)、新建 aidl 文件夹,在其中创建接口 aidl 文件以及实体类的映射...

    砸漏
  • 直播代码是如何工作的,不同服务器之间的区别

    简单来说直播的原理就是把主播录好的内容实时推送到服务器,再由服务器分发给各个用户进行观看。直播发展到如今,由PC端的网页版直播到如今的移动端直播,越来越多直播功...

    云豹kj的晨曦
  • 让子弹多飞一会 | 论如何优化DDoS

    假设1枚炮弹击中目标的伤害为10,而4枚炮弹同时击中目标的伤害为200。现在我方只有一门火炮,4枚炮弹。此火炮每次只能发射一枚炮弹。问如何操作可以使其伤害达到2...

    FB客服
  • 客户端、服务器、数据库之间的时区转换

    做国外的项目经常会遇到时区转换的问题,这里简单针对遇到的时区问题做个记录,也希望对大家有所帮助,少走弯路。(本文设计开发语言为java)

    DannyHoo
  • 用于精确导航和场景重建的 3D 配准方法(ICRA 2021)

    Differential Information Aided 3-D Registration for Accurate Navigation and Scen...

    3D视觉工坊
  • aof数据的恢复和rdb数据在不同服务器之间的迁移

    如果在实际生产环境中一不小心执行了flushall,最好的办法就是立即shutdown nosave,如果没权限办法执行这个命令的话,那早点辞职跑路吧。

    程序员小饭
  • 一周玩转示波器(五)

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。...

    FPGA技术江湖
  • 激光雷达,马斯克看不上,却又无可替代?

    激光雷达LiDAR的全称为Light Detection and Ranging激光探测和测距,又称光学雷达。

    AI科技大本营

扫码关注腾讯云开发者

领取腾讯云代金券