. Name the common sources of overload in Erlang systems
. What are the two main classes of strategies to handle overload?
. How can long-running operations be made safer?
. When going synchronous, how should timeouts be chosen?
. What is an alternative to having timeouts?
. When would you pick a queue buffer before a stack buffer?
. What is a true bottleneck? How can you find it?
. In an application that calls a third party API, response times vary by a lot depending on how healthy the other servers are. How could one design the system to prevent occasionally slow requests from blocking other concurrent calls to the same service?
. What’s likely to happen to new requests to an overloaded latency-sensitive service where data has backed up in a stack buffer? What about old requests?
. Explain how you could turn a load-shedding overload mechanism into one that can also provide back-pressure.
. Explain how you could turn a back-pressure mechanism into a load-shedding mechanism. . What are the risks, for a user, when dropping or blocking a request? How can we prevent duplicate messages or missed ones?
. What can you expect to happen to your API design if you forget to deal with overload, and suddenly need to add back-pressure or load-shedding to it?