|
| 1 | +--- |
| 2 | +title: "Challenge 2 - Observability Challenge with virtual threads" |
| 3 | +date: 2025-10-10T22:20:11+02:00 |
| 4 | +pinned: true |
| 5 | + |
| 6 | +resources: |
| 7 | + - src: "**.{png,jpg,webp}" |
| 8 | + title: "Image #:counter" |
| 9 | + |
| 10 | +tags: |
| 11 | + - Grafana |
| 12 | + - Observability |
| 13 | + - OpenTelemetry |
| 14 | + - AOCC |
| 15 | + - Puzzlers |
| 16 | + - Java |
| 17 | + |
| 18 | +slug: aocc-challenge-02 |
| 19 | + |
| 20 | +summary: |
| 21 | + An Application Observability Code Challenge with `virtual threads`. Spot the difference between system thread and virtual thread usage for the same application with some problems. |
| 22 | +--- |
| 23 | + |
| 24 | + |
| 25 | + |
| 26 | +After I released the [first challenge](../aocc-challenge-01), I got quite a lot of enthusiastic reactions from developers who were interested in doing the challenge. |
| 27 | +But I also noticed that it was sometimes quite hard to find the cause of the problem. Therefore it is a challenge, right? |
| 28 | +This time the issue is easier to find, which you can even spot just by looking at the code. But this time the question is can you spot this problem based on the observability data? |
| 29 | +And especially **can you spot the problem when virtual threads** are being used? And can you find the **differences between Java 21 and Java 25** when using virtual threads? |
| 30 | + |
| 31 | +### 🔍 The Challenge |
| 32 | +- Run the sample applications `regular-threads` and `virtual-threads-21` and `virtual-threads-25` |
| 33 | +- Run the tests to see what happens |
| 34 | +- Try to find out what happens, make a hypothesis❗ |
| 35 | +- **Improve the observability** of the application to **prove the hypothesis** |
| 36 | +- Optional: fix the problem and **prove it with observability data that it is really fixed** |
| 37 | +- Optional, but highly appreciated 🙏: Share your findings, insights you learned and potential solution, either as a ['discussion'](https://github.com/cbos/application-observability-code-challenges/discussions) or as a pull request |
| 38 | + |
| 39 | +### 🛠️ How to Get Started |
| 40 | +All the details you need to jump in can be found here: |
| 41 | +👉 [https://github.com/cbos/application-observability-code-challenges/tree/main/challenge-02](https://goto.ceesbos.nl/ghch02) |
| 42 | +Prefer an online environment? No problem! Use KillerCode to get started with just a few clicks: |
| 43 | +👉 [https://killercoda.com/observability-code-challenges](https://goto.ceesbos.nl/aocckk) |
| 44 | + |
| 45 | +### Challenge details |
| 46 | + |
| 47 | +- The setup contains 4 applications: |
| 48 | + - `common-backend`: A common backend used by three other applications |
| 49 | + - `regular-threads`: A version of the application with **Java 21** and using **regular threads** to execute the requests |
| 50 | + - `virtual-threads-21`: A version of the application with **Java 21** and using **virtual threads** to execute the requests |
| 51 | + - `virtual-threads-25`: A version of the application with **Java 25** and using **`Virtual Threads`** to execute the requests |
| 52 | +- The applications are instrumented using **OpenTelemetry** auto instrumentation. |
| 53 | +- You can either run the application with Docker or directly. |
| 54 | +- Pre-configured **K6 load scripts** to simulate traffic and reveal performance bottlenecks. |
| 55 | +- You can use the **pre-configured [Observability Toolkit](../observability-toolkit)** or you can use **your own Observability stack** |
| 56 | + |
| 57 | +The setup looks like this: |
| 58 | + |
| 59 | + |
| 60 | +Goals for this challenge: |
| 61 | +1) Check if you can find the Java version in the observability data (logs, metrics, traces) |
| 62 | +1) Can you spot the latency gap between the services in traces? |
| 63 | +1) Can you find the problem based on metrics? |
| 64 | +1) And the most important: Can you see the difference between the 3 application `regular-threads` and `virtual-threads-21` and `virtual-threads-25`? |
| 65 | +2) What can be done to make it more observable? |
| 66 | + |
| 67 | +👉 Go to the challenge: [https://github.com/cbos/application-observability-code-challenges/tree/main/challenge-02](https://goto.ceesbos.nl/ghch02) |
| 68 | + |
| 69 | +### Feedback? |
| 70 | + |
| 71 | +If you have any feedback, please let me know. You can leave a comment below, send me a message on [Bluesky](https://bsky.app/profile/ceesbos.nl), [Mastodon](https://foojay.social/@cbos), [LinkedIn](https://www.linkedin.com/in/ceesbos/) or in the ['discussion'](https://github.com/cbos/application-observability-code-challenges/discussions) section of the challenge's Github repository . |
| 72 | + |
| 73 | + |
| 74 | + |
| 75 | + |
| 76 | + |
0 commit comments