AWS(亚马逊网络服务)和微软服务器之间的时差为 1 秒

time difference 1 second between AWS (amazaon web service) and Microsoft server

服务器(windows 2016 与 time.windows.com 同步)和第三方网络服务(部署在 AWS - 亚马逊网络服务)之间存在 1 秒的差异。

问题是:我向 TPS(第三方服务)发送一个带有日期参数 Date = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ") 的请求,并得到一个日期小于发送日期的响应(最多相差 1 秒)。请求中的日期是请求的创建日期,响应中的日期是响应的创建日期。

请求 : "timestamp":"2018-10-24T01:33:12Z"

响应"timestamp":"2018-10-24T01:33:11.0000138Z"

谁能解释一下时差?以及如何正确解决这个问题

两个平台之间的网络延迟和不同的 NTP 服务器可以解释 1 秒的差异。您可能在上述设置中使用了 2 个不同的时间参考。仅此一项就可以解释漂移。

当然,不同的应用程序或用例可能需要或多或少的精度。对于某些设置,1 到 2 秒可能是不可接受的。根据我的经验,可以使用相同的参考时钟通过普通 NTP 实现 100 毫秒同步 precision/jitter。

https://serverfault.com/questions/724409/how-accurate-can-we-get-computer-clocks-synchronized-in-a-local-network-of-any-n 对影响 NTP 时间同步精度的问题进行了很好的讨论。

另请参阅 https://aws.amazon.com/blogs/aws/keeping-time-with-amazon-time-sync-service/ 了解 AWS 如何管理其参考 NTP 时钟。

有关 NTP 网络时间协议的概述,请参阅 https://en.m.wikipedia.org/wiki/Network_Time_Protocol

添加到另一个有趣的答案:

如果你想获得响应和请求的顺序,那么你应该使用同一台机器(请求的发送者)产生的时间戳,而不是信任和比较不同机器产生的时间戳。

只有在那里你才能保证时间戳的顺序逻辑排序与请求/响应的顺序一致。

此外,不要忘记写在 headers 中的时间戳基本上是可以伪造的数据,如果它来自 third-party 来源。