Решение для кэширования уникальных идентификаторов - PullRequest
0 голосов
/ 26 марта 2020

Мы хотим создать распределенный кеш уникальных идентификаторов, который будет использоваться в приложении для идентификации каждой транзакции. УНИКАЛЬНЫЙ ID генерируется с использованием некоторого пользовательского логика c (скажем, DATE + некоторое случайное число) в коде java.

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

Лучше ли хранить локальный кеш на каждом сервере приложений (последовательность генерации уникального идентификатора указывается c для каждого узла). Но это не гарантировало бы последовательность идентификаторов транзакций в приложении.

Мы искали варианты hazlecast, geode, ignite et c. Для построения распределенного кэша (peer to peer cache). Но какой из них будет хорошо работают при обновлении кэша в многопоточной среде.

Какое решение / модель кэширования лучше всего подходит для этой проблемы.

1 Ответ

0 голосов
/ 26 марта 2020

Нет необходимости в кеше

Вам не нужно решение для кеширования для вашей проблемы.

Вы можете генерировать универсально уникальные идентификаторы без необходимости координировать действия между вашими системами.

UUID

Надлежащее решение уже было изобретено, стандартизировано, реализовано и широко распространено : UUID

UUID версии 1 представляет точку в пространстве и времени, берет текущий момент вместе с MA C адресом машины и добавляет произвольное число, которое увеличивается при сбросе часов хоста и увеличивается при перезапуске генератора UUID.

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

Пример:

1154cf8a-6f7b-11ea-bc55-0242ac130003

Вы запросили:

настраиваемый лог c (скажем, ДАТА + некоторое случайное число)

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

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

Реализации генератора UUID встроены почти во все операционные системы (macOS, Linux, BSD, Windows, et c.). Библиотеки общедоступны, например, OSSP uuid . Более мощные базы данных, такие как Postgres, поддерживают UUID как собственный тип данных для эффективного хранения и простоты использования. Некоторые программные платформы, такие как Java, включают тип данных для UUID и реализацию генератора.

Назначение UUID состоит в том, что различные программные системы могут генерировать значения UUID самостоятельно, на лету, без необходимости в центральном органе управления, без необходимости в распределенном кэше и без необходимости координации с другими системами. ,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...