Качественная синхронизация часов в Windows Azure? - PullRequest
25 голосов
/ 26 мая 2011

Я ищу количественные оценки для смещения часов между виртуальными машинами в Windows Azure - при условии, что все виртуальные машины размещены в одном центре данных.Я предполагаю , что среднее смещение тактовой частоты между одной виртуальной машиной и другой меньше 10 секунд, но я даже не уверен, что это гарантированное свойство облака Azure.

ИмеетКто-нибудь какие-то количественные измерения по этому вопросу?

Ответы [ 6 ]

27 голосов
/ 01 июня 2011

Я наконец-то решил провести некоторые эксперименты самостоятельно.

Несколько фактов, касающихся протокола эксперимента:

  • Вместо того чтобы искать смещение опорных часов , я просто проверил разности часов между виртуальными машинами Azure и хранилищем Azure .
  • Время часов хранилища Azure было получено с помощью HTTP-хака, вставленного ниже.
  • Измерения были проведены в центре обработки данных Azure в Северной Европе с 250 небольшими виртуальными машинами.
  • Задержка между хранилищем и виртуальными машинами, измеренная с помощью Stopwatch, всегда была меньше 1 мс для минималистических неаутентифицированных запросов (в основном HTTP-запросы возвращались с 400 ошибками, но все еще с Date: доступным в заголовках HTTP).

Результаты:

  • Около 50% виртуальных машин имеют смещение тактовой частоты хранения больше 1 с.
  • Около 5% виртуальных машин имеют смещение тактовой частоты хранения более 2 с.
  • Наблюдения смещений часов менее 1% близки к 3 с.
  • Ручные выбросы, близкие к 4 с.
  • Смещение тактовой частоты между одной виртуальной машиной и хранилищем обычно варьируется в пределах + 1 / -1 с от одного запроса к следующему.

Технически, мы не слишком далеки от цели допуска 2 с, хотя для синхронизации внутри центра обработки данных вам не нужно далеко продвигаться в эксперименте, чтобы наблюдать близко к смещению 4 с . Если мы предположим, что для смещений тактовых импульсов предполагается нормальное (то есть гауссовское) распределение, то я бы сказал, что использование любого тактового порога ниже 6 с неизбежно приведет к проблемам планирования.

/// <summary>
/// Substitute for proper NTP (Network Time Protocol) 
/// when UDP is not available, as on Windows Azure.
/// </summary>
public class HttpTimeChecker
{
    public static DateTime GetUtcNetworkTime(string server)
    {
        // HACK: we can't use WebClient here, because we get a faulty HTTP response
        // We don't care about HTTP error, the only thing that matter is the presence
        // of the 'Date:' HTTP header
        var tc = new TcpClient();
        tc.Connect(server, 80);

        string response;
        using (var ns = tc.GetStream())
        {
            var sw = new StreamWriter(ns);
            var sr = new StreamReader(ns);

            string req = "";
            req += "GET / HTTP/1.0\n";
            req += "Host: " + server + "\n";
            req += "\n";

            sw.Write(req);
            sw.Flush();

            response = sr.ReadToEnd();
        }

        foreach(var line in response.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries))
        {
            if(line.StartsWith("Date: "))
            {
                return DateTime.Parse(line.Substring(6)).ToUniversalTime();
            }
        }

        throw new ArgumentException("No date to be retrieved among HTTP headers.", "server");
    }
}
8 голосов
/ 25 июля 2014

Я недавно беседовал с кем-то из группы разработчиков продукта Azure по поводу синхронизации часов, более интересного, чем все остальное. Самый последний полученный мной ответ:

Виртуальные машины и сервисы берут свое время непосредственно из базового Платформа Hyper-V при загрузке и с этого момента часы поддерживается службой. Чтобы иметь точную синхронизацию времени через распределенная система, вам нужно будет сделать это на уровне приложений и / или со службой, ссылающейся на единственный сервер времени.

3 голосов
/ 11 марта 2015

Это классическая проблема как распределенных систем, так и виртуальных машин - перекос часов.

Одним из возможных решений было бы использование планировщика Azure для проверки связи с конечной точкой на каждой вашей виртуальной машине, которая бы сбрасывала ваши часы - или, по крайней мере, сообщала бы вам, какой будет разница. Таким образом, ваш перекос не будет расти, и вы даже сможете рассчитать смещение для задержки связи. Таким образом, вы получите с точностью до миллисекунд, а не секунд.

Конечно, вы также можете пойти другим путем и иметь службу на виртуальной машине, которая периодически управляет часами, отправляя запрос на некоторый сервер времени. Я не уверен, что гипервизор позволит вам связываться с его часами, но все, что вам действительно нужно, это смещение для ваших приложений.

В целом ... никогда не доверяйте часам на виртуальной машине, и уж точно не на распределенной системе. Обратите внимание, что эта проблема с часами является частью активных исследований во многих университетах. то есть. https://scholar.google.com/scholar?hl=en&q=distributed+system+clock&btnG=&as_sdt=1%2C48&as_sdtp=

3 голосов
/ 30 мая 2011

Исходя из своего опыта, я бы не стал полагаться на системные часы виртуальных машин Azure в отношении чего-либо критического.Я иногда видел различия до нескольких минут, что не соответствует ожиданиям.

1 голос
/ 27 мая 2011

Я пытался найти ответ на этот конкретный вопрос, но безуспешно!

Некоторые ссылки, которые я нашел о «Службе времени Windows» - W32Time, - указывают, что проект дляСлужба Windows нацелена на допуск 2 секунды - например,

На практике в рамкахСеть Azure Я ожидаю, что достигнутая синхронизация должна быть намного лучше, чем эта, но мой поиск не дал никаких гарантий по этому поводу.

0 голосов
/ 31 декабря 2017

Вы никогда не сможете доверять синхронизации часов, если строите распределенную систему, если не используются специальные аппаратные меры, как, например, в Google Spanner. Даже там используется специальный алгоритм для разрешения возможных конфликтов перекоса часов. Однако существует много алгоритмов, которые позволяют решить эту проблему в распределенных системах: логические часы, векторные часы, временные метки Лампорта и многие другие. См. Классическую книгу Эндрю Таненбаума «Распределенные системы: принципы и парадигмы».

...