How an External API Nearly Brought Down Our Service: Adopting Virtual Threads
Network I/O was blocking threads. JDK 21 virtual threads fixed that, then pinning and overwhelming showed up. How each one was handled.

Network I/O was blocking threads. JDK 21 virtual threads fixed that, then pinning and overwhelming showed up. How each one was handled.

As PM of Loopy in Nexters 26, I chased scenarios in my head, not users. In cohort 27 I joined Emotia, an AI for exploring emotions, as a backend developer.

1,000 people request 100 items at once. How a single UPDATE gives one to exactly 100 of them, instead of the locks usually proposed for a first-come event.

Loading 40–60 delivery plans per screen from an external API was slow. Redis and local caches made it 50–100x faster, and Redis Pub/Sub kept servers in sync.

@Transactional(readOnly = true) is supposed to speed Spring up by turning off dirty checking. Elastic APM showed extra JDBC calls that made it slower.