Как обрабатывать одноэлементные классы в распределенной среде - PullRequest
4 голосов
/ 14 сентября 2011

Когда приложение распределено по нескольким JVMS, у моего однотонного класса будет несколько экземпляров в каждой JVM. Я должен сгенерировать уникальный идентификатор для этой цели, я должен использовать класс шаблона Singleton. Работает нормально, когда в автономной среде. Как создать шаблон Singleton в распределенной среде, чтобы мы могли использовать только один экземпляр?

РЕДАКТИРОВАТЬ: для моего приложения мне нужно создать идентификатор пользователя, как

если имя похоже на Pavan Kumar, идентификатор пользователя должен быть pavankumar, если в системе уже, если этот идентификатор пользователя существует, идентификатор пользователя должен быть похож на pavankumar1, pavankumar2 и т. Д.

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

Ответы [ 5 ]

3 голосов
/ 19 июля 2014

Я нашел твердый ответ на этот вопрос после долгого времени. Возможно реализовать Singleton в распределенной среде, используя инструментарий AKKA. Подробности о том, как реализовать, можно найти здесь http://doc.akka.io/docs/akka/2.3.1/contrib/cluster-singleton.html

3 голосов
/ 14 сентября 2011

Вы можете попробовать hazelcast [ doc ]. Эта библиотека позволяет вам распределять блокировки и структуры данных, используя которые вы могли бы написать свой синглтон.

2 голосов
/ 14 сентября 2011

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

2 голосов
/ 14 сентября 2011

Если вы собираетесь сохранить сущность в БД, вы можете положиться на последовательность БД, чтобы сгенерировать вам идентификатор; короче говоря, инвертируйте решение от создания нескольких уникальных идентификаторов jvm к одному db, делающему это. Кроме того, есть такие решения, как @nicholas, которые можно использовать в зависимости от ваших потребностей и масштаба.

2 голосов
/ 14 сентября 2011

Рассматривали ли вы использование распределенного кэша, например Java Caching System от Apache Commons или Coherence Cache от Oracle?Это может быть излишним, но это действительно зависит от того, что именно вы хотите сделать.

...