powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Дубликат синглетонов на разных JVM
25 сообщений из 94, страница 1 из 4
Дубликат синглетонов на разных JVM
    #39872581
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, друзья! С понедельником всех!

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

Так вот, собственно вопрос. Есть у нас в приложении синглетоны (EJB, но не суть, могли бы быть и Spring). Все прекрасно до тех пор, пока мы не начали масштабировать свое приложение через loadbalancer. Т.е. у нас база одна, а серверов приложений может быть несколько, с одним и тем же продуктом, естественно. И через load balancer (мы используем т.н. sticky sessions) запросы уходят на тот или иной сервер. Между собой сервера не общаются. Если один сервер умер, все пользовательские сесси на нем умирают - это не критично в нашем случае. Но вопрос касательно синглетонов. Получается их несколько инстансов теперь, естественно. Так вот какие быват практики какой-то синхронизации между ними? Можно конечно синхронизироваться через БД (она-то одна), но бывают критические с точки зрения скорости сценарии.
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872592
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiterТак вот какие быват практики какой-то синхронизации между ними? Можно конечно синхронизироваться через БД (она-то одна), но бывают критические с точки зрения скорости сценарии.

А разве сервера приложений эту проблему не решают?
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872606
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давай начнем с простого - а зачем именно синглтон нужен?
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872608
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никДавай начнем с простого - а зачем именно синглтон нужен?
Согласен. Именно с простых истин
- синглтон зло
- синглтон в пределах одного приложения. Зачем его синхронизировать?
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872621
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никДавай начнем с простого - а зачем именно синглтон нужен?

Почему зло? (но я почитаю)
Приложуха большая, много всего, вот зачем синглетон на вскидку:

1. Например для кеширования application scoped данных (тут вы скажете не валяй дурака, используй специальный софт для кеша - согласен, руки еще не дошли, хотя кое-где уже использую ehcache) - хотя тут если несколько инстансов синглетона, это не критично - будет просто несколько инстансев кеша
2. А вот здесь более критично: приложение работает по floating лицензиям. Т.е. при старте мы считываем из файла лицензий сколько у нас свободных лицензий, и выставляем в синглетон как переменную. Когда пользователь логинится, мы уменьшаем счетчик на единичку, когда выходит из системы - увеличиваем. Если счетчик ноль, то ни один пользователь не может залогиниться (нет лицензий). Счетчик AtomicLong. Так вот и получится, что счетчиков-то в кластере несколько! А на базе синхронизироваться? Как-то медленно.
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872623
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulrabiterТак вот какие быват практики какой-то синхронизации между ними? Можно конечно синхронизироваться через БД (она-то одна), но бывают критические с точки зрения скорости сценарии.

А разве сервера приложений эту проблему не решают?

Ну есть два подхода - типа sticky sessions и non-sticky sessions. Мы используем первый (сессии у нас жирные, так исторически сложилось, много SessionScoped бинов, поэтому между серверами их синхронизировать через shared disk, или как там еще - тяжело будет). Или можно только выборочно синхронизировать синглетоны?
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872626
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiter
1. Например для кеширования application scoped данных (тут вы скажете не валяй дурака, используй специальный софт для кеша - согласен, руки еще не дошли, хотя кое-где уже использую ehcache) - хотя тут если несколько инстансов синглетона, это не критично - будет просто несколько инстансев кеша

Все правильно - надо будет на каждый инстанс свой кэш, либо партитичионировать данные на каждый нод - свой кусок. Ну не суть, проблема решаемая, синглтон тут не нужен.
rabiter2. А вот здесь более критичноСчетчик AtomicLong. Так вот и получится, что счетчиков-то в кластере несколько! А на базе синхронизироваться? Как-то медленно.
Задача ясна, но проблем все равно не вижу. У вас же есть логика авторизации\аутентификации, так? Как она работает? Почему бы в этом сервисе не завести таблицу с этим счетчиком. Не будет это медленно(точнее не медленнее всех способов синхронизировать синглтон)

Можно посмотреть в сторону zookeeper еще, но это уже тяжелай артиллерия. Я бы избавлялся от синглтонов на корню. Это бутылочное горлышкр всегда и везде
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872628
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П. П. 2 - можно и сервис лицензий отдельно запустить как офис MS делает. Отдельный сервис в сетке считает лицензии.
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872631
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никrabiter1. Например для кеширования application scoped данных (тут вы скажете не валяй дурака, используй специальный софт для кеша - согласен, руки еще не дошли, хотя кое-где уже использую ehcache) - хотя тут если несколько инстансов синглетона, это не критично - будет просто несколько инстансев кеша

Все правильно - надо будет на каждый инстанс свой кэш, либо партитичионировать данные на каждый нод - свой кусок. Ну не суть, проблема решаемая, синглтон тут не нужен.
rabiter2. А вот здесь более критичноСчетчик AtomicLong. Так вот и получится, что счетчиков-то в кластере несколько! А на базе синхронизироваться? Как-то медленно.
Задача ясна, но проблем все равно не вижу. У вас же есть логика авторизации\аутентификации, так? Как она работает? Почему бы в этом сервисе не завести таблицу с этим счетчиком. Не будет это медленно(точнее не медленнее всех способов синхронизировать синглтон)

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

У нас монолит, не отдельного сервиса авторизации - все приложение это один жирный EAR файл. В случае кластеров мы его деплоим на N WildFly инстансов и пускаем на них через loadbalancer в sticky-sessions режиме. Т.е. получается если у нас счетчик в памяти - то получится N его инстансов (у нас N WildFly инстансов)
Zookeeper посмотрю, не хочу городить огород, но интересно.
Синглетоны горлышко, согласен, но если о ни в оснвном для чтения, то все ок (для записи изредка, тогда lock, да).
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872636
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpП. П. 2 - можно и сервис лицензий отдельно запустить как офис MS делает. Отдельный сервис в сетке считает лицензии.

Хорошая идея. Тут я, честно сказать, упростил... На самом деле сложнее, лицензии съедаются пользователями не во время логина, а во время выполнения пользователем определенных действий, которые нуждаются в лицензии. Типа поиск документов - лицензия на поиск. Редактирование - лицензия на изменения данных. Т.е. во время работы пользователя этот сервис дергался бы несколько раз, а не только во время авторизации.

Но, идея централизованного лицензионного сервера мне очень нравится! Но, не станет ли он бутылочным горлышком? По сути тот же синглетон вынесен в отдельный сервис. Все N инстансов WildFly будут к нему обращаться по http
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872638
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiterPetroNotC SharpП. П. 2 - можно и сервис лицензий отдельно запустить как офис MS делает. Отдельный сервис в сетке считает лицензии.

Хорошая идея. Тут я, честно сказать, упростил... На самом деле сложнее, лицензии съедаются пользователями не во время логина, а во время выполнения пользователем определенных действий, которые нуждаются в лицензии. Типа поиск документов - лицензия на поиск. Редактирование - лицензия на изменения данных. Т.е. во время работы пользователя этот сервис дергался бы несколько раз, а не только во время авторизации.

Но, идея централизованного лицензионного сервера мне очень нравится! Но, не станет ли он бутылочным горлышком? По сути тот же синглетон вынесен в отдельный сервис. Все N инстансов WildFly будут к нему обращаться по http
Не должен стать по идее. Особенно если у вас операции простые типа инкремент\декремент
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872642
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никrabiterпропущено...


Хорошая идея. Тут я, честно сказать, упростил... На самом деле сложнее, лицензии съедаются пользователями не во время логина, а во время выполнения пользователем определенных действий, которые нуждаются в лицензии. Типа поиск документов - лицензия на поиск. Редактирование - лицензия на изменения данных. Т.е. во время работы пользователя этот сервис дергался бы несколько раз, а не только во время авторизации.

Но, идея централизованного лицензионного сервера мне очень нравится! Но, не станет ли он бутылочным горлышком? По сути тот же синглетон вынесен в отдельный сервис. Все N инстансов WildFly будут к нему обращаться по http
Не должен стать по идее. Особенно если у вас операции простые типа инкремент\декремент

да, сами операции простые, горлышком не станет... Но издержки на транспорт до него и от него. Хотя микросевисы же как-то живут в этом. С другой стороны у нас же и так постоянно транспорт от клиент до сервера и обратно, что я его так боюсь)
Хорошая идая, спасибо!
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872647
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiterзабыл никпропущено...

Не должен стать по идее. Особенно если у вас операции простые типа инкремент\декремент

да, сами операции простые, горлышком не станет... Но издержки на транспорт до него и от него. Хотя микросевисы же как-то живут в этом. С другой стороны у нас же и так постоянно транспорт от клиент до сервера и обратно, что я его так боюсь)
Хорошая идая, спасибо!
Насчет нетворка стоит волноваться если у вас инстансы в разных датацентрах, а если просто лоад балансер на одну подсеть... - как ты правильно и написал, все микросервисы живут с этим и не жалуются
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872652
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiterгорлышкомсмотря какие программисты у вас.
Можно вместо http, сделать винСервис или на линуксе демон. Будет моментально отвечать.
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872763
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharprabiterгорлышкомсмотря какие программисты у вас.
Можно вместо http, сделать винСервис или на линуксе демон. Будет моментально отвечать.

А это очень интересно, спасибо за идею. Есть джависты и .net. Думаю на java можно демон для linux написать (или посмотреть готовые решения).
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872770
Фотография Пылинка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiterТак вот, собственно вопрос. Есть у нас в приложении синглетоны (EJB, но не суть, могли бы быть и Spring).
Singleton Session Beans?
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872784
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПылинкаrabiterТак вот, собственно вопрос. Есть у нас в приложении синглетоны (EJB, но не суть, могли бы быть и Spring).
Singleton Session Beans?пусть выпиливает функционал из своего монолита.
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872819
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПылинкаrabiterТак вот, собственно вопрос. Есть у нас в приложении синглетоны (EJB, но не суть, могли бы быть и Spring).
Singleton Session Beans?

так мы их и используем (@javax.ejb.Singleton вы имеете ввиду?), но и получается, что сколько JVM, столько инстансев синглетонов.
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872840
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiterА на базе синхронизироваться? Как-то медленно.
- в памяти распределенное хранилище, типа Infinispan и т п (смотря какой сервер приложений используете). На нем и синхронизируйтесь.
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872878
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovrabiterА на базе синхронизироваться? Как-то медленно.
- в памяти распределенное хранилище, типа Infinispan и т п (смотря какой сервер приложений используете). На нем и синхронизируйтесь.

Спасибо, про Infinispan не слышал, но булы мысль про Redis или Ignite. Правда, я подумал, что это overkill :-)
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872888
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharpзабыл никДавай начнем с простого - а зачем именно синглтон нужен?
Согласен. Именно с простых истин
- синглтон зло
- синглтон в пределах одного приложения. Зачем его синхронизировать?
Синглтон не зло и не добро. Это просто инструмент. Как нож. Им можно хлеб резать.
А можно и себе крайнюю пипузку случайно отрубить. И что инструмент - зло?
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872908
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Термин антипаттерн подходит?)))
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872968
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpТермин антипаттерн подходит?)))ну это твое мнение..
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39872971
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дядя какие EJB ты в своем уме
давай мне и ваде денег мы перепишем ваше непотрество на сприг буте
будете потом тока проперти менять и в носу ковыряться
...
Рейтинг: 0 / 0
Дубликат синглетонов на разных JVM
    #39873011
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79будете потом тока проперти менять и в носу ковыряться
...
Рейтинг: 0 / 0
25 сообщений из 94, страница 1 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Дубликат синглетонов на разных JVM
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]