Chapter 7. Building a concurrent system
This chapter covers
- Working with the mix project
- Managing multiple to-do lists
- Persisting data
- Reasoning with processes
The concurrent examples you’ve seen so far relied on a single server-process instance. But typical Elixir/Erlang systems are powered by a multitude of processes, many of which are stateful server processes. It’s not uncommon for a moderately complex system to run a few thousands processes, whereas larger systems may be powered by hundreds of thousands or even millions of processes. Remember that processes are cheap, so you can create them in abundance. And owing to message-passing concurrency, it’s still fairly easy to reason about highly concurrent systems. Therefore, it’s useful to run different tasks in separate processes. Such a highly concurrent approach can often improve scalability and reliability of your systems.
In this chapter, you’ll see an example of a more involved system powered by many processes that cooperate to provide the full service. The ultimate goal is to build a distributed HTTP server that can handle many end users who are simultaneously manipulating many to-do lists. You’ll do this throughout the remaining chapters and reach the final goal in chapter 12. In this chapter, you’ll develop an infrastructure for handling multiple to-do lists and persisting them to the disk. But first, let’s see how to manage more complex projects with the mix tool.