如何在云(AWS、heroku 等)中跨多个节点建立时钟同步?

2024-01-23

我想在云中运行一个大型节点集群(AWS、Heroku,或者可能是自我管理的 VMS),其时钟必须与预定义的容差同步。我正在寻找大约 200 毫秒的容差。这意味着,如果我有 250 个节点,那么这 250 个节点之间的最大时钟差异不应超过 200 毫秒。我并不真正关心世界的实际日期/时间。该解决方案必须是容错的,并且不需要依赖于任何一个系统的时钟的准确性——事实上,很可能没有一个时钟是非常准确的。

该要求足够强烈,如果出于任何原因确定时钟同步对于任何特定节点来说不可靠,我宁愿由于时钟不同步而从集群中删除节点 - 因此对于任何可疑的故障,我都会希望能够对该节点执行某种类型的受控关闭。

我很想使用 NTP 之类的东西,但根据 NTP已知问题 http://twiki.ntp.org/bin/view/Support/KnownOsIssues:

NTP 并非设计用于在虚拟机内运行。 它需要高分辨率的系统时钟,以及对时钟中断的响应时间 提供高精度服务。没有已知的虚拟机 能够满足这些要求。

尽管同一个 twiki 然后描述了解决这种情况的各种方法(例如在主机操作系统上运行 ntp),但我不相信我有能力使用 AWS 或在 horoku 上修改环境以遵守解决方法。

即使我没有在虚拟机中运行,一位拥有多年运行 ntp 经验的值得信赖的运营经理告诉我,由于本地时钟漂移每隔一段时间就会导致 ntp 可能并且会放弃同步(或者简单地得到时间错误)。这种情况并不经常发生,但确实会发生,并且随着机器的增加,发生这种情况的机会也会增加。 AFAIK,检测距离有多远需要停止 ntpd,运行查询模式命令,然后再次启动它,并且可能需要很长时间才能得到答案。

总而言之——我需要一个时钟同步,其主要目标如下:

  • 在操作控制有限的虚拟机(即:“云服务提供商”)中运行良好
  • 集群中所有参与者之间的时间容差约为 200 毫秒
  • 能够检测坏节点并积极做出反应
  • 容错(无单点故障)
  • 可扩展(当你添加更多节点时,东西不会倒塌——绝对避免 n^2)
  • 可以支持数百个节点
  • 不应认为任何节点比任何其他节点具有更优越的时间概念
  • 整个集群发生漂移(在合理范围内)是可以的——只要它一致漂移

从描述来看,似乎是伯克利算法 http://en.wikipedia.org/wiki/Berkeley_Algorithm在这里可能是正确的选择,但它已经实施了吗?

很高兴拥有:

  • 最小配置(节点自动注册参与)——对于启动新节点很重要
  • HTML 仪表板或(REST?)API,报告参与时钟同步的节点以及相对时间偏移量
  • 漂亮的图表?

Since NTP 常见问题解答 http://twiki.ntp.org/bin/view/Support/KnownOsIssues#Section_9.2.2.具体说明了为什么 NTP 时间同步在虚拟机下无法“正常”工作,这可能是一个无法克服的问题。

大多数机器都有一个 RTC(实时时钟),在 PC 上它是您存储时间的方式,以便您可以“粗略”猜测时间,如果 ntp 不可用,一旦系统加载,就会出现“时钟的分辨率更高——这就是 NTP 设置的。

该滴答时钟会受到虚拟机漂移的影响,因为滴答可能会或可能不会以正确的间隔发生 - 您尝试使用的任何时间机制都将受到该漂移的影响。

如果机器 A 和 B 的增量为 200 毫秒,而机器 B 和 C 的增量为 200 毫秒,则 C 可能与 A 相差 400 毫秒,尝试在虚拟机上强制执行 ntp 同步可能是次优的设计。您无法控制这一点。

你最好使用像 Zeromq 这样的集中式消息系统来让每个人都与作业队列同步,这会增加开销,但依赖系统滴答时间充其量是一件狡猾的事情。有许多集群解决方案使用各种可靠的机制来考虑集群参与,以确保每个人都同步,看看 corosync 或 spread - 他们已经解决了诸如两阶段提交之类的问题。

顺便说一句,当漂移太高时 ntp“放弃”可以通过指示 ntp 将时间“猛击”到新值而不是“转换”来避免。默认情况下,ntp 将增量更新系统时间以解决其与“实时”的偏差。我忘记了如何在 ntpd 中配置它,但如果你使用 ntpdate,标志是 -B

-B      Force the time to always be slewed using the adjtime(2) system call, even if the measured 
offset is greater than +-128 ms.  The default is to step the time using settimeofday(2) if the offset 
is greater than +-128 ms.  Note that, if the offset is much greater than +-128 ms in this case, it
can take a long time (hours) to slew the clock to the correct value.  During this time, the host 
should not be used to synchronize clients.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在云(AWS、heroku 等)中跨多个节点建立时钟同步? 的相关文章

  • 将大文件从 Google Cloud Storage 加载到 Google Cloud Functions 中?

    有没有办法将大文件 gt 100MB 从 Google Cloud Storage 加载到 Google Cloud Functions 中 我在他们的书中读到quotas https cloud google com functions
  • 使用 google-api-php-client 下载文件

    我在尝试使用位于以下位置的 php 客户端从 Google Cloud Storage 下载文件时遇到问题https code google com p google api php client https code google com
  • 监控 GKE 上运行的 Cronjob

    我正在尝试监控 GKE 上运行的 CronJob 但我看不到检查 CronJob 是否实际运行的简单方法 如果 CronJob 运行时间没有超过 X 时间 并且 Stackdriver 似乎不支持 我想触发警报 目前 我尝试使用基于日志记录
  • Flutter:cloud_firestore 的构建错误:版本“0.7.4”以上

    我花了几个小时试图解决构建问题 直到我意识到这是由于 Flutter 插件 cloud firestore 造成的 版本 0 7 4 对于 Android 和 iOS 来说都可以正常构建 但任何高于 0 7 4 的版本 例如 0 8 2 1
  • 为什么相同的Python代码有不同的时钟时间?

    我正在使用以下 python 代码对我的服务器进行基准测试 import time initial clock time clock res 0 for i in range 1 10000000 res i i print time cl
  • 面向 Web 开发人员的 Windows Azure 与 Amazon EC2

    我刚刚观看了 Windows Azure 介绍视频 它让我感觉它是托管 IIS 实例的前端 shell 任何了解更多信息的人 可能是测试版的一部分 是否可以解释为什么您会使用它而不是 EC2 它看起来很简单 但实际上没有详细说明它是如何工作
  • NTP 对于分布式时间同步有多好?

    NTP 用于保持一组服务器时间同步的准确度如何 我正在编写一项服务 需要一组服务器 一些充当客户端 一些充当服务器 同步到二级粒度 我想知道 NTP 是否是最好使用的东西 或者是否有更好的东西 我应该在其中一个上运行 ntp 服务器 并让其
  • 避免节流 dynamoDB

    我是云计算的新手 但有一个问题 我将要描述的机制是否存在或可以创建 Dynamodb 已配置吞吐量 例如 100 次写入 秒 当然 在现实世界的应用程序中 实际吞吐量是非常动态的 几乎永远不会是您配置的 100 次写入 秒 我在想 dyna
  • Cloud Firestore:如何在集合查询中获取文档引用并将其映射为 JSON 值?

    假设我有一个评论集合 每个评论对象都有一个发帖用户的 文档引用 我需要一个查询 该查询将返回一个评论列表 其中包括每个用户引用的值 因此我的查询返回一个格式良好的 Json 评论对象 类似的问题在这里被问到Firebase Firestor
  • AWS Cloudformation:将环境变量作为参数传递给 lambda 函数

    我正在为 lambda 创建云层 我想要一个创建 lambda 的通用 lambda 脚本 我从外部注入 环境 参数时遇到问题 我想将键值对对象作为参数传递 有人可以告诉我该怎么做吗 我在下面突出显示了它 Variables String
  • 在 Amazon EC2 Windows 实例中自动挂载 EBS 卷

    有谁知道如何自动挂载弹性块存储 http aws amazon com ebs 在 Amazon 中启动 Windows 2003 实例时的 EBS 卷弹性计算云 http aws amazon com ec2 EC2 Setup 确保 E
  • 更新 AWS S3 对象密钥(密钥名称)

    我需要重命名 AWS S3 存储桶中存储的大量文件 每个文件 对象将单独重命名 基于特定标准 没有通用的 前缀 后缀 我想出了 current filename 和 new filename 的列表 它们可以作为 bat 文件 队列在 CL
  • 多个环境中的 Azure 云服务项目配置(.csdef 和 .cscfg)

    目前我们有一个开发云服务 acme dev service 和一个生产云服务 acme prod service 我们解决方案中当前的设置有一个名为 acme application 的云服务项目 它使用 cscfg 和 csdef 文件的
  • 了解 Azure 事件中心分区使用者模式

    Azure 事件中心使用分区使用者模式中描述的docs https learn microsoft com en us azure event hubs event hubs features 当涉及到现实世界场景时 我在理解该模型的消费者
  • Azure Web应用服务时区更改问题

    我们正在使用 Azure Web 应用程序服务进行多租户应用程序 但应用程序服务的默认时区是 UTC 我只想更改该地区的时区 我已经在应用程序设置中尝试了 WEB TIMEZONE 变量 但不起作用 You are setting wron
  • getmtime() 与 datetime.now():

    此代码每年在时钟转换的晚上打印一次错误警告 中欧夏令时间到中欧时间 import os import datetime now datetime datetime now age now datetime datetime fromtime
  • 如何在 Windows Azure 上部署 Java 应用程序

    您好 我是一名计算机科学专业三年级学生 我已经在 netbeans 上用 java 创建了一个三年级项目 现在我想将其部署到带有 windows azure 的虚拟机上 重点是 我希望能够在任何连接到互联网的计算机上使用这个应用程序 只需访
  • 何时应使用以下各项:Amazon EC2、Google App Engine、Microsoft Azure 和 Salesforce.com? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我是在非常普遍的意义上问这个问题 无论是从云提供商还是云消费者的角度来看 此外 问题不针对任何特定类型的应用程序 实际上 目的是了解哪种类型的应
  • “时钟”是否测量“睡眠”,即挂起的线程?

    我正在尝试理解clock t clock void 功能更好 有以下问题 我理解正确吗clock测量进程的滴答数 因为它是积极奔跑 and sleep挂起调用线程 在这种情况下只有一个线程 即主线程 因此挂起整个进程 意思就是clock不测
  • 用于云服务“沙盒”的 SecurityManager

    All 我正在设计一个基于云的服务 该服务将提供执行客户提交的一些 插件 代码的选项 为了使这项工作正常进行 插件不能威胁系统完整性或有能力访问其他客户端的数据 这一点至关重要 理想情况下 我希望客户端能够提交一个简单的 jar 文件 包含

随机推荐

  • 修改python-docx中paragraph.style._element.xml中的XML

    我想修改边框的颜色 我通过调用获取它的 XMLstyle element xml gt gt gt document Document gt gt gt run document add heading u 0 add run hello
  • Android 6 异常(谷歌地图?)

    我在 firebase 崩溃报告中遇到异常 但不明白异常原因 应用程序在 Android 5 上运行良好 Exception java lang IllegalAccessError Method java lang Object ade
  • 在 Python 中迭代 XML 标签并获取元素的 xpath

    我想迭代 XML 文档中的每个 p 标签 并能够获取当前元素的 xpath 但我没有找到任何可以做到这一点的东西 我尝试过的代码类型 from bs4 import BeautifulSoup xml file open data xml
  • 彗星服务器选择问题

    我想写一个使用comet技术进行实时更新的php网站 我有几个问题 使用彗星服务器更好吗 彗星服务器哪家好 对于comet服务器 例如orbited 我必须首先安装基于python的orbited服务器 然后编写php文件来创建套接字以连接
  • 使用 fftw 和窗函数生成正确的频谱图

    对于一个项目 我需要能够从 WAV 文件生成频谱图 我读过以下应该做的事情 获取N 变换大小 个样本 Apply a window http en wikipedia org wiki Window function功能 使用样本进行快速傅
  • 将 CancellationToken 传递给任务类构造函数有什么用?

    以下是创建模拟长时间运行流程的新任务的示例代码 该任务本身并没有太多内容 只是专注于取消功能 我正在使用取消令牌来取消任务 并且代码对我来说工作正常 CancellationTokenSource CTS new CancellationT
  • 使用 VBA 在 Excel 中选择形状

    我正在尝试使用 VBA 按名称选择形状 在我的工作表中 我有 10 个形状 名称分别为 1 到 10 并且想要一个特定的形状 由于某种原因 excel 使用我的代码选择的形状似乎不是我告诉它选择的名称的形状 据我所知 它选择的形状是随机的
  • 无法将“Vary”标头附加到响应中

    我正在尝试添加一个Vary Accept Encoding我压缩的文件的响应头 正如之前所建议的 https stackoverflow com questions 7848796 what does varyaccept encoding
  • 根据任意分布设置 Eigen::Matrix 的系数

    Eigen Matrix 有一个 setRandom 方法 它将矩阵的所有系数设置为随机值 但是 是否有一种内置方法可以将所有矩阵系数设置为随机值 同时指定要使用的分布 有没有办法实现类似以下内容 Eigen Matrix3f myMatr
  • SqlDependency 仅在订阅时触发

    我正在尝试利用SqlDependancy在 SignalR 项目中 但我似乎无法得到OnChanged事件多次触发 它最初在订阅事件上触发 但在对底层数据库进行更改后不会再次触发 我省略了 SignalR 和控制器代码 因为问题似乎出在存储
  • PHP 引导基础知识

    我正在编写我的第一个 PHP 应用程序 每个人都谈论拥有一个bootstrap php初始化您的应用程序 这是有道理的 我已经整理了一个我很满意的 有两件事我不明白 而且似乎没有人提到 我在哪里调用我的引导表单 我是否将其包含在每个页面中
  • C++ 中的 IPv6 连接测试

    是否有任何 C 函数可以测试运行我的程序的计算机是否支持 IPv6 连接 我需要知道类似此页面的结果http test ipv6 com http test ipv6 com 但是在 C 中 EDIT 我试图使用getifaddrs 但返回
  • 如何从 FTP 获取文件(使用 C#)?

    现在我知道如何将文件从一个目录复制到另一个目录 这非常简单 但现在我需要对 FTP 服务器上的文件执行相同的操作 你能给我一些如何在更改文件名的同时从 FTP 获取文件的示例吗 看一眼如何 使用 FTP 下载文件 http msdn mic
  • 将动态加载的自定义 ASP 控件的脚本注册到 DOM

    我在 a 期间加载我的 ascx 控件postback 下拉更改事件 父级 C private void ddlChange MyControl myCtr CallScript Page LoadControl Controls MyCo
  • 通过单击按钮填充 Javascript 中的文本框 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我试图通过单击表单按钮来填充表单上的
  • WebClient DownloadString UTF-8 不显示国际字符

    我尝试将网站的 html 保存在字符串中 该网站具有国际字符 即使我将编码设置为与网站字符集相对应的 UTF 8 它们也不会保存到字符串中 这是我的代码 using WebClient client new WebClient client
  • 优化多重连接

    我正在尝试找出一种方法来加速一个特别繁琐的查询 该查询按日期在几个表中聚合一些数据 下面是完整的 丑陋的 查询以及EXPLAIN ANALYZE以表明它是多么可怕 如果有人可以看一下 看看他们是否能发现任何重大问题 很可能 我不是 Post
  • 是否可以使用 Mongoose 在 MongoDB 中创建新数据库?

    我想知道是否可以使用 Mongoose 在 MongoDB 中创建一个新数据库 我在 Node 上运行 并且我知道 Node 的 MongoDB 驱动程序可以做到这一点 但我想知道是否可以仅从 Mongoose 中做到这一点 有没有相当于d
  • 对于 OS X 特定代码,我应该使用什么 C 预处理器条件?

    对于 OS X 特定代码 我应该使用什么 C 预处理器条件 如果我为 OS X 进行编译 则需要包含特定的库 如果为 Linux 进行编译 则需要包含不同的标头 我知道有 APPLE 但我不知道这是否是 OS X 10 x 的当前条件 此操
  • 如何在云(AWS、heroku 等)中跨多个节点建立时钟同步?

    我想在云中运行一个大型节点集群 AWS Heroku 或者可能是自我管理的 VMS 其时钟必须与预定义的容差同步 我正在寻找大约 200 毫秒的容差 这意味着 如果我有 250 个节点 那么这 250 个节点之间的最大时钟差异不应超过 20