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

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

为什么是“德尔塔”?

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

==【完】==

目录
相关文章
|
编译器 C# Windows
Inno Setup制作安装包教程
Inno Setup制作安装包教程
6041 0
|
11月前
|
人工智能 自然语言处理 开发者
Qoder 降价,立即生效!首购 2 美金/月
Qoder全球上线两月获数十万开发者信赖!现首购仅2美元/月,享全功能AI编程利器。集成顶尖模型,支持10万文件检索、智能体异步执行、CLI终端交互,助力高效开发。
2180 8
|
SQL 消息中间件 缓存
库存扣减问题
库存扣减问题
库存扣减问题
|
SQL HIVE
Hive分区+根据分区查询
Hive分区+根据分区查询
|
7月前
|
消息中间件 缓存 NoSQL
秒杀系统高并发核心优化与落地全指南
本文系统阐述秒杀系统架构设计:剖析瞬时高并发、库存超卖等核心痛点,提出漏斗过滤、读写分离、强一致性等设计原则;详解前端、Nginx、网关、业务、缓存、消息队列及数据库七层优化方案;并给出Redis预扣减+异步落库等生产级解决方案与完整代码实现。
897 3
|
10月前
|
人工智能 自然语言处理 前端开发
Playwright MCP在UI自动化测试中的定位与思考
本文探讨Playwright与Model Context Protocol(MCP)融合实现AI驱动UI测试的新范式。通过MCP,AI获得“眼”与“手”,可理解页面、自主操作浏览器。结合LangChain构建智能体,能用自然语言执行测试任务,具备强适应性与低门槛优势。但快照信息缺失、元素定位脆弱、成本高及LLM幻觉等问题仍存。该技术非替代传统自动化,而是适用于探索测试、脚本生成、A11y检测等场景的有力补充。
|
消息中间件 Serverless 网络性能优化
消息队列 MQ产品使用合集之客户端和服务器之间的保活心跳检测间隔是怎么设置的
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
SQL Java Apache
阿里云数据库 SelectDB 版内核 Apache Doris 2.1.4 版本正式发布
亲爱的社区小伙伴们,Apache Doris 2.1.4 版本已于 2024 年 6 月 26 日正式发布。在 2.1.4 版本中,我们对数据湖分析场景进行了多项功能体验优化,重点修复了旧版本中异常内存占用的问题,同时提交了若干改进项以及问题修复,进一步提升了系统的性能、稳定性及易用性,欢迎大家下载使用。
746 0
|
Java 数据库
定时任务还在用数据库轮询?redission延时队列了解一下
在平常的开发中经常会碰到定时任务处理的场景,比如说用户进行商品购买,下单之后超过半个小时还未进行支付则自动取消该笔订单,订单支付状态由待支付变更为已支付;
定时任务还在用数据库轮询?redission延时队列了解一下

热门文章

最新文章