如何在php中生成唯一的服务器ID?

时间:2011-02-23 11:28:26

标签: php serial-number

我遇到的问题是我将有多台执行作业的服务器。他们都从相同的API请求一个工作清单,并需要用唯一的ID识别它们。这样我就知道哪个服务器正在运行哪些作业并且没有分发冲突等。

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

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

我更喜欢某种母板序列号等。

是的,它应该是便携式的。所以我宁愿避免像使用shell_exec那样调用shell命令。

寻求外部IP也是一种选择。但如何可靠地确定“外部”ip地址?怎么会有更多?怎么样呢?然后我需要外部和内部地址的组合。

我可以请求API一次,并要求它给我外部ip地址和组合。但这种情况正在变得复杂和广泛......

你对此有什么建议吗?

3 个答案:

答案 0 :(得分:1)

我会说给他们一个ID

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

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

如果你真的想将这个'唯一ID'管理委托给客户,那么要求他们生成一个随机的uid ,并捕获它不会发生碰撞(非常低的%,但它可以发生,但也许不会在你死之前)。你必须将它存储在你的sied上,并管理越来越多的Id。但是,在wipeout之后,您只需将服务器ID作为新服务器,您无需要求客户重建新ID。 Simplier。

答案 1 :(得分:0)

uniqid()为您提供了一个唯一ID,ID可能很少发生碰撞。

答案 2 :(得分:0)

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