我有一个网络服务器,它处理来自多个源/机器的事件。 对于每个事件,我都会给出一个时间戳,并将其存储在数据库中。这样,即使不是源计算机中的所有时钟都有准确的时间 - 也没关系。事件的顺序将被保留,因为服务器对时间戳负责。
现在,我想再添加一台可以处理这些事件的服务器,并将它们存储在同一个数据库中。 在服务器之间同步时钟的最佳方法是什么?服务器部署在客户站点上,尽管我可以指示他时钟必须同步,但我想确保这一点。
有什么办法可以解决服务器之间不通信的问题吗? 有没有办法在SQL语句中使用DB机器时钟? (我应该支持mysql、sqlserver和oracle。我的O/R映射是hibernate)。
最佳答案
同步应用程序服务器时间(NTP 等)并不能“确保”它们之间的事件完美排序。两个服务器有不同的时间线,它们无法独立决定两个服务器发生事件的“顺序”。这是众所周知的:http://en.wikipedia.org/wiki/Lamport_timestamps
你说“相同”DB => 这是决定事件“顺序”的好地方。但“事件”将是“INSERT 请求到达数据库”。您可以接受吗?
如果 #1 可以接受,并且出现的“顺序”很重要,那么最好使用自动增量字段:http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
您仍然可以保留时间戳,只是不要用它来决定“顺序”。
关于java - 服务器之间同步时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9411795/