Существует ли стандартное решение для тактовой синхронизации для Java?

Вы пытаетесь:

buildscript {
    repositories {
        ...
        // You need to add the following repository to download the
        // new plugin.
        google()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
    }
}

Кредиты: https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html

8
задан mbx 9 January 2015 в 16:33
поделиться

4 ответа

При распределенном программировании синхронизации часов часто бывает недостаточно. вы можете захотеть построить логическую структуру времени (такую ​​как Лампорт, векторные часы или методы Сингхала-Кшемкаляни ... и есть еще множество других, чтобы синхронизировать причинно-следственные связи между машинами). Что вы выбираете, часто зависит от приложения и требуемой причинно-следственной связи между событиями.

Часы синхронизируются, чтобы гарантировать, что параллельные события сохраняются в правильном последовательном порядке. Есть и другие способы сделать это, кроме поддержания синхронизации системных часов ... что, если они не используют общие физические часы ... довольно сложно.

Что касается погрешности NTP, есть решения:

моя рекомендация :

Прочитать: Распределенные вычисления: принципы, алгоритмы и системы

В частности: Глава 3, логическое время

Редактировать

В дополнение к сообщению Чизо, я нашел

http://www.uniforum.org/publications/ ufm / apr96 / opengroup.html

http://sourceforge.net/projects/freedce

Возможно, существуют привязки Java для DCE.

4
ответ дан 5 December 2019 в 21:21
поделиться

Я бы просто использовал NTP. Это довольно точно даже в Интернете, а в локальной сети должно быть еще лучше. Согласно Википедии [ 1 ],

NTPv4 обычно может поддерживать время с точностью до 10 миллисекунд (1/100 с) в общедоступном Интернете и может достигать точности 200 микросекунд (1/5000 с) или лучше в локальных сетях в идеальных условиях.

так что этого может быть достаточно для ваших нужд, если ваши условия достаточно «идеальные». NTP существует достаточно давно, поэтому с ним работает практически все. Я не вижу смысла делать это через Java, а не через ОС. Если ОС синхронизирована, то будет и Java.

[1] Википедия: Протокол сетевого времени

2
ответ дан 5 December 2019 в 21:21
поделиться

Старая DCE («Распределенная вычислительная среда») использовалась для решения распределенной временной синхронизации со всеми этими возможностями. Он назывался DTS. Администратор мог настроить набор машин для синхронизации, а задержка или неопределенность были рассчитаны и доступны. Если какая-либо машина выходила из синхронизации, ее часы медленно настраивались, пока она снова не синхронизировалась. Была гарантия, что время на любой машине никогда не вернется назад (в нарушение основ физики). Сети требовался хотя бы один вход NTP, чтобы оставаться синхронизированными с «реальным миром».

Я не знаю, что случилось с этой синхронизацией времени или с кодом DCE в целом.

Мне кажется, вам не нужно решение "на Java". Вам необходимо синхронизировать часы набора распределенных машин. Приложение Java - это как раз то, что работает на машинах.

0
ответ дан 5 December 2019 в 21:21
поделиться

Я наткнулся на эту тему после того, как попробовал что-то сделать самостоятельно (надо было сначала поискать!) http://snippets.dzone.com/posts/show/11345 - может быть хорошим методом, может быть плохим, но он распределенный (бессерверный), что приятно.

1
ответ дан 5 December 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: