Windows Azure上的时钟同步质量?

如何解决Windows Azure上的时钟同步质量?

| 我正在寻找有关Windows Azure上VM之间的时钟偏移的定量估计-假设所有VM都托管在同一数据中心中。我猜测一个虚拟机和另一个虚拟机之间的平均时钟偏移小于10秒,但我什至不确定它是否是Azure云的保证属性。 有人对此事进行过定量测量吗?     

解决方法

我终于下定决心自己做一些实验。 有关实验方案的一些事实: 我没有寻找参考时钟的偏移,而是仅检查了Azure VM和Azure存储之间的时钟差异。 已使用下面粘贴的HTTP hack检索了Azure存储的时钟时间。 已在Azure的北欧数据中心内使用250个小型VM进行了测量。 对于未经身份验证的简约请求,使用“ 0”衡量的存储和VM之间的延迟始终小于1ms(基本上,HTTP请求返回了400个错误,但HTTP标头中仍然存在“ 1”)。 结果: 大约50%的VM的时钟偏移量大于1s。 大约5%的VM到存储的时钟偏移大于2s。 不到1%的时钟偏移观测值关闭了3s。 一手异常值接近4s。 从一个请求到下一个请求,单个VM和存储之间的时钟偏移通常在+ 1 / -1秒之间变化。 因此,从技术上讲,我们离2s容差目标不太远,尽管对于数据中心内同步,您不必为了使接近4s的偏移而进行实验。如果我们假设时钟偏移量为正态(aka高斯)分布,那么我想说,依赖任何低于6s的时钟阈值必然会导致调度问题。
/// <summary>
/// Substitute for proper NTP (Network Time Protocol) 
/// when UDP is not available,as on Windows Azure.
/// </summary>
public class HttpTimeChecker
{
    public static DateTime GetUtcNetworkTime(string server)
    {
        // HACK: we can\'t use WebClient here,because we get a faulty HTTP response
        // We don\'t care about HTTP error,the only thing that matter is the presence
        // of the \'Date:\' HTTP header
        var tc = new TcpClient();
        tc.Connect(server,80);

        string response;
        using (var ns = tc.GetStream())
        {
            var sw = new StreamWriter(ns);
            var sr = new StreamReader(ns);

            string req = \"\";
            req += \"GET / HTTP/1.0\\n\";
            req += \"Host: \" + server + \"\\n\";
            req += \"\\n\";

            sw.Write(req);
            sw.Flush();

            response = sr.ReadToEnd();
        }

        foreach(var line in response.Split(new[] { \'\\r\',\'\\n\' },StringSplitOptions.RemoveEmptyEntries))
        {
            if(line.StartsWith(\"Date: \"))
            {
                return DateTime.Parse(line.Substring(6)).ToUniversalTime();
            }
        }

        throw new ArgumentException(\"No date to be retrieved among HTTP headers.\",\"server\");
    }
}
    ,最近,我一直在与Azure产品团队的某人就时钟同步进行对话,这比其他任何事情都引起了人们的兴趣。我收到的最新答复是:   VM和服务直接从底层花费时间   Hyper-V平台在启动时以及从该点开始的时钟为   由服务维护。为了使真实时间在   分布式系统,您将需要在应用程序层执行此操作   和/或带有引用单个时间服务器的服务。     ,根据我的经验,我不会依赖Azure VM的系统时钟来处理任何关键事件。我偶尔会看到长达几分钟的差异,这确实会遇到您的期望。     ,这是分布式系统和虚拟机的经典问题-时钟偏斜。 一种可能的解决方案是使用Azure调度程序对每个VM上的终结点计算机执行ping操作,这将重置您的时钟-或至少告诉您差异是什么。这样,您的偏差就不会增加,甚至可以计算出通信延迟的偏移量。这样,您将可以在几毫秒而不是几秒钟内到达。 当然,您也可以采用其他方法,并在VM上具有一项服务,该服务通过向某个时间服务器执行查询来定期管理时钟。我不确定虚拟机管理程序是否会让您混乱它的时钟,但是您真正需要的只是抵消应用程序使用的开销。 总体而言...永远不要相信VM上的时钟,当然也不要相信分布式系统上的时钟。请注意,这个时钟问题是许多大学积极研究的一部分。即。 https://scholar.google.com/scholar?hl=zh-CN&q=distributed+system+clock&btnG=&as_sdt=1%2C48&as_sdtp=     ,我已尝试寻找此特定问题的答案-但没有成功! 我发现一些有关“ Windows时间服务”-W32Time的参考,该参考指出Windows服务的设计目标是2秒的容限-例如 http://www.windowsitpro.com/article/time-synchronization/windows-time-synchronization-service http://support.microsoft.com/kb/939322 在实践中,我希望在Azure网络中实现的同步比这要好得多-但我的搜索没有对此提供任何参考保证。     ,如果您要构建分布式系统,则永远不能信任时钟同步,除非使用特殊的硬件措施(例如在Google Spanner中使用)。即使使用特殊算法,也可以解决可能的时钟偏斜冲突。 但是,有许多算法可以解决分布式系统中的此问题:逻辑时钟,矢量时钟,Lamport时间戳等等。请参阅Andrew Tanenbaum撰写的经典著作“分布式系统:原理和范例”。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res