2

最近、いくつかの新しいWebロールとワーカーロールをAzureにプッシュしました。これらのロールは、キャッシュインフラストラクチャを使用して、ビジネスプロセスの1つで状態を共有します。この場合、WebロールAはDateTimeフィールドを設定し、ワーカーロールBはこのフィールドをさまざまな内部ビジネスプロセスの基礎として使用します。ほとんどの場合、ワーカーロールBは、明らかにワーカーロールホストシステムクロックに基づくUtcNowとの時間差を測定しています。

正確に測定することは困難ですが、Webロールのホストクロックとワーカーロールのホストクロックの間には(私たちのニーズのために)大きな違いがあるように見えます。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 に答える