2012-09-13 3 views
2

J'ai récemment ajouté un certain nombre de nouveaux rôles Web et Worker à Azure, qui utilisent l'infrastructure de cache pour partager l'état pendant l'un de nos processus métier. Dans ce cas, Le rôle Web A définira un champ DateTime que Le rôle de travail B servira ensuite de base pour divers processus métier internes. Dans la plupart des cas, le rôle de travail B mesure la différence de temps entre UtcNow, qui est évidemment basée sur l'horloge du système hôte des rôles de travailleur.Synchronisation de l'heure entre les rôles dans Azure

Bien qu'il ait été difficile à mesurer avec précision, il semble y avoir de grandes différences (pour nos besoins) entre l'horloge hôte du rôle Web et l'horloge hôte du rôle de travail. Existe-t-il un mécanisme pour synchroniser les horloges au sein d'Azure ou existe-t-il une autre approche que je devrais utiliser?

+0

Je suppose que chaque instance de Web \ Worker Role Machine doit être synchronisée avec Time Server. N'est-ce pas le comportement par défaut? –

Répondre

1

Vous pouvez utiliser une tâche de démarrage + tâches planifiées qui exécutent toutes les 5 minutes par exemple synchronize the time of your instances with a common time server:

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) 

Ou vous pourriez obtenir le temps à partir d'une base de données SQL Azure et utiliser ce temps comme une référence pour tous vos instances:

select getdate() 
Questions connexes