Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 Дубликат синглетонов на разных JVM  [new]
rabiter
Member

Откуда: SPb
Сообщений: 631
Добрый день, друзья! С понедельником всех!

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

Так вот, собственно вопрос. Есть у нас в приложении синглетоны (EJB, но не суть, могли бы быть и Spring). Все прекрасно до тех пор, пока мы не начали масштабировать свое приложение через loadbalancer. Т.е. у нас база одна, а серверов приложений может быть несколько, с одним и тем же продуктом, естественно. И через load balancer (мы используем т.н. sticky sessions) запросы уходят на тот или иной сервер. Между собой сервера не общаются. Если один сервер умер, все пользовательские сесси на нем умирают - это не критично в нашем случае. Но вопрос касательно синглетонов. Получается их несколько инстансов теперь, естественно. Так вот какие быват практики какой-то синхронизации между ними? Можно конечно синхронизироваться через БД (она-то одна), но бывают критические с точки зрения скорости сценарии.
7 окт 19, 14:02    [21988246]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
mad_nazgul
Member

Откуда:
Сообщений: 4836
rabiter
Так вот какие быват практики какой-то синхронизации между ними? Можно конечно синхронизироваться через БД (она-то одна), но бывают критические с точки зрения скорости сценарии.


А разве сервера приложений эту проблему не решают?
7 окт 19, 14:13    [21988265]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
Давай начнем с простого - а зачем именно синглтон нужен?
7 окт 19, 14:24    [21988287]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2050
забыл ник
Давай начнем с простого - а зачем именно синглтон нужен?

Согласен. Именно с простых истин
- синглтон зло
- синглтон в пределах одного приложения. Зачем его синхронизировать?
7 окт 19, 14:27    [21988290]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
rabiter
Member

Откуда: SPb
Сообщений: 631
забыл ник
Давай начнем с простого - а зачем именно синглтон нужен?


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

1. Например для кеширования application scoped данных (тут вы скажете не валяй дурака, используй специальный софт для кеша - согласен, руки еще не дошли, хотя кое-где уже использую ehcache) - хотя тут если несколько инстансов синглетона, это не критично - будет просто несколько инстансев кеша
2. А вот здесь более критично: приложение работает по floating лицензиям. Т.е. при старте мы считываем из файла лицензий сколько у нас свободных лицензий, и выставляем в синглетон как переменную. Когда пользователь логинится, мы уменьшаем счетчик на единичку, когда выходит из системы - увеличиваем. Если счетчик ноль, то ни один пользователь не может залогиниться (нет лицензий). Счетчик AtomicLong. Так вот и получится, что счетчиков-то в кластере несколько! А на базе синхронизироваться? Как-то медленно.
7 окт 19, 14:41    [21988319]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
rabiter
Member

Откуда: SPb
Сообщений: 631
mad_nazgul
rabiter
Так вот какие быват практики какой-то синхронизации между ними? Можно конечно синхронизироваться через БД (она-то одна), но бывают критические с точки зрения скорости сценарии.


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


Ну есть два подхода - типа sticky sessions и non-sticky sessions. Мы используем первый (сессии у нас жирные, так исторически сложилось, много SessionScoped бинов, поэтому между серверами их синхронизировать через shared disk, или как там еще - тяжело будет). Или можно только выборочно синхронизировать синглетоны?
7 окт 19, 14:42    [21988322]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
rabiter

1. Например для кеширования application scoped данных (тут вы скажете не валяй дурака, используй специальный софт для кеша - согласен, руки еще не дошли, хотя кое-где уже использую ehcache) - хотя тут если несколько инстансов синглетона, это не критично - будет просто несколько инстансев кеша

Все правильно - надо будет на каждый инстанс свой кэш, либо партитичионировать данные на каждый нод - свой кусок. Ну не суть, проблема решаемая, синглтон тут не нужен.
rabiter
2. А вот здесь более критичноСчетчик AtomicLong. Так вот и получится, что счетчиков-то в кластере несколько! А на базе синхронизироваться? Как-то медленно.

Задача ясна, но проблем все равно не вижу. У вас же есть логика авторизации\аутентификации, так? Как она работает? Почему бы в этом сервисе не завести таблицу с этим счетчиком. Не будет это медленно(точнее не медленнее всех способов синхронизировать синглтон)

Можно посмотреть в сторону zookeeper еще, но это уже тяжелай артиллерия. Я бы избавлялся от синглтонов на корню. Это бутылочное горлышкр всегда и везде
7 окт 19, 14:46    [21988328]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2050
П. П. 2 - можно и сервис лицензий отдельно запустить как офис MS делает. Отдельный сервис в сетке считает лицензии.
7 окт 19, 14:48    [21988334]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
rabiter
Member

Откуда: SPb
Сообщений: 631
забыл ник
rabiter
1. Например для кеширования application scoped данных (тут вы скажете не валяй дурака, используй специальный софт для кеша - согласен, руки еще не дошли, хотя кое-где уже использую ehcache) - хотя тут если несколько инстансов синглетона, это не критично - будет просто несколько инстансев кеша

Все правильно - надо будет на каждый инстанс свой кэш, либо партитичионировать данные на каждый нод - свой кусок. Ну не суть, проблема решаемая, синглтон тут не нужен.
rabiter
2. А вот здесь более критичноСчетчик AtomicLong. Так вот и получится, что счетчиков-то в кластере несколько! А на базе синхронизироваться? Как-то медленно.

Задача ясна, но проблем все равно не вижу. У вас же есть логика авторизации\аутентификации, так? Как она работает? Почему бы в этом сервисе не завести таблицу с этим счетчиком. Не будет это медленно(точнее не медленнее всех способов синхронизировать синглтон)

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


У нас монолит, не отдельного сервиса авторизации - все приложение это один жирный EAR файл. В случае кластеров мы его деплоим на N WildFly инстансов и пускаем на них через loadbalancer в sticky-sessions режиме. Т.е. получается если у нас счетчик в памяти - то получится N его инстансов (у нас N WildFly инстансов)
Zookeeper посмотрю, не хочу городить огород, но интересно.
Синглетоны горлышко, согласен, но если о ни в оснвном для чтения, то все ок (для записи изредка, тогда lock, да).
7 окт 19, 14:50    [21988338]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
rabiter
Member

Откуда: SPb
Сообщений: 631
PetroNotC Sharp
П. П. 2 - можно и сервис лицензий отдельно запустить как офис MS делает. Отдельный сервис в сетке считает лицензии.


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

Но, идея централизованного лицензионного сервера мне очень нравится! Но, не станет ли он бутылочным горлышком? По сути тот же синглетон вынесен в отдельный сервис. Все N инстансов WildFly будут к нему обращаться по http
7 окт 19, 14:54    [21988345]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
rabiter
PetroNotC Sharp
П. П. 2 - можно и сервис лицензий отдельно запустить как офис MS делает. Отдельный сервис в сетке считает лицензии.


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

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

Не должен стать по идее. Особенно если у вас операции простые типа инкремент\декремент
7 окт 19, 14:55    [21988347]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
rabiter
Member

Откуда: SPb
Сообщений: 631
забыл ник
rabiter
пропущено...


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

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

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


да, сами операции простые, горлышком не станет... Но издержки на транспорт до него и от него. Хотя микросевисы же как-то живут в этом. С другой стороны у нас же и так постоянно транспорт от клиент до сервера и обратно, что я его так боюсь)
Хорошая идая, спасибо!
7 окт 19, 14:59    [21988353]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
rabiter
забыл ник
пропущено...

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


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

Насчет нетворка стоит волноваться если у вас инстансы в разных датацентрах, а если просто лоад балансер на одну подсеть... - как ты правильно и написал, все микросервисы живут с этим и не жалуются
7 окт 19, 15:04    [21988360]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2050
rabiter
горлышком
смотря какие программисты у вас.
Можно вместо http, сделать винСервис или на линуксе демон. Будет моментально отвечать.
7 окт 19, 15:12    [21988367]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
rabiter
Member

Откуда: SPb
Сообщений: 631
PetroNotC Sharp
rabiter
горлышком
смотря какие программисты у вас.
Можно вместо http, сделать винСервис или на линуксе демон. Будет моментально отвечать.


А это очень интересно, спасибо за идею. Есть джависты и .net. Думаю на java можно демон для linux написать (или посмотреть готовые решения).
7 окт 19, 16:59    [21988538]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
Пылинка
Member

Откуда: СПб
Сообщений: 355
rabiter
Так вот, собственно вопрос. Есть у нас в приложении синглетоны (EJB, но не суть, могли бы быть и Spring).

Singleton Session Beans?
7 окт 19, 17:06    [21988545]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2050
Пылинка
rabiter
Так вот, собственно вопрос. Есть у нас в приложении синглетоны (EJB, но не суть, могли бы быть и Spring).

Singleton Session Beans?
пусть выпиливает функционал из своего монолита.
7 окт 19, 17:13    [21988561]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
rabiter
Member

Откуда: SPb
Сообщений: 631
Пылинка
rabiter
Так вот, собственно вопрос. Есть у нас в приложении синглетоны (EJB, но не суть, могли бы быть и Spring).

Singleton Session Beans?


так мы их и используем (@javax.ejb.Singleton вы имеете ввиду?), но и получается, что сколько JVM, столько инстансев синглетонов.
7 окт 19, 17:34    [21988606]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5671
rabiter
А на базе синхронизироваться? Как-то медленно.

- в памяти распределенное хранилище, типа Infinispan и т п (смотря какой сервер приложений используете). На нем и синхронизируйтесь.
7 окт 19, 18:03    [21988634]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
rabiter
Member

Откуда: SPb
Сообщений: 631
Kachalov
rabiter
А на базе синхронизироваться? Как-то медленно.

- в памяти распределенное хранилище, типа Infinispan и т п (смотря какой сервер приложений используете). На нем и синхронизируйтесь.


Спасибо, про Infinispan не слышал, но булы мысль про Redis или Ignite. Правда, я подумал, что это overkill :-)
7 окт 19, 19:01    [21988690]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
mayton
Member

Откуда: loopback
Сообщений: 42345
PetroNotC Sharp
забыл ник
Давай начнем с простого - а зачем именно синглтон нужен?

Согласен. Именно с простых истин
- синглтон зло
- синглтон в пределах одного приложения. Зачем его синхронизировать?

Синглтон не зло и не добро. Это просто инструмент. Как нож. Им можно хлеб резать.
А можно и себе крайнюю пипузку случайно отрубить. И что инструмент - зло?
7 окт 19, 19:26    [21988711]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2050
mayton,
Термин антипаттерн подходит?)))
7 окт 19, 20:06    [21988741]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16675
PetroNotC Sharp
Термин антипаттерн подходит?)))
ну это твое мнение..
7 окт 19, 20:46    [21988809]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2521
дядя какие EJB ты в своем уме
давай мне и ваде денег мы перепишем ваше непотрество на сприг буте
будете потом тока проперти менять и в носу ковыряться
7 окт 19, 20:49    [21988813]     Ответить | Цитировать Сообщить модератору
 Re: Дубликат синглетонов на разных JVM  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5671
asv79
будете потом тока проперти менять и в носу ковыряться


К сообщению приложен файл. Размер - 71Kb
7 окт 19, 21:27    [21988859]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Java Ответить