我正在使用以下函数来生成UUID
UUID.randomUUID().toString()
在生产中,我们有50多台服务器(应用程序服务器 - 每台服务器本身就是一台JVM)以及落在这些服务器上的请求,作为第一步,我们生成一个基本上唯一标识事务的UUID。
我们观察到的是,在服务器6和服务器11中,生成的UUID每天至少匹配10到15条消息,这很奇怪,因为考虑到负载,即每天约100万条交易,这些UUID在同一天内重复很奇怪。
这是我们迄今为止所做的
到目前为止,我们还没有能够追踪这个问题,我的问题基本上是在JVM级别有什么东西我们缺少或者我们需要为这个问题设置的UUID参数?
有了时间,我相信你会找到罪魁祸首。与此同时,有一条评论我认为值得提升回答:
您正在多个位置生成伪随机UUID。如果您没有找到其他错误,请考虑在一个位置生成所有伪随机UUID,或生成实际随机UUID
所以创建一个UUID服务器。这只是一个产生UUID块的过程。每个块可能包含10,000个(或任何适当的)UUID。在进程验证块不包含重复项后,进程会将每个块写入磁盘。
创建另一个进程来分发UUID块。也许它只是一个Web服务,它在收到请求时返回一个未使用的块。事务服务器发出对块的请求,然后在创建事务时使用这些UUID。当服务器使用了大多数已分配的UUID时,它会请求另一个块。
我不会浪费时间想知道UUID.randomUUID()
每天如何生成一些重复的UUID。偶然发生的可能性是无穷小的。 (如果基础RNG状态重复,则生成一系列重复项是可能的 - 但似乎并非如此。)
相反,寻找一个服务器存储的UUID可以破坏另一个服务器存储的UUID的地方。为什么这只发生在50个中的2个服务器之间?这与您尚未共享的环境和系统的详细信息有关。