我正在使用以下函数生成 UUID:
UUID.randomUUID().toString()
我们的生产环境有50多个服务器(应用服务器 - 每个都是自己的JVM),对于落在这些服务器上的请求,作为第一步,我们会生成一个UUID,它基本上唯一标识了一个事务。
我们观察到,在第6和第11台服务器上,每天至少有10到15条消息的UUID匹配,这很奇怪,因为考虑到负载即每天约100万个事务,这些UUID在同一天内重复非常不寻常。
我们迄今为止所做的:
- 验证应用程序日志 - 我们没有发现任何可疑的内容,所有日志都正常
- 尝试在具有类似生产负载和50多个服务器的测试环境中复制此问题 - 但在测试环境中并未发生此问题
- 检查应用程序逻辑 - 这似乎不是问题,因为除了有相同代码库副本的6和11以外,其他48个服务器都运行得非常正常,并且它们为每个事务生成唯一的UUID。
到目前为止,我们还没有能够跟踪到这个问题,我的问题基本上是,如果有什么我们在JVM级别上错过的东西,或者我们需要设置UUID参数来解决这种一次性的问题吗?
UUID.randomUUID()
生成的每个 UUID 记录在本地文本文件中。然后,我会在这些日志上重新运行查找重复 UUID 的操作。可能是因为在您实际的代码中,UUIDs 在后续阶段混淆了,例如由于更高层次的某个位置存在竞争条件等原因。 - NPE