У меня есть несколько приложений, которые работают вместе и должны общаться.
Эти приложения могут быть установлены на разные хосты, которые могут находиться в разных локальных сетях, но все они связаны между собой через глобальную сеть.
Хост может быть Linux (CenOS, Debian, Ubuntu) или Windows (7/10).
Теперь мне нужно определить, на каком хосте запущено приложение.
Требования таковы: - каждое приложение, работающее на одном хосте, имеет один и тот же "идентификатор хоста" - каждый "идентификатор хоста" уникален среди всех хостов.
Поскольку хостом могут быть физические машины, виртуальные машины или даже экземпляры докеров, я не думаю, что могу использовать имя хоста в качестве "глобального уникального идентификатора".
Поскольку хост может находиться в разных локальных сетях, я не думаю, что могу использовать локальный IP-адрес в качестве "глобального уникального идентификатора".
Итак, какие данные я могу использовать? Может быть, MAC-адрес сетевого адаптера? Гарантируется ли уникальность даже между несколькими экземплярами одного и того же докера?
Спасибо.
Ответ 1 · рейтинг 4 · Christophe Schmitz
В современном / недавнем дистрибутиве Linux linux генерирует для вас уникальный идентификатор в файле /etc/machine-id при первом создании системы. Некоторые распределенные службы, такие как etcd, полагаются на этот файл для идентификации машин в кластере.
Ничто не мешает вам создать и сохранить на диске что-то вроде uuid. Для этого вы можете использовать команду uuidgen в Linux.
Ответ 2 · рейтинг 3 · Say Fay
Можно сказать, что MAC-адрес уникален. Однако, если вы беспокоитесь о безопасности, не используйте MAC-адрес. MAC-адрес можно легко подделать.
Чтобы сгенерировать уникальный идентификатор для машины, вы можете использовать комбинацию многих элементов, таких как MAC-адрес, IP-адрес, имя хоста и т. Д., Добавить случайную соль и получить их хэш sha256. Поскольку хост может работать во многих операционных системах, я бы не советовал использовать какие-либо параметры, специфичные для ОС.
Не вдаваясь в подробности, шансы найти коллизию в sha256, мягко говоря, маловероятны.
Вы можете увидеть SHA256 другого текста здесь. http://www.xorbin.com/tools/sha256-hash-calculator
В наши дни почти каждый язык программирования имеет функцию/API для создания хэша SHA256.