@jvmchat

Страница 1442 из 2890
Mikhail
09.05.2017
14:08:08
В общем, я переписал на striped, конечно

Evgeniy
09.05.2017
14:08:34
striped это чёрная магия какя-то если честно.

Mikhail
09.05.2017
14:08:57
там внутри ходим в кэш, и вроде бы есть CAS метод, но в документации к EhCache написано, что в случае распределенной инсталляции он CAS не гарантирует

поэтому без лока, в общем-то никуда

Google
Mikhail
09.05.2017
14:09:09
но не один же

Anton
09.05.2017
14:09:39
что такое striped?

Mikhail
09.05.2017
14:09:50
что такое striped?
Это из Гуавы

predefined array of locks

обладащий свойствами хэшмэпа

то есть для одинаковых ключей будут одинаковые локи

что позволяет в случае именованных объектов ходить на разные локи для разных объектов

Anton
09.05.2017
14:11:37
Они итак смогут
ну вот ноют, что мол никак, или очень сложно

Mikhail
09.05.2017
14:12:01
Микалай Алименков рекомендовал начинать с цифры 64 в плане дефолтного количества локов в массиве и, собссно, я ни разу эту цифру не перешагнул в плане performance

если коротко: The Java singleton is scoped by the Java class loader, the Spring singleton is scoped by the container context.
То есть, разница в первую очередь в single responsibility - обычный синглтон управляет своим циклом создания сам (кроме его реальной логики), что нарушает этот принцип, а в случае спринговых бинов - эту функцию за нас выполняет Спринг и принцип не нарушается?

Google
Mikhail
09.05.2017
14:13:27
Я правильно понимаю?

Локи в массиве эт что?
array предсозданных локов

то есть

Nick
09.05.2017
14:13:49
Что эт

Mikhail
09.05.2017
14:13:51
я пишу

private Striped<Lock> striped = Striped.lazyWeakLock(64);

Nick
09.05.2017
14:13:57
первый раз слышу

Mikhail
09.05.2017
14:14:06
А потом иду Lock lock = striped.get(key);

и лок/анлок

Nick
09.05.2017
14:14:27
Понял, эт чтот гуавовское

Mikhail
09.05.2017
14:14:43
первый раз слышу
А как решаешь задачу разделения синхронизации?

Mikhail
09.05.2017
14:15:35
В том плане, как я описал - есть фильтр, в него валятся event-ы, надо ходить в кэш и проверить дупликацию

Anton
09.05.2017
14:15:38
Влет гыгы)
ну PowerMock вроде может :)

Mikhail
09.05.2017
14:15:55
кэш CAS не гарантирует, согласно документации

Nick
09.05.2017
14:16:09
ну PowerMock вроде может :)
Да, и статики и все вот это)

Mikhail
09.05.2017
14:16:16
ИМХО, ты или юзаешь один лок, что плохо, или пилишь что-то подобное striped типа своё

Google
Nick
09.05.2017
14:16:38
А зачем тебе для кэша лок?

Тем более stripped

Mikhail
09.05.2017
14:16:51
Я просто последний раз синглтон руками писал, наверное, в ВУЗе

А зачем тебе для кэша лок?
Мне надо проверять на повторные сообщения

кэш - это такой способ сохранить информацию, что такое-то сообщение пришло

Nick
09.05.2017
14:17:40
Mikhail
09.05.2017
14:17:44
это не я писал, это так мне досталось

Канкарент хэш МАП нельзя?
Инстансов системы много

кэш distributed

то есть ивент может придти на один инстанс, а дубликат - на другой

Nick
09.05.2017
14:18:29
Ок, тогда у тебя и лок на уровне инстанса не поможет

Скорее всего тебе нужен лок из твоего кэша

Mikhail
09.05.2017
14:19:01
хм

я знаю, что не поможет

нужен распределенный лок

но, насколько я понимаю - не супер страшно, если проскочит сообщение-другое в дубль

главное, чтобы это не было массово

Скорее всего тебе нужен лок из твоего кэша
Но вот лок из кэша - это интересная мысль

Nick
09.05.2017
14:20:01
Тогда нафиг тебе лок)

Mikhail
09.05.2017
14:20:07
счас почитаю, умеет ли он так

Google
Nick
09.05.2017
14:20:10
если не страшно

Mikhail
09.05.2017
14:20:33
Тогда нафиг тебе лок)
лок для случая, если на один инстанс упало и изначальное и дубликат

я согласен, что это неправильно

но

распределенный случай не накрывается и сейчас

и это всех устраивает

поэтому первая задача - improve performance

то есть чтобы логически работало как сейчас, но быстрее)

ой

Admin
ERROR: S client not available

Mikhail
09.05.2017
14:23:26
Скорее всего тебе нужен лок из твоего кэша
+ тебе в карму мил человек: http://www.ehcache.org/documentation/2.7/apis/explicitlocking.html

то, что мне надо

"and also in Distributed Ehcache"

Nick
09.05.2017
14:23:58
Mikhail
09.05.2017
14:24:04
не факт

быстрее чем один лок?

а это мы померяем

я сейчас таки допишу вариант со striped

Nick
09.05.2017
14:24:40
Мне кажется тебе не нужен лок, там на методе put возвращается предыдущее значение ж? Достаточно его на null проверить

Google
Mikhail
09.05.2017
14:25:32
этот пут же не атомарный, насколько я понимаю

Nick
09.05.2017
14:27:56
а если в этот момент другой поток пут сделал?
скорее всего в рамках одного хоста видимость будет, но эт не точно

Mikhail
09.05.2017
14:28:17
я джавадок почитал - там атомик никто не гарантирует

поэтому, похоже, возможен вариант, когда оба потока вернут null

Nick
09.05.2017
14:29:02
по коду там лок на key делается

так что атомарный

эт я про BlockingCache

Mikhail
09.05.2017
14:30:02
да

вижу

BlockingCache

счас проверим, какой у нас бэкенд

Nick
09.05.2017
14:38:16
счас проверим, какой у нас бэкенд
выкинь вообще и возьми hazelcast)

Mikhail
09.05.2017
14:39:23
я немного не в той должности, чтобы такое делать)

я слегка просто "эксперт", а не "лид")

мда

нельзя просто так blockingcache

надо писать свою cachedecoratorfactory

которая будет генерить не просто кэш, а блокирующий

в моем случае проще striped - сильно меньше затрат

Nick
09.05.2017
15:27:50
в моем случае проще striped - сильно меньше затрат
Ты проверь, может он из коробки без блокинга работает

Страница 1442 из 2890