【问题标题】:How to generate a unique server id in php?如何在php中生成唯一的服务器ID?
【发布时间】:2014-11-01 00:39:39
【问题描述】:

我有多个服务器执行作业的问题。他们都从同一个 API 请求工作列表,并且需要用唯一的 id 来识别他们。这样我就知道哪个服务器正在运行哪些作业并且没有分布冲突等。

我现在正试图找出一种生成唯一服务器 ID 的方法。它永远保持不变并不重要。但它应该是独一无二的。

我注意到 phpinfo() 中的 PHP 构建时间,但找不到任何有关它的文档。如果 php 作为二进制包安装怎么办?如果两台服务器使用相同的包,它可能不会改变。

我更喜欢某种主板序列号之类的。

是的,它应该是便携的。所以我宁愿避免使用 shell_exec 左右调用 shell 命令。

也可以选择外部 IP。但是如何可靠地确定“外部”IP 地址呢?如果还有更多呢?如果它是 natted 怎么办?然后我需要外部和内部地址的组合。

我可以请求 API 一次并要求它给我外部 IP 地址并合并。但这会变得复杂而广泛……

您对此有什么建议吗?

【问题讨论】:

  • 不,它不是 @Mark Ba​​ker 的副本。因为我不需要只生成一个唯一的 id,所以我要求它在每个系统中都是唯一的,并且在再次应用相同的算法时保持不变。
  • 您写道“永远保持不变并不重要”——它如何与“保持不变”的陈述相匹配?
  • “不是永远”并不意味着每次。它需要保持不变才能使流程正常工作。但如果它发生变化,一些工作就会“丢失”。就像服务器发生故障一样。然后清理工作获取它们。该应用程序将正常工作。但如果变化太大,它将无法工作,或者只会产生巨大的开销。

标签: php serial-number


【解决方案1】:

我会说给他们一个Id

你的服务器是主服务器,建立一个协议,如果服务器在发送的查询中没有给你唯一的 ID,那么为这个新服务器建立一个新的记录,并给他记录 ID。然后您的作业列表查询协议声明客户端服务器现在应该重用给定的 ID。如果他不这样做,他每次都会得到一个新的 id(这是唯一的)。

您可能会遇到Id 数量不断增加 的问题,然后为每个 Id 添加一个 TTL,并执行一些清理(或者有时只是清除此表)。在您的协议中,您现在应该以一种方式告诉您的客户端服务器他给定的 Id 已经无效,并且您给他一个新的。

如果您真的想将此“唯一 ID”管理委派给客户端,则要求他们生成一个随机 uid,并确保它不会发生冲突(非常低的百分比,但它可以发生,但也许不是在你死之前)。您必须将其存储在您的 sied 中,并管理不断增长的 Id 数量。但是在那里,您只需在清除后将给定 ID 的服务器作为一个新的,您不需要要求客户端重建一个新的 ID。更简单。

【讨论】:

  • 这就是我现在正在做的事情:) 我将它们缓存在应用程序的 apc 中。感谢您的回答并涵盖更多的可能性。它帮助了我。我只是想知道是否有一种很好的方法可以从系统环境中生成一些东西......
【解决方案2】:

uniqid() 为您提供一个唯一的 ID,ID 冲突的机会非常少。

【讨论】:

  • 我认为您误解了这个问题。我需要一个标识系统的唯一 ID。 uniqid 在同一服务器上发生冲突的机会为零。因此它有一个前缀参数。
  • 由于uniqid() 依赖于微秒,因此它在多个服务器之间发生冲突的机会也很少。当服务器第一次请求作业时,在服务器上生成唯一 ID 应该是足够唯一的。还是我错了?如果设置正确,您也可以使用主机名作为前缀。
【解决方案3】:

您可以使用 Mac 地址作为服务器的唯一 ID: https://stackoverflow.com/a/1420402/318765

【讨论】:

  • nazmulb.wordpress.com/2008/07/04/getting-mac-address-using-php */ ob_start(); // 开启输出缓冲系统(‘ipconfig /all’); //执行 extrnl prog 显示输出 $mycom=ob_get_contents(); // 将输出捕获到变量 ob_clean(); // 清理(擦除)输出缓冲区 $findme = “Physical”; $pmac = strpos($mycom, $findme); // 查找物理文本的位置 $mac=substr($mycom,($pmac+36),17); // 获取物理地址 echo $mac; ?> 我还没有测试过。刚刚在网上搜索,找到了这段代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 2018-04-14
  • 2018-03-12
  • 2012-04-27
相关资源
最近更新 更多