πŸ‡°πŸ‡· ν•œκ΅­μ–΄νŒ β€” Read this article in Korean: 톡화 ν•œ 톡도 λ†“μΉ˜μ§€ μ•ŠλŠ” 법 β€” Luwareκ°€ Akka.NET μ•‘ν„°λ‘œ λ―Έμ…˜ 크리티컬 μŒμ„± μ„œλΉ„μŠ€λ₯Ό 지킨 방법

πŸ–ΌοΈ Figure 0. (Hero) The actors holding up a mission-critical voice service β€” cartoon hero image

🎯 TL;DR β€” 3 lines

Introduction β€” A World Where a Single Dropped Call Is Unacceptable

Imagine calling a contact center. Agent connection, queuing, transfers, recording, and call analytics all interlock at millisecond granularity. What happens if the timing slips just once? The call drops. The customer gets angry, and the business loses trust.

This is the world that Nimbus, built by the Swiss company Luware, lives in. Nimbus is contact center software integrated into Microsoft Teams, and it

Based on the Luware case study published by Petabridge, this article walks through the wall Luware hit and how they climbed over it with the **Akka.NET actor model** β€” explained at a working developer's eye level. If actors are new to you, don't worry: we build up the concepts step by step.


1. The Problem β€” "You End Up in Distributed Locking Hell"

Initially, Luware managed call state across multiple stateless microservices. Information about a single call was scattered across service A, service B, and caches. That is exactly where the trouble began.

πŸ–ΌοΈ Figure 1. Distributed locking hell vs. actors β€” the chaos of multiple services touching the same call state concurrently / the order of one actor owning a call outright

A quote from Luware engineer Jason Shave sums up the situation precisely: