- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有两个服务,服务 A 和服务 B。
我在服务 B
上调用方法 doStuff()
并在数据库中创建一个条目,其中包含 system.CurrentTime()
当时运行 B
代码的计算机。
我在服务 A
上调用方法 compareThings()
并查询服务 B
并提取我刚刚添加的条目并获取时间戳字段,称之为tsFromB
。现在,我想检查 system.CurrentTime() - tsFromB
。
我的问题是,如果计算机时钟差异之间 1
分钟的差异很重要,那么 system.CurrentTime() - tsFromB
来自运行 的计算机服务 A
是一个不错的选择吗?这是正确的吗?
最佳答案
出于多种原因,您不能相信个别计算机时钟。
为了回答您在评论部分的问题,我将分享 Martin Kleppmann 的书“设计数据密集型应用程序”中关于不可靠时钟部分的摘录。
- The quartz clock in a computer is not very accurate: it drifts (runs faster or slower than it should). Clock drift varies depending on the temperature of the machine. Google assumes a clock drift of 200 ppm (parts per million) for its servers, which is equivalent to 6 ms drift for a clock that is resynchronized with a server every 30 seconds, or 17 seconds drift for a clock that is resynchronized once a day. This drift limits the best possible accuracy you can achieve, even if everything is working correctly.
- If a computer’s clock differs too much from an NTP server, it may refuse to synchronize, or the local clock will be forcibly reset. Any applications observing the time before and after this reset may see time go backward or suddenly jump forward.
- If a node is accidentally firewalled off from NTP servers, the misconfiguration may go unnoticed for some time. Anecdotal evidence suggests that this does happen in practice.
- NTP synchronization can only be as good as the network delay, so there is a limit to its accuracy when you’re on a congested network with variable packet delays. One experiment showed that a minimum error of 35 ms is achievable when synchronizing over the internet, though occasional spikes in network delay lead to errors of around a second. Depending on the configuration, large network delays can cause the NTP client to give up entirely.
- Some NTP servers are wrong or misconfigured, reporting time that is off by hours. NTP clients are quite robust, because they query several servers and ignore outliers. Nevertheless, it’s somewhat worrying to bet the correctness of your systems on the time that you were told by a stranger on the internet.
- “Leap seconds result in a minute that is 59 seconds or 61 seconds long, which messes up timing assumptions in systems that are not designed with leap seconds in mind. The fact that leap seconds have crashed many large systems shows how easy it is for incorrect assumptions about clocks to sneak into a system. The best way of handling leap seconds may be to make NTP servers “lie," “by performing the leap second adjustment gradually over the course of a day (this is known as smearing), although actual NTP server behavior varies in practice.
- “In virtual machines, the hardware clock is virtualized, which raises additional challenges for applications that need accurate timekeeping. When a CPU core is shared between virtual machines, each VM is paused for tens of milliseconds while another VM is running. From an application’s point of view, this pause manifests itself as the clock suddenly jumping forward.
- “If you run software on devices that you don’t fully control (e.g., mobile or embedded devices), you probably cannot trust the device’s hardware clock at all. Some users deliberately set their hardware clock to an incorrect date and time, for example to circumvent timing limitations in games. As a result, the clock might be set to a time wildly in the past or the future.
当然,如果您决定从另一个分布式组件获取时钟数据,那么您将再次陷入分布式计算的经典问题,例如,如果为您提供时间的服务出现故障、无法访问或太过频繁,会发生什么情况慢等等。这也适用于数据库。只要能解决这个问题,使用这个全局共享的实体就会在某种程度上解决问题。
关于java - 在分布式服务架构中使用 System.currentTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57929269/
在这段代码中,我有 video.currentTime = {value}而且效果很好。 但是当我尝试按 Crtl+Shift+R 重新加载页面时,它会将 video.currentTime 设置为
我希望能够将视频重新加载到 HTML5 视频中,而无需在加载时重置 currentTime。我目前的做法如下: Get current time position Set time position
如何获取YouTube视频的当前时间? 我一直在搜索YouTube api,但我不明白: https://developers.google.com/youtube/js_api_reference?
我正在尝试编写一段 Javascript 以定时间隔在两个视频之间切换(不要问)。更糟糕的是,每个视频都必须从特定位置开始(大约十秒,再说一遍,不要问。) 我通过使用 YUI Async 库触发以间隔
我在我的应用程序中播放的音频有问题。我有 HTML 音频: 然后在我的游戏中我有这样的代码 jQuery('#correct-sound').get(0)
我希望我的audio2 文件在audio1.currentTime 为3 秒时播放,但我无法使其工作。我是 javascript 的新手,我错过了什么?这是我当前的 JavaScript 代码:
使用 Web Audio API 使用振荡器生成基本音调,但存在改变演奏音符的持续时间(以秒为单位)的问题。 问题在于“维持”变量未按预期工作以停止振荡器。该变量按预期播放一个音符,然后其余音符无限持
这是我的代码: public void idoKiiras(){ String idostring = new String(); idostring.valueOf(System.
我目前正在尝试编写学校时间表。我总是在开学第一天检查我们在学校拿到的纸质格式。这就是我的问题: 我想在一天中的某个时刻显示一个标签(有关类(class)的信息)。我的意思是,如果时钟是 10:20,它
我想我在 JavaScript Audio API 上发现了一个错误。 我的代码运行得非常完美: var audio=new Audio(); var lastPause; var myPlayer=
在我问我的问题之前,我只是想说我对 Javascript 和 StackOverflow 一般都是菜鸟,所以如果这个问题太愚蠢,我想提前道歉。 无论如何,我正在学习 Javascript,现在我正在试
所以,我有一些代码由于某些奇怪的原因而不起作用。它的任务是,更改 id 为 blogtxt 的元素的属性 class IF day 变量等于 4、5 或 6(周五、周六、周日)我还希望在 day =
我在音频 html5 中使用 currentTime 时遇到问题。它在控制台中给我一个错误 InvalidStateError: An attempt was made to use an objec
当我更改其中一个 AVAudioPlayer 的 rate 并稍后调用 currentTime 时,我得到了错误的值。这是为什么? 例如,这段代码没有像我期望的那样工作: AVAudioPlayer*
当我在暂停播放器后更改 AVAudioPlayer 的 currentTime 时,它会出现滞后(一些时间为正,一些时间为负)。 [self.bookAudioPlayer pause]; [self
我有两个服务,服务 A 和服务 B。 我在服务 B 上调用方法 doStuff() 并在数据库中创建一个条目,其中包含 system.CurrentTime()当时运行 B 代码的计算机。 我在服务
我有一个简单的 HTML 页面,我在该页面上播放视频。我使用滚动条作为搜索栏。换句话说,只要用户滚动,视频就会播放。 我已经在几个地方看到过这种效果,并且想自己创建它。我写的脚本可以正常运行,但有一个
我有如下设置,在装有 iOS 10.3 的 iPhone 5s 上进行测试,包括调试和未调试。 AVAudioRecorder 触发 record(forDuration: 5.0) CADispla
这是一个 link to the sandbox .我正在寻找操纵 的最佳方法元素的当前时间。在我的沙箱中,我已经能够通过让按钮调用函数来做到这一点 seek()这改变了 video 的状态, 对
我正在尝试从声音文件中的某个点开始播放声音 (mp3)。我希望它可以在大多数移动设备上运行,并且确实可以,但 Windows Phone 8 似乎存在问题。它在三星 Galaxy 和 iPhone 上
我是一名优秀的程序员,十分优秀!