1

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

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

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

我更喜欢某种主板序列号或其他东西。

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

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

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

你对此有什么建议吗?

4

3 回答 3

1

我会说给他们一个 Id

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

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

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

于 2011-02-23T11:47:12.673 回答
0

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

于 2011-02-23T11:58:57.427 回答
0

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

于 2011-02-23T12:01:47.410 回答