Я хотел бы запустить большой кластер узлов в облаке (AWS, Heroku или, возможно, самоуправляемую VMS), часы которых должны быть синхронизированы с заранее заданным допуском. . Я ищу допуск в 200 мс. Это означает, что если у меня есть 250 узлов, самая большая разница в часах между любым из 250 узлов никогда не должна превышать 200 мс. Меня действительно не волнует фактическая дата / время по отношению к миру. Решение должно быть отказоустойчивым и не должно полагаться на точность часов какой-либо одной системы - на самом деле, вполне вероятно, что ни один из часов не будет ужасно точным.
Требование достаточно сильное, если по какой-либо причине синхронизация часов определена как ненадежная для какого-либо конкретного узла, я бы предпочел удалить узел из кластера из-за десинхронизации часов - так что при любом подозрении на сбой, Я хотел бы иметь возможность выполнять контролируемое отключение этого узла.
Я бы хотел использовать что-то вроде NTP, но согласно известным проблемам NTP twiki :
NTP не предназначен для работы внутри виртуальной машины. Требуются системные часы с высоким разрешением и временем отклика на прерывания часов. которые обслуживаются с высокой точностью. Нет известных виртуальных машин способный удовлетворить эти требования.
И хотя тот же твики затем описывает различные способы решения ситуации (например, запуск ntp в ОС хоста), я не верю, что у меня будет возможность достаточно изменить среду с помощью AWS или на horoku. соблюдать обходные пути.
Даже если я не работал на виртуальных машинах, доверенный диспетчер операций, имеющий многолетний опыт работы с ntp, сказал мне, что ntp может и будет прерывать синхронизацию (или просто неправильно указывать время) из-за плохого дрейфа локальных часов каждый раз в в то время как. Это случается не часто, но случается, и по мере увеличения числа машин вы увеличиваете свои шансы на то, что это произойдет. AFAIK, для определения того, как далеко вы находитесь, требуется остановить ntpd, запустить команду режима запроса и снова запустить его, а получение ответа может занять много времени.
Подводя итог - мне нужна синхронизация часов, основная цель которой заключается в следующем:
Из описания кажется, что Алгоритм Беркли может быть правильным выбором здесь, но реализован ли он уже?
Приятно иметь: