为了账号安全,请及时绑定邮箱和手机立即绑定

多个 goroutine 中的命名空间 uuid

多个 goroutine 中的命名空间 uuid

Go
侃侃尔雅 2021-09-10 11:00:43
我想用 go 语言创建一个“无冲突”的唯一 id,用于高度可扩展的应用程序。维基百科建议使用 UUID 的命名空间变体(我只能假设指的是版本 3 或 5) 维基百科特别指出:在分布式应用程序需要唯一标识符的情况下,即使合并来自多个设备的数据,UUID 也不会发生冲突,每个设备上使用的种子和生成器的随机性在应用程序的生命周期内必须是可靠的。如果这不可行,RFC4122 建议改用命名空间变体。我在这方面遇到了一些困难版本 3 和 5 需要散列数据,由于以下原因,这似乎是不必要的事情:1.1. 我的应用程序可能使用相同的数据(我想要不同的 id)1.2. 我假设在数据泄漏方面,内部 random() 熵被认为是安全的,我不明白为什么需要密码散列(因为散列我猜比一些种子计算需要更多的资源)。命名空间应该是一个值,可以防止在高并发环境中可能出现的冲突。在 GO 中,goroutine 可以并行运行,并且由于服务器性能较高(如维基百科所述),可能会使用相同的种子。我假设命名空间的最佳值是 goroutine 的 id,因此可以避免在同一台机器上发生冲突。我找不到任何正确的方法来检索当前 goroutine 执行的 uniqe id。如果事实上维基百科使用命名空间组件恢复到版本 4(随机),我该如何生成这样的 guid?该文档不显示此类选项TL;DR: 如何在 GOLang 中正确安全且可扩展地生成唯一 ID?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信