Algorithm 从有限范围为多个节点生成唯一编号

Algorithm 从有限范围为多个节点生成唯一编号,algorithm,numbers,Algorithm,Numbers,我甚至不确定以下是可能的,但问一下也无妨: 我有两个节点运行同一个应用程序。每台机器都需要一个序列生成器,该生成器将为其提供一个介于0和1e6之间的数字。如果一个节点使用了一个编号,则另一个节点不得使用该编号。发电机应在每晚午夜重置。即使机器重新启动,也不应在同一天使用两次号码。我们希望避免任何涉及数据库、分布式缓存或文件系统的解决方案。让我们假设我们每天需要的数字永远不会超过1e6。这些数字不必按顺序使用 到目前为止,我们想到了以下几点: 1) 机器A使用奇数,机器B使用偶数 优点:没有共享状

我甚至不确定以下是可能的,但问一下也无妨:

我有两个节点运行同一个应用程序。每台机器都需要一个序列生成器,该生成器将为其提供一个介于0和1e6之间的数字。如果一个节点使用了一个编号,则另一个节点不得使用该编号。发电机应在每晚午夜重置。即使机器重新启动,也不应在同一天使用两次号码。我们希望避免任何涉及数据库、分布式缓存或文件系统的解决方案。让我们假设我们每天需要的数字永远不会超过1e6。这些数字不必按顺序使用

到目前为止,我们想到了以下几点:

1) 机器A使用奇数,机器B使用偶数

优点:没有共享状态

缺点:一台机器可能会在剩余的数量足够的时候用完。如果机器重新启动,它将重用以前使用过的号码

2) 机器A计数从0到1e6,机器B计数从1e6到0

优点:没有共享状态。保证在遇到问题之前,所有可用号码都将被使用

缺点:不能扩展到两台以上的机器。机器重新启动时也会出现同样的问题


你觉得怎么样?有没有一种神奇的算法可以满足我们的要求,而不需要向磁盘写入任何内容?

为什么不让一个小服务商根据要求分发ID呢?这可以扩展到多台机器,如果需要更改ID分配算法,则不需要更改客户端。这很容易实现,而且以后也很容易维护。

为什么不让一个小服务商根据请求分发ID呢?这可以扩展到多台机器,如果需要更改ID分配算法,则不需要更改客户端。这很容易实现,并且很容易维护

即使机器重新启动,也不应在同一天使用两次号码

由于您不想使用任何持久状态,这对我来说意味着数字必须以某种方式取决于时间。这是该算法能够区分两个不同初创公司的唯一方法。你不能用一个组合
(节点,时间戳)
来代替你的数字来获得足够精细的时间戳吗

即使机器重新启动,也不应在同一天使用两次号码


由于您不想使用任何持久状态,这对我来说意味着数字必须以某种方式取决于时间。这是该算法能够区分两个不同初创公司的唯一方法。你能不能用一个组合
(节点,时间戳)
来获得足够精细的时间戳,而不是你的数字?

我真的认为最好的方法是让一台机器在请求时分发数字(如果你想避免太多的查询,可能甚至是数字范围),然后把东西写到磁盘上


如果你真的反对,如果你能计算出数字被消耗的速度,你就可以非常聪明地使用方法1。例如,机器可以使用当前时间来确定其范围内的开始位置。也就是说,如果是中午,从我活动范围的中间开始。如果您可以对每秒生成的数字量(或通用时间间隔)设置上限,则可以对其进行调整。这仍然存在标签浪费的问题,只是为了避免将单个数字写入磁盘,这非常复杂。

我真的认为最好的方法是让一些机器在请求时分发数字(如果你想避免太多查询,可能甚至是数字范围),然后将数据写入磁盘


如果你真的反对,如果你能计算出数字被消耗的速度,你就可以非常聪明地使用方法1。例如,机器可以使用当前时间来确定其范围内的开始位置。也就是说,如果是中午,从我活动范围的中间开始。如果您可以对每秒生成的数字量(或通用时间间隔)设置上限,则可以对其进行调整。这仍然存在标签浪费的问题,只是为了避免将单个数字写入磁盘,这非常复杂。

我认为需要更多的背景信息-您使用这些数字的目的是什么,以及您在谈论多少个节点?为什么不能使用大于1e6的数字?数字需要多快生成?我想知道您是否真的需要符合这些特定规格的东西。。。如果您解释这些数字的用途,可能会有所帮助。@标记应用程序基本上是一组外部web服务的抽象层。其中一项服务要求每个请求都与一个介于0和1e6之间的日内唯一id号关联。如果同一天使用同一id两次,服务将引发异常@Thomas你完全正确,在99.99%的情况下,我并不真的需要这样一个极端的解决方案,但我很好奇数字理论家们是否有一个解决方案。我认为需要更多的背景——你用数字做什么,你在说多少节点?为什么不能使用大于1e6的数字?数字需要多快生成?我想知道您是否真的需要符合这些特定规格的东西。。。如果您解释这些数字的用途,可能会有所帮助。@标记应用程序基本上是一组外部web服务的抽象层。其中一项服务要求每个请求都与一个介于0和1e6之间的日内唯一id号关联。如果同一天使用同一id两次,服务将引发异常@托马斯:你说得绝对正确,在99.99%的情况下,我并不真的需要这样一个极端的解,但我很好奇数字理论家们是否有一个解决方案。