В приведенном ниже коде Node.js timeDiff
иногда отрицателен (примерно в 1% случаев). То есть Redis time()
иногда возвращает время в несколько сотен миллисекунд в будущем по сравнению с Date.now()
, даже если экземпляр Redis находится на той же виртуальной машине AWS, и Date.now()
вызывается после успешного получения ответа отRedis.
Это что-то ожидается? Может ли это быть вызвано NTP, учитывая частоту и разницу (иногда близкую к одной секунде)?
К сожалению, я даже не смог найти исходный код для функции Redis time (), поэтому помочь найти его было быполезно также.
const redis = require("redis");
const Bluebird = require("bluebird");
Bluebird.promisifyAll(redis);
const redisClient = redis.createClient(LOCAL_PORT, LOCAL_HOST);
function runNext() {
logRedisLatency().finally(() => {
setTimeout(runNext, 20 * 1000);
});
}
function logRedisLatency() {
return redisClient.timeAsync().then((data) => {
const timeDiff = Date.now() - parseRedisTime(data);
console.log(timeDiff);
});
}
function parseRedisTime(data) {
const seconds = parseInt(data[0], 10);
const milliseconds = parseInt(data[1].substr(0, 3), 10);
const time = (seconds * 1000) + milliseconds;
return time;
}
runNext();