- Thread-per-Request в Tomcat — классическая модель, где каждому запросу выделяется поток. Покажем, где у неё пределы и как это влияет на масштабирование
- Event-loop и WebFlux / Netty — неблокирующая архитектура, где один поток обслуживает тысячи соединений.
- Virtual Threads (Java 21+) — новая эпоха Java-параллелизма. Подключим виртуальные потоки в Spring Boot и покажем, как убрать боль реактивщины без потери производительности
- I/O-bound и CPU-bound, закон Амдала — объясняем, почему многопоточность не всегда ускоряет, и как найти оптимальный баланс
- Rate-limiters и HikariCP — где рождаются «бутылочные горлышки» в реальных прод-сервисах и как их диагностировать и предотвратить
- План деградации и изоляция ресурсов — как защитить систему, если одно из API начинает тормозить
- Финальный прод-кейс — очередь задач, асинхронный раннер, три внешних API (Stock, Pricing, Shipping), статусы NEW → IN PROGRESS → DONE/FAILED. Реальный сценарий с архитектурой, близкой к продакшену.
Результат- Поймёшь, как Spring Boot и Tomcat обрабатывают параллельные запросы (модель thread-per-request)
- Увидишь воочию контраст с event-loop/WebFlux
- Разберёшься в типовых узких местах (очереди, пулы, лимиты) и применишь эти знания в практике
- Реализуешь production-like асинхронный обработчик заказов с ретраями и агрегацией результатов
- На выходе будешь уметь диагностировать bottleneck, проектировать очередь задач и использовать виртуальные потоки там, где они дают выигрыш
Домашнее заданиеAsync Runner 2049Мир будущего погрузился в тотальную асинхронность. Запросы рождаются и умирают в очередях, сервисы общаются через
HTTP, а потоки — виртуальны. Вы — инженер-бегущий по очереди в неоне мегаполиса, где каждый заказ — цепочка событий: заказ сохраняется в БД, а далее система асинхронно вызывает внешние
API — резервирует склад, считает цену, оформляет доставку. Вам предстоит построить реальный production-сервис для асинхронной обработки заказов, с ретраями и нагрузочным тестом в
k6. Здесь важно всё — очереди, таймауты, порядок событий. Добейтесь, чтобы ваш
Async Runner жил в мире, где всё происходит асинхронно — и ничего не зависает.