Как создать уникальный идентификатор сервера в php? - PullRequest
1 голос
/ 23 февраля 2011

У меня проблема в том, что у меня будет несколько серверов, которые выполняют задания.Все они запрашивают список заданий из одного и того же API и должны идентифицировать их с уникальным идентификатором.Так что я знаю, какой сервер работает, какие задания и нет коллизий распределения и т. Д.

Сейчас я пытаюсь найти способ генерировать уникальный идентификатор сервера.Не критично, что он останется неизменным навсегда.Но он должен быть уникальным.

Я заметил время сборки PHP в phpinfo (), но не смог найти никакой документации по этому поводу.Что если php установлен как бинарный пакет?Вероятно, он не изменится, если два сервера будут использовать один и тот же пакет.

Я бы предпочел какой-нибудь серийный номер материнской платы или что-то в этом роде.

Да, и он должен быть переносимым.Поэтому я бы предпочел избежать чего-то вроде вызова команды оболочки с использованием shell_exec или около того.

Можно также использовать внешний IP-адрес.Но как надежно определить «внешний» IP-адрес?что если есть еще?Что делать, если его натрет?Тогда мне понадобится комбинация внешнего и внутреннего адреса.

Я мог бы запросить API один раз и попросить дать мне внешний IP-адрес и объединить.Но это становится сложным и обширным ...

У вас есть какие-либо рекомендации по этому поводу?

Ответы [ 3 ]

1 голос
/ 23 февраля 2011

Я бы сказал , чтобы дать им Id .

Ваш сервер является главным, создайте протокол, если сервер не дает вам уникальный идентификатор в отправленном запросе, то создайтеНовая запись для этого нового сервера и дать ему идентификатор записи.Тогда Ваш протокол в запросе списка заданий заявляет, что клиентский сервер теперь должен повторно использовать данный Id.если он этого не сделает, он будет каждый раз получать новый идентификатор (который является уникальным).

Возможно, вы столкнетесь с проблемой растущего числа Id , растущего , затем добавьте TTLдля каждого идентификатора, и выполнить некоторую очистку (или просто стереть эту таблицу иногда).В вашем протоколе вы теперь должны сообщить клиентскому серверу, что его данный Id был признан недействительным, и что вы даете ему новый.

Если вы действительно хотите делегировать управление этим «уникальным Id» клиентамзатем попросите их сгенерировать случайный uid и проследите, чтобы он не сталкивался (очень низкий%, но это может случиться, но, возможно, не раньше, чем вы умрете).Вам придется хранить его в своем списке и управлять растущим числом Id.Но там вы просто возьмете сервер с данным Id в качестве нового после уничтожения, вам не нужно просить клиента перестроить новый Id.Проще.

0 голосов
/ 23 февраля 2011

Вы можете использовать Mac-адрес в качестве уникального идентификатора для ваших серверов: https://stackoverflow.com/a/1420402/318765

0 голосов
/ 23 февраля 2011

uniqid() дает вам уникальный идентификатор, для которого шансы довольно редки, когда идентификаторы сталкиваются.

...