簡體   English   中英

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

[英]How to generate a unique server id in php?

我有一個問題,我將有多個執行作業的服務器。 他們都從相同的API請求工作清單,並需要使用唯一的ID進行標識。 這樣我就知道哪個服務器正在運行哪些作業,並且沒有分發沖突等。

我現在試圖找出一種生成唯一服務器ID的方法。 永遠保持不變並不重要。 但是它應該是唯一的。

我注意到phpinfo()中的PHP構建時間,但是找不到有關它的任何文檔。 如果php作為二進制軟件包安裝怎么辦? 如果兩個服務器使用相同的程序包,則可能不會更改。

我希望使用某種類型的主板序列號。

是的,它應該是便攜式的。 因此,我想避免使用shell_exec之類的命令調用shell命令。

也可以選擇使用外部IP。 但是如何可靠地確定“外部” ip地址? 如果還有更多呢? 如果它被打亂了怎么辦? 然后,我將需要外部和內部地址的組合。

我可以請求API一次,並要求它給我外部IP地址並結合使用。 但這會變得復雜而廣泛...

您對此有何建議?

我要說給他們一個ID

您的服務器是主服務器,建立一個協議,如果服務器未在發送的查詢中給您唯一的ID,則為該新服務器建立一個新記錄並為其提供記錄ID。 然后,您在作業列表查詢中的協議指出,客戶端服務器現在應重新使用給定的ID。 如果他不這樣做,則每次都會獲得一個新的ID(唯一)。

您可能會遇到Id數量不斷增加的問題,然后向每個Id添加一個TTL,然后執行一些清理(或有時只是清除此表)。 在您的協議中,您現在應該以某種方式告訴您的客戶端服務器,其給定的ID已失效,並且您給了他一個新的ID。

如果您真的想將這種“唯一ID”管理委派給客戶, 請要求他們生成一個隨機uid ,並捕食它不會發生沖突(非常低的百分比,但可能會發生,但可能在死之前不會發生)。 您必須將其存儲在自己的倉庫中,並且還要管理越來越多的Id。 但是在那里,您只需在擦除后將提供給定ID的服務器作為一個新ID,就無需要求客戶端重新構建一個新ID。 簡單的。

uniqid()為您提供一個唯一的ID,這種ID發生沖突的機會非常少。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM