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

简介: Fischer Lynch Paterson定理是分布式理论中非常重要的一个定理,其结论相当悲观:在一个多进程异步系统中,由于没有全局绝对时钟,一定不存在一个一致的消息投递协议。

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

缘起:无绝对时钟

Fischer Lynch Paterson定理是分布式理论中非常重要的一个定理,其结论相当悲观:在一个多进程异步系统中,由于没有全局绝对时钟,一定不存在一个一致的消息投递协议。

工程折衷:单点序列化

每个进程,每台服务器都有自己的本地时钟,跨服务器的本地时钟比较是没有意义的,这一点很好理解,服务器A上的本地时间ta=1,服务器B上的本地时间tb=2,虽然ta

工程上,可以使用一台单点服务器来分发序列号,或者使用这台单点服务器来进行序列化,来模拟全局时钟。

问题的提出:既然两台服务器的本地时间存在差值,如何来测量两台服务器之间的时间差呢?

答案是,发包测量。
image.png

发包流程如上图:

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

为什么是“德尔塔”?

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

==【完】==

目录
相关文章
|
前端开发 Java Docker
利用 docker 部署 elasticsearch 集群(单节点多实例)
利用 docker 部署 elasticsearch 集群(单节点多实例)
966 0
|
Java Linux Shell
Gradle下载和配置教程:Windows、Mac和Linux系统安装指南
Gradle下载和配置教程:Windows、Mac和Linux系统安装指南
2858 0
|
存储 关系型数据库 MySQL
1071 - Specified key was too long; max key length is 767 bytes
【2月更文挑战第5天】1071 - Specified key was too long; max key length is 767 bytes 问题处理
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
14583 60
|
9月前
|
人工智能 Java Nacos
基于 Nacos + Higress 的 MCP 开发新范式,手把手教程来了!
本文介绍了如何使用 Nacos 3.0.1 与 Higress 配合,实现 HTTP 服务转化为 MCP 协议服务,并支持自动注册与代理。通过 Docker 部署环境,结合 Spring AI Alibaba 框架,可实现服务的自动暴露和动态配置管理,适用于零改造存量应用适配 MCP 协议的场景。
3260 24
|
11月前
|
人工智能 Java API
MCP客户端调用看这一篇就够了(Java版)
本文详细介绍了MCP(Model Context Protocol)客户端的开发方法,包括在没有MCP时的痛点、MCP的作用以及如何通过Spring-AI框架和原生SDK调用MCP服务。文章首先分析了MCP协议的必要性,接着分别讲解了Spring-AI框架和自研SDK的使用方式,涵盖配置LLM接口、工具注入、动态封装工具等步骤,并提供了代码示例。此外,还记录了开发过程中遇到的问题及解决办法,如版本冲突、服务连接超时等。最后,文章探讨了框架与原生SDK的选择,认为框架适合快速构建应用,而原生SDK更适合平台级开发,强调了两者结合使用的价值。
13396 33
MCP客户端调用看这一篇就够了(Java版)
|
消息中间件 Java Maven
RocketMQ使用Docker Compose部署及使用
RocketMQ使用Docker Compose部署及使用
RocketMQ使用Docker Compose部署及使用
|
Oracle 关系型数据库 Windows
如何彻底卸载 IDEA,将IDEA完全删除
本文提供了一个详细的教程,指导用户如何彻底卸载 IntelliJ IDEA,包括使用Uninstall.exe程序和通过注册表删除残留项的步骤。
10856 3
如何彻底卸载 IDEA,将IDEA完全删除
|
弹性计算 Linux 网络安全
阿里云Linux和Windows服务器远程连接方法教程
阿里云服务器怎么远程连接?Windows可以使用MSTSC远程桌面,Linux可以SSH连接,也可以使用阿里云服务器Web网页端的远程连接工具
7132 0
阿里云Linux和Windows服务器远程连接方法教程

热门文章

最新文章