liveBook · Manning

Uptime

As explained in Elixir in Action, Third Edition

A high-availability system is a system designed to provide service continuously with minimal downtime.

High availability means keeping a system online and meaningfully responsive with minimal downtime, even when errors, overload, component failures, machine crashes, or upgrades occur. section 1.1 section 1.1.1

Designing for high availability requires addressing several production concerns:

  • Localize, recover from, and continue operating through unexpected errors, bugs, failed components, dropped connections, and machine crashes. section 1.1.1
  • Handle increasing load by adding hardware, ideally without software changes or a system restart. section 1.1.1
  • Run across multiple machines so another machine can take over and horizontal scaling remains possible. section 1.1.1
  • Keep request handling responsive by preventing lengthy tasks from blocking unrelated work. section 1.1.1
  • Push software updates without disconnecting established service when live updates are required. section 1.1.1

On BEAM, lightweight processes provide the main implementation mechanism. They run tasks concurrently, isolate failures, support shared-state services and background jobs, and combine with links, supervisors, and distribution to limit failures and recover the system. section 5.1 section 12.2.6

Figure 5.1 BEAM as a single OS process, using a few threads to schedule a large number of processes
CH05_F01_Juric3

Shows how BEAM runs many lightweight processes within one operating-system process, clarifying the concurrency model behind high availability. section 5.1

A continuously available server

A production server can handle simultaneous client requests, maintain caches or session data, and run background jobs without allowing one lengthy task or failed handler to bring down unrelated work. With concurrency, distribution, process isolation, and supervision, a to-do system can degrade gracefully, recover from individual errors, and survive machine crashes. section 5.1 section 12.2.6

How Elixir in Action, Third Edition covers it

How deep it goes
Explains operational requirements and connects them to BEAM processes, supervision, and distribution, while deferring databases and network partitions.
Examples
Uses telephone networks, web applications, concurrent server workloads, a to-do system, and the BEAM process-scheduling model.
What it assumes
Assumes familiarity with production server workloads while grounding the implementation discussion in BEAM processes and their isolation properties.
What you can do after
Evaluate systems against availability requirements and design toward isolation, concurrency, graceful degradation, supervision, and machine-level failover.
How it connects
Connects fault tolerance, scalability, distribution, responsiveness, live updates, concurrency, process isolation, and supervision.

Also explained in

Compare how 20 books explain uptime →

Related concepts

This explainer was generated by Manning's knowledge graph from the text of Elixir in Action, Third Edition. The section links point to the parts of the book it draws on.