Now that you have sufficient knowledge of Elixir and functional programming idioms, we’ll turn our attention to BEAM concurrency—a feature that plays a central role in Elixir’s and Erlang’s support for scalability, fault tolerance, and distribution. In this chapter, we’ll start our tour of BEAM concurrency by looking at basic techniques and tools. Before we explore the lower-level details, we’ll take a look at higher-level principles.
Erlang is all about writing highly available systems—systems that run forever and are always able to meaningfully respond to client requests. To make your system highly available, you must tackle the following challenges:
- Fault tolerance—Minimize, isolate, and recover from the effects of run-time errors.
- Scalability—Handle a load increase by adding more hardware resources without changing or redeploying the code.
- Distribution—Run your system on multiple machines so that others can take over if one machine crashes.
If you address these challenges, your systems can constantly provide service with minimal downtime and failures.