【问题标题】:Random() instance in web farm网络场中的 Random() 实例
【发布时间】:2017-08-26 08:01:07
【问题描述】:

我在多个与分布式内存缓存集群通信的 Web 服务器上运行应用程序,我在应用程序服务器上生成独占锁 ID——问题是在并行执行的高并发性中,有可能在所有服务器上执行多个操作将生成相同的伪随机锁值。

这个想法是使用分布式缓存集群中的递增种子为每个应用程序池启动 Random 类的单个实例,并在生成线程安全随机数的每个辅助方法达到特定的调用次数。

有兴趣看看您对此有何想法。

【问题讨论】:

  • 我实际上不确定这个问题是否可以回答,但您是否考虑过仅使用 GUID 或在服务器上放置一个 single 随机实例(所有客户端都要求下一个随机数)所以每个人都在循环相同的 RNG?
  • 我想知道是否生成一个以 GUID 作为种子的 Random 实例就足够了。
  • 鉴于 GUID 具有更多的熵,并且无论您一次生成多少个,都设计是唯一的,我会直接使用 GUID。随机总是有机会发生碰撞
  • 虽然这个问题没有意义(因为随机和唯一不能一起使用),但您可能正在寻找某种分布式自动增量序列生成器。一些起点可以在stackoverflow.com/questions/7258619/…

标签: c# asp.net web random web-farm


【解决方案1】:

Random 就是这样 - 随机的。不保证是唯一的。掷骰子是随机事件的一个例子,但您可能会在 6 次中得到相同的结果。

GUID 对象(几乎)保证是唯一的,所以只需使用它们即可。

【讨论】:

  • 我相信它们在机器上也是独一无二的。 “保证部分”似乎是错误的,生成的足够多,您 必须 有一个副本(毕竟它们是固定长度的);只是发电需要比我们的太阳寿命更长的时间。
  • 是的,这就是目的。我的记忆是从它们根据 MA​​C 地址和时间戳生成的时候开始的,我认为这意味着在特定机器上保证是唯一的,但我想它们可以有不同的生成方式。我已经更新了我的答案 - 感谢您的建设性评论!
  • 基于 MAC 生成意味着它们在机器之间是唯一的,因为每台机器应该都有一个唯一的 MAC 地址:)
  • @RufusL with coin 保证在 5 次中至少有 3 次相同的结果 :)
猜你喜欢
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多