Экземпляр Random() в веб-ферме

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

Идея заключалась бы в том, чтобы инициировать один экземпляр класса Random для каждого пула приложений, используя увеличивающееся начальное число в кластере распределенного кэширования, и повторно заполнять рандомизатор после того, как каждый вспомогательный метод для генерации потокобезопасного случайного числа достиг определенного количества призывы.

Интересно, какие у вас мысли по этому поводу.


person Sivart    schedule 31.03.2017    source источник
comment
На самом деле я не уверен, что на этот вопрос можно ответить, но рассматривали ли вы просто использование GUID или размещение одного случайного экземпляра на сервере (который все клиенты запрашивают следующее случайное число), чтобы все циклически повторяли тот же ГСЧ?   -  person BradleyDotNET    schedule 01.04.2017
comment
Интересно, будет ли достаточно создать случайный экземпляр с GUID в качестве семени.   -  person Sivart    schedule 01.04.2017
comment
Учитывая, что GUID имеют большую энтропию и разработаны, чтобы быть уникальными независимо от того, сколько вы генерируете за раз, я бы просто использовал GUID напрямую. Случайные всегда имеют шанс на столкновение   -  person BradleyDotNET    schedule 01.04.2017
comment
Хотя этот вопрос не имеет смысла (поскольку случайное и уникальное не могут сочетаться друг с другом), вы, вероятно, ищете какие-то распределенные генераторы последовательностей с автоинкрементом. Некоторые отправные точки можно найти в stackoverflow.com/questions/7258619/   -  person Alexei Levenkov    schedule 01.04.2017


Ответы (1)


Random это просто - СЛУЧАЙНО. Уникальность не гарантируется. Бросание игральной кости является примером случайного события, однако вы можете получить один и тот же результат 6 раз из 6.

GUID объекты (почти) гарантированно уникальны, так что просто используйте их.

person Rufus L    schedule 31.03.2017
comment
Я считаю, что они также должны быть уникальными для разных машин. Гарантированная часть кажется неправильной, сгенерируйте достаточно, и у вас должен быть дубликат (в конце концов, они имеют фиксированную длину); просто создание такого количества займет больше времени, чем осталось жить нашему солнцу. - person BradleyDotNET; 01.04.2017
comment
Да, это намерение. Я помню, когда они были сгенерированы на основе MAC-адреса и метки времени, что, как я думал, означало гарантированную уникальность на конкретной машине, но я думаю, что есть разные способы их создания. Я обновил свой ответ - спасибо за конструктивный комментарий! - person Rufus L; 01.04.2017
comment
Генерация на основе MAC означает, что они будут уникальными для разных машин, поскольку каждая машина должна иметь уникальный MAC-адрес :) - person BradleyDotNET; 01.04.2017
comment
@RufusL с монетой гарантированно даст один и тот же результат как минимум 3 раза из 5 :) - person Alexei Levenkov; 01.04.2017