
Mikhail
06.09.2017
11:20:03
Нод 2, бэкенд

Wystan
06.09.2017
11:20:09
а для одной ноды самое то. да. я такие как раз на ажуре и беру.

Mikhail
06.09.2017
11:21:14
А шо там по нагрузке?
В пике шло порядка двух сотен сообщений в секунду, наверное, в центральную очередь, где 100 потоков. Она в процессе работы генерит сообщения в другие очереди

Google

Vyacheslav
06.09.2017
11:21:54
Хм
Ну на 2 может и многовато

Nick
06.09.2017
11:23:14
А потоки в тредпуле или самомтоятельные? А блокировки по ио в процессе работы есть?

Mikhail
06.09.2017
11:24:23
Блокировки есть, ходим синхронно на реальное железо за данными

Sherzod
06.09.2017
11:24:50
Toolbox App кто уже использует. Как он приложения обновляет? Как всегда, качает весь пакет, или патчами?

Nick
06.09.2017
11:25:30
Тогда без такого количества никак

Mikhail
06.09.2017
11:26:45
Счас поем и буду писать письмо
Лёг в 7, встал в 2)

Nick
06.09.2017
11:28:00
Удаленка?

Mikhail
06.09.2017
11:29:24
Удаленка?
Европа обновлялась ночью, я контролировал процесс
А это из дома комфортнее

Google

Mikhail
06.09.2017
11:29:46
Чем в офис ехать и ночь с пиццей сидеть

Ruslan
06.09.2017
11:33:40

Mikhail
06.09.2017
11:36:35
На 4 ещё куда ни шло

Ruslan
06.09.2017
11:36:42
Но откровенно говоря вопрос такой: зачем вам вообще больше 1 листенера на ActiveMQ?
Если говорить про распространенные практики - обычно берут Runtime.availableProcessors() * 2. Так, например, это дефолтная конфигурация Worker потоков для обработки запросов в Netty.

Alexey
06.09.2017
11:38:54
тут еще дело в чем - сколько у этих потоков idle time. Если они все спящие и про запас - нет проблем, но есть у всех 100% running, тогда на переключениях контекста ты достойно теряешь
есть 100 load - нет смысла больше 3-4 на ядро

Ruslan
06.09.2017
11:40:03

Alexey
06.09.2017
11:42:15
верно, но по производительности это не сильно ударит если все тихо
а вот если во все сокеты начнется заливка данных - тогда держитесь

Ruslan
06.09.2017
11:42:34
Я вообще не вижу необходимости здесь городить тонну потоков. На мой взгляд, в базовом случае, будет достаточно 1 IO потока и Runtime.availableProcessors * 2 на обработку. Вспомним Node.JS, Java NIO, обработка входящего потока прекрасно выполняется без необходимости параллелить этот процесс

Mikhail
06.09.2017
11:43:02
Процессоры денег стоят
И просто так их мне никто не даст
Нагрузка на всё - только в пиках

Ruslan
06.09.2017
11:44:09
Так используйте 1 поток на IO и до 10 на обработку. В вашем случае - более, чем достаточно

Mikhail
06.09.2017
11:44:14
Большую часть времени - они припаркованы, у меня там вообще рост от 20 до 100, если не пик, то мы и не вырастем
Полный перезапуск - это как раз пик, поэтому вчера мы немного застряли
Но, на 4 ядрах мы это моделировали, прожуем без проблем


Ruslan
06.09.2017
11:49:08
Но тут вот какой момент с однопоточной моделью: не знаю про ActiveMQ, но RabbitMQ гарантирует доставку. Это работает так:
Агент А отправляет сообщение агенту В через брокера.
Брокер передал сообщение агенту В, но сообщение не удалил, лишь пометил. Если от агента В приходит флаг ACK на это сообщение, оно удаляется, в противном случае возвращается в очередь. Теперь вот что: если вы используете 1 поток на вычитку входящих сообщений, а обработку в пуле, то в случае, если обработка провалится, сообщение не вернётся в очередь ActiveMQ, т.к. IO поток после вычитки и перед передачей в пул обработки пометит сообщение как ACK (Acknowledge). Обычно это делается под капотом фреймворка интеграции с ActiveMQ, например. В общем, проектируя систему, держите это в голове. Проблема решается использованием более низкоуровневых транспортных абстракции, например.


Mikhail
06.09.2017
11:51:47
Но тут вот какой момент с однопоточной моделью: не знаю про ActiveMQ, но RabbitMQ гарантирует доставку. Это работает так:
Агент А отправляет сообщение агенту В через брокера.
Брокер передал сообщение агенту В, но сообщение не удалил, лишь пометил. Если от агента В приходит флаг ACK на это сообщение, оно удаляется, в противном случае возвращается в очередь. Теперь вот что: если вы используете 1 поток на вычитку входящих сообщений, а обработку в пуле, то в случае, если обработка провалится, сообщение не вернётся в очередь ActiveMQ, т.к. IO поток после вычитки и перед передачей в пул обработки пометит сообщение как ACK (Acknowledge). Обычно это делается под капотом фреймворка интеграции с ActiveMQ, например. В общем, проектируя систему, держите это в голове. Проблема решается использованием более низкоуровневых транспортных абстракции, например.
Да, это я знаю, насколько я знаю - нам не критично, если где-то что-то пропадет

Google

Ruslan
06.09.2017
11:52:44
300 потоков - в 99% случаев - ошибочное проектирование системы.

Mikhail
06.09.2017
11:54:05

Sergey
06.09.2017
11:54:18
промежуточная очередь и пул потоков нынче не модно?

Ruslan
06.09.2017
11:54:24

Mikhail
06.09.2017
11:54:35
Вообще на все очереди и не очереди
Начальный старт - где-то до сотни потоков
И максимальная сотня нужна только на одну очередь
Остальные надо покрутить
Чтобы в пике было потоков 150, из них 100 на главную очередь, в которую вся нагрузка приходит

Ruslan
06.09.2017
11:56:04
Вообще на все очереди и не очереди
Это все равно много. Старайтесь их сократить. 100 потоков это очень много. Очень много бесполезной работы вашего приложения уходит на переключение контекста. В вашем случае многопоточность не помогает, а скорее мешает. Если постоянно переключать множество потоков, работа будет выполнена неэффективно.

Mikhail
06.09.2017
11:56:48
Именно это и и было сегодня ночью
Поэтому, я полностью согласен

Ruslan
06.09.2017
11:57:59

Mikhail
06.09.2017
11:58:31

Mukhammed
06.09.2017
12:05:38
как вы в хибере получаете некст значение сиквенца? без директ склл. (конкретного seq)

Ruslan
06.09.2017
12:08:14

Mukhammed
06.09.2017
12:08:32
так это же текущий

Google

Sherzod
06.09.2017
12:08:35
он же написал без SQL

Ruslan
06.09.2017
12:08:55

Mukhammed
06.09.2017
12:09:04
но это с директ скл

Ruslan
06.09.2017
12:09:09

Sherzod
06.09.2017
12:09:21
ии то что ты пишешь вроде только под оракл

Ruslan
06.09.2017
12:09:33

Sherzod
06.09.2017
12:09:46
ну под те субд которые sequence поддерживают

Ruslan
06.09.2017
12:09:54

Admin
ERROR: S client not available

Mukhammed
06.09.2017
12:11:33
оракл у меня. ну ок. придется через nextval. думал мб что красивое есть

Sherzod
06.09.2017
12:11:55
если оракл то выше метод нужно немного подправить
нужно будет писать SELECT sequence_name.nextval FROM dual

Ruslan
06.09.2017
12:12:42

Mukhammed
06.09.2017
12:12:56

Sherzod
06.09.2017
12:12:57
в oracle нельзя SELECT 1
Там используется dummy таблица

Igor
06.09.2017
12:13:18
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_info_id_seq")
@SequenceGenerator(name = "user_info_id_seq", sequenceName = "user_info_id_seq", allocationSize = 1)
а такое с ораклом не катит?

Mukhammed
06.09.2017
12:13:25
только там SELECT sequence_name.nextval id FROM dual

Google

Mukhammed
06.09.2017
12:13:29
id вроде нужен

Ruslan
06.09.2017
12:15:03

Igor
06.09.2017
12:15:48
но уже и ответили же

Mukhammed
06.09.2017
12:16:41
угу
значит никак
я думал ты предлагаешь другой вариант

Igor
06.09.2017
12:16:57

Sherzod
06.09.2017
12:17:35

Mukhammed
06.09.2017
12:18:32
ой впизду такое городить) нигде такое особо не используется больше

Igor
06.09.2017
12:18:54

Mukhammed
06.09.2017
12:19:08
да можно. думал че то есть красивое готовое уже

Igor
06.09.2017
12:19:17
не, красивее некуда)

Mukhammed
06.09.2017
12:19:42
главное чтобы имя seq не поменял никто))))0

Sherzod
06.09.2017
12:20:19
хотя, вроде seq к таблице не привязываются, так что нет
думал решить проблему методом selectа seq из объектов

Mukhammed
06.09.2017
12:29:04
что то в торе решил проверить какой сек у меня щас. а без сессии никак

Boris
06.09.2017
15:23:24
Вероятно, не очень умный вопрос:
private static KeyPair GenerateKeys() {
return generateKeyPair();
}
final String pubKey = Base64.getEncoder().encodeToString(GenerateKeys.getPublicKey())
final String privKey = Base64.getEncoder().encodeToString(GenerateKeys.getPrivateKey())
У меня будет два ключа которые между собой никак не связаны? Или это таки будет публичный сгенерированный на основе приватного?
Алгоритм ECDSA от BouncyCastle

Aleksander
06.09.2017
15:29:38
а есть документация какая-нибудь к классу GenerateKeys и его статическим методам getPrivateKey и getPublicKey
Я бы рекомендовал почитать документацию