2

我最近向 Azure 推送了一些新的 Web 和 Worker 角色,它们使用缓存基础架构在我们的一个业务流程中共享状态。在这种情况下,Web 角色 A将设置一个 DateTime 字段,然后工作角色 B将使用该字段作为各种内部业务流程的基础。在大多数情况下,Worker Role B 正在测量与 UtcNow 的时间差,这显然基于 Worker 角色主机系统时钟。

尽管很难精确测量,但 Web 角色的主机时钟和 Worker 角色的主机时钟之间似乎存在很大差异(根据我们的需要)。是否有一种机制可以在 Azure 中同步时钟,或者我应该使用其他方法吗?

4

1 回答 1

1

例如,您可以使用每 5 分钟运行一次的启动任务 + 计划任务来将实例的时间与公共时间服务器同步

function Get-InternetTime { 
  $TcpClient = New-Object System.Net.Sockets.TcpClient 
  [byte[]]$buffer = ,0 * 64 
  $TcpClient.Connect('time.nist.gov', 13) 
  $TcpStream = $TcpClient.GetStream() 
  $length = $TcpStream.Read($buffer, 0, $buffer.Length); 
  [void]$TcpClient.Close() 
  $raw = [Text.Encoding]::ASCII.GetString($buffer) 
  [DateTime]::ParseExact($raw.SubString(7,17), 'yy-MM-dd HH:mm:ss', $null).toLocalTime() 
} 

Set-Date (Get-InternetTime) 

或者,您可以从 SQL Azure 数据库中获取时间,并将该时间用作所有实例的参考:

select getdate()
于 2012-09-13T20:40:30.563 回答