Эргономичный код

@channel_ergonomic_code
Привет! У меня периодически спрашивают как обстоят дела с перформансом у ЭП в целом и функционального стиля + Spring Data JDBC в частности. Я всегда говорил "У меня не хайлоад и мне всегда хватало - никогда не приходилось ничего целенаправленно оптимизировать". И вот у нас Проекте Э планируется переход от ~0.5 (3 в утренний пик) RPS к штатным 17 RPS 24/7. Тоже, конечно, не супер хайлоад, но уже существенная нагрузка, которая откровенных косяков не простит. Я соответственно пошёл мерить и к моему небольшому удивлению, бэк сходу вывез эти 17 rps в течение 10 минут. При том по прочим метрикам вывез без проблем и мог бы больше, но я пока не стал искать предел - есть более приоритетные задачи. Единственное что, это был только первый этап и БД была практически пустая - 100К записей в целевой таблице, а с такой нагрузкой рабочий объём будет 500-600М записей. Тестируемая операция: 0. авторизация по JWT-токену с парсингом и верификацией и с SELECT-ом его активности в БД 1. нетривиальный парсинг json-а с поддержкой 8 минорных версий схемы, валидация и дедупликация данных 2. один SELECT с локом по юзеру 3. пара простых SELECT-ов в целевую таблицу 4. маппинги DTO -> Domain -> Persistence 5. один INSERT в целевую Postgres inherited table 6. один простой INSERT в таблицу transactional outbox-а 7. асинхронно - публикация события в rabbit mq и удаление по id из outbox-а Чутка цифр по запросам: 0. всего запросов - 14199 1. ошибок - 0 2. avg - 115.5ms 3. p90 - 151.8ms 4. p95 - 296.5ms 5. p99 - 511.9ms 6. max - 1968.9ms. И по железу: 1. бэк - 1 pod в k8s с лимитами 400m CPU/750Mi RAM, JVM heap 550Mi. Вот тут я прям удивился, что spring-то оказывается мохёт на 500мб РАМ О_О. А в проде уменя зачем-то 2гб стоит. 2. Postgres - cloud.ru-шный менеджед на rds.pg.x1.large.2 | 2 vCPUs | 4 GB 17 RPS - тоже нифига не хайлоад, конечно, но уже и не стыдно людям рассказать. #ergo_approach@ergonomic_code #spring_data_jdbc@ergonomic_code #project_e@ergonomic_code
Если у вас установлено приложение,
вы можете сразу перейти в канал