Scaling Real-Time Apps with Erlang and Elixir

Aug 30, 2024

Notes on Erlang and Elixir Scaling Real-Time Applications

Introduction

  • Many companies use Erlang and Elixir to scale efficiently with smaller teams.
  • Erlang was developed in the 1980s, primarily for telecommunications but has since found broader applications.
  • Elixir, built on Erlang, offers modern syntax and features, making it developer-friendly.

Real-Time Applications

  • Popular real-time applications include WhatsApp, Discord, Slack, and Twitch.
  • Key considerations in building real-time apps:
    • Scalability
    • Fault tolerance
    • Responsiveness
    • Distribution
  • WhatsApp was acquired with only six engineers managing infrastructure, showcasing Erlang's efficiency.

Erlang Virtual Machine (BEAM)

  • Erlang’s BEAM is a virtual machine designed for high concurrency and fault tolerance.
  • Allows for thousands of lightweight processes without significant performance degradation.
  • Message passing model reduces complexity by avoiding shared memory, enhancing fault tolerance.
  • "Let it crash" philosophy encourages robust recovery from errors.

Features of Erlang and Elixir

1. Fault Tolerance

  • Individual process failures do not affect the entire system.
  • Supervisors restart failed processes automatically.
  • Supports live code updates without downtime (hot code swapping).

2. Scalability

  • Beam allows horizontal scaling across multiple servers.
  • Handles communication between servers gracefully, avoiding common pitfalls of distributed systems.
  • Example of node communication in Elixir demonstrates ease of spawning processes across machines.

3. Distribution

  • Processes treat all nodes equally, allowing seamless communication regardless of location.
  • Simplifies building distributed architectures, crucial for apps like WhatsApp and Discord.

4. Performance

  • Performance is defined by how well the system utilizes resources, not just the speed of individual computations.
  • Erlang excels in scaling applications beyond a single server, making it suitable for real-time applications.

5. Responsiveness

  • Real-time applications require quick message delivery.
  • Erlang’s preemptive schedulers ensure efficient process execution.
  • Non-blocking IO operations allow multiple processes to run concurrently without hindrance.

Case Studies

WhatsApp

  • Founded in 2009, WhatsApp used Erlang for its messaging platform due to its reliability and scalability.
  • Achieved over a billion daily users with a small engineering team due to Erlang's concurrency.

Discord

  • Founded in 2015, initially built on Python and Elixir; core real-time chat features are powered by Elixir.
  • Handles hundreds of thousands of concurrent users, leveraging Elixir's capabilities.
  • In 2019, integrated Rust for specific performance-critical components while maintaining Elixir for its scalability.

Personal Project: Food Focus

  • A live cooking application developed with Elixir and Phoenix for real-time features.
  • Tools used included Phoenix Channels for websockets, ETS for storage, and Ecto for database operations.

Conclusion

  • Companies like Spotify, Pinterest, PepsiCo, and others leverage Erlang and Elixir for their unique capabilities.
  • The Erlang VM and Elixir are highly recommended for developing scalable, real-time applications.
  • Encouragement for developers to consider these technologies for future projects.