
Daniel
13.08.2017
19:18:54

Vyacheslav
13.08.2017
19:19:02
Какой хайлоад без джавы?

Yuriy
13.08.2017
19:19:32
Отличный

Google

Yuriy
13.08.2017
19:19:45
5-6M RPS на 1 ноду
800 тактов проца на 1 http запрос :p

Vyacheslav
13.08.2017
19:20:44
Надо на тебя кривду натравить

Daniel
13.08.2017
19:21:14
желательно в отдельном канале

Vyacheslav
13.08.2017
19:21:34
Потереть за хайлоад

Yuriy
13.08.2017
19:22:03
Тут просто с джавой 300K RPS - потолок...
Для 1M уже надо Disruptor, GC выключать в JVM, Azul'ы пробовать...
В DPDK с коробки от 1М RPS для простых сервисов ...
Потому что происходит напрямую работа с железом.
В общем пока не придумали нормальный interop с сишкой в Java9 ... можно особо не надеятся на Java и хайлоады.
А называть 300К RPS хайлоадом как-то сложно... уже даже golang так умеет ...

Ivan
13.08.2017
19:57:04

Yuriy
13.08.2017
19:58:24
Омг, а зачем гц выключать?
Задержки на сборку мусора большие, с Disruptor'ом можно сделать 0lock.
Т.е. вся память приложения будет статической - один раз выделили и делаем realloc IO буферов и кольцевых буферов при backpressure. Потом вырубаем GC после прогрева машины.

Ivan
13.08.2017
19:59:37
Я как бы пользуюсь в проде дисраптором, но всё-равно не понимаю зачем отключать гц

Google

Yuriy
13.08.2017
19:59:57
lmax отключает у себя...
Azul Falcon может пропускать сборку мусора по тем же причинам.
В целом даже "пустой проход" gc по молодой выборке имеет довольно высокие накладные расходы, особенно если речь идёт о работе с большими страницами.

Vik
13.08.2017
20:01:13

Yuriy
13.08.2017
20:02:14

Vik
13.08.2017
20:02:28

Yuriy
13.08.2017
20:02:35
Не заметно

Vik
13.08.2017
20:03:04
IMAX делали свою сборку java без gc

Yuriy
13.08.2017
20:03:14
Ага...

Vik
13.08.2017
20:04:00
Много памяти на машинках, никакой распределенки, а в конце для тупо перегружали

Yuriy
13.08.2017
20:04:31
... это было давно, сейчас нормально работает и без gc

Vik
13.08.2017
20:04:31
Не заметно
Хорошо что вы здесь обязательно поправите

Yuriy
13.08.2017
20:05:26
Просто на практике видел довольно много случаев HFT и RTB где в итоге вырубали GC.
Сейчас lmax вообще всё сделал на ПЛИСках и DPDK ... и это уже отдельная история.
В целом это как шутка про состояние продакшена без flame graph'ов.
Мне будет сложно что либо объяснить без реальных примеров... ими не делюсь по понятным причинам.

Ivan
13.08.2017
20:17:54
lmax отключает у себя...
А логика такая: если LMAX у себя так делает, значит и всем нужно?
Просто мы тоже биржевые данные перевариваем и на данный момент гц отнимает 5% цпу. Как бы не тот оверхед из-за которого стоит убиваться

Yuriy
13.08.2017
20:18:31
Просто сейчас бытует очень много предрассудков касательно сабжа и общих накладных расходов
В итоге масштабируют простой процессора в разных вариациях ...

Ivan
13.08.2017
20:19:18
И да, был доклад от Черёмина где он показал что вся прелесть дизраптора не в зеро гц

Google

Alex
13.08.2017
20:19:55
Кто-то упомянул Epsilon GC?

Yuriy
13.08.2017
20:20:20

Alex
13.08.2017
20:21:14
По-моему, это пока что только драфт

Yuriy
13.08.2017
20:21:16
Шипелёв вроде его крутил ...

Ivan
13.08.2017
20:21:36

Yuriy
13.08.2017
20:22:40

Ivan
13.08.2017
20:23:10
Просто вообще говоря, работа с памятью через гц может быть эффективнее потому что балк операции
Чем через ручное удаление ссылок после каждого использования

Yuriy
13.08.2017
20:25:21

Ivan
13.08.2017
20:26:14
У LMAX проблема была в другом, они же биржевой софт делали для, собственно, биржи. Там немного другие требования, там нельзя чтобы одному ответ отдавался 1мс, а другому 20.

Ivan
13.08.2017
20:27:09
Почему ?
Потому что если он отнимает меньше 5% времени приложения, то 950к ~= 1М
Не, ну если, конечно совсем нефиг делать, то можно, конечно извращаться, но Вы уверены, что в вашем собственном коде всё идеально и проблема только в том что гц в соседнем потоке что-то делает с памятью?

Yuriy
13.08.2017
20:28:52
Ок, не думаю что мне стоит объяснять в чём разница между lock-free и wait-free подходами.
Но в целом мы можем получить либо низкие задеркжи, либо высокую пропускную способность.
Операции с памятью и проходы по генерациям ссылок тоже имеют свою стоимость - в итоге это тоже соответственно повлияет либо на пропускную способность либо на задержки.

Ivan
13.08.2017
20:30:35

Yuriy
13.08.2017
20:32:36

Ivan
13.08.2017
20:33:00

Yuriy
13.08.2017
20:34:10
Ок...
Если принято игнорировать потому что удовлетворяет бизнес требования - это не значит что это все игнорируют.

Google

Ivan
13.08.2017
20:35:34
Я не думаю что мне стоит продолжать это обсуждение.
Не, мы с чего начали-то? Что мол в рили хайлоаде гц не нужон, потому что накладные расходы и все дела, но на данный момент не вижу ни одной причины этого делать. И Вы как-то меня пока в этом тоое не убедили

Yuriy
13.08.2017
20:35:49
Я и не собирался.
В реальном мире Java разработчик никогда не перепрыгнет за 1M RPS.

Митко Соловец?
13.08.2017
20:36:24
и твои цели, что ты пришел сюда, тоже

Ivan
13.08.2017
20:36:33

Admin
ERROR: S client not available

Ivan
13.08.2017
20:37:04
Где 16М рпс )

Yuriy
13.08.2017
20:37:05
Что это ?

Ivan
13.08.2017
20:37:34
https://github.com/real-logic/aeron
Как-то да, получается известный спич из серии "пишите на плюсах потому что java тормозит"
Что вообще говоря не так )

Митко Соловец?
13.08.2017
20:39:30
а у чувачка в подписках канал pro.go
хэх

Ivan
13.08.2017
20:40:20

Yuriy
13.08.2017
20:41:33

Ivan
13.08.2017
20:43:33

Google

Yuriy
13.08.2017
20:44:11
Ну как, а это?
Потому что нет возможности вызывать существующие сишные API без высоких накладных расходов.

Vitalii
13.08.2017
20:45:06

Ivan
13.08.2017
20:45:19
И вот я тебе привёл пример где большая часть написана на java и выжимают больше 10M рпс

Yuriy
13.08.2017
20:45:30

Ivan
13.08.2017
20:47:38
Кстати, прискорбная новость для всех в этом чатике, шарпы выиграли...

Yuriy
13.08.2017
20:50:27

Ivan
13.08.2017
20:52:43
и про реальные приложения - у вас там счётчики сообщений или бизнес-логика? Если второе, но я пока не встречал ни одной бизнеслогики где все эти извращения типа отключения гц, зеро копи, и бла-бла-бла дают какой-то существенный выигрыш. Может кто поделится примерами?


Yuriy
13.08.2017
20:54:58
"бизнес-логика" это CRUD'ы AAA и валидация ?
В целом у меня лично большая часть этого барахла висит в PostgreSQL на мат. представлениях, правилах на правку/вставку и сишных триггерах, есть кастомный коннетор на shmem'e... JDBC не использую из-за костыльности - с базы сразу уходит JSON и кэшируется соответствующим образом. В качестве кэша сейчас использую свою реализацию Adaptive Replacement Cache.

Ivan
13.08.2017
20:59:10

Yuriy
13.08.2017
21:00:29
Это приложение выдаёт пока 400К RPS из-за проблем с PostgreSQL'eм - сейчас патчим 10ый на поддержку blobfs для WAL журнала... банально проседают IOPS'ы.
1M у меня было на RTB бирже.
Нетфликс тоже вот сейчас собирается потиху слезать на SPDK для WAL журналов и прочего.
Изучал сегодня особенности применения x86 intrinsic'ов в JIT'e ...
В целом включение -XX:-OptimizeFill -XX:-UseSuperWord даёт хороший прирост, но к сожалению много существующих SIMD инструкций просто не используются. В Java9 сейчас ситуация гораздо лучше в этом плане.

Arrow
14.08.2017
05:30:59
У меня есть приложение на Spring, в нем генерируется файл и отдается методом в контроллере. Я пока сделал так что этот метод отдает byte[], но это не то что нужно. Когда я открываю эту страницу в браузере то мне выводит просто набор символов (тот самый массив байтов), а надо чтобы начиналось скачивание этого файла. Как мне переделать метод?