Here’s Why You Should Build Scalable Systems with Erlang

Building systems in the earlier days of the internet used to be pretty simple.

While the system was admittedly pretty limited, the demand to scale past one or two servers wasn’t particularly high. But upon entering the 21st century, we saw large companies (think Amazon, Starbucks, Yahoo) and many more find the need to scale not just a few servers, but thousands. Even tens of thousands. Suddenly, the old-school system was impractical and nearly impossible to scale past one of two servers.

The need for a system that offers scalability, flexibility and resilience had arrived. Enter Erlang- the powerful programming language designed for building highly scalable, fault-tolerant systems. 

Wondering what benefits there are to a scalable system like Erlang? Keep reading. We’ll be breaking down those very basics in this blog.

A bit of background on Erlang

But first, a bit of history of the Erlang language.

Erlang was developed in the 1980s by Ericsson. Since then, it has been used to build large-scale distributed systems, such as telecom switching systems, online gaming platforms, and social networking sites. 

So, what is a scalable system?

Before we start discussing scalable systems, let’s see what is really meant by the term ‘scaleable’. 

Measuring scalability is the ability to measure a system’s ability to increase or decrease in cost and performance, in response to the changes in a system’s demands.

Now, it may seem obvious that an application being used by one user would require different levels of technology than one being used by a hundred. Yet, the reality is that there are still many businesses using technology that does not allow for this flexibility. This often leads to companies having to invest more money in creating software from scratch whenever they grow. 

As digital transformation drives accelerated business growth, businesses of all sizes need to be able to scale operations and adapt to their rapidly changing environments quickly. It’s no surprise that scalability has become an increasingly important factor when dealing with developing applications. Businesses have no choice but to be scalable, or they will face becoming overwhelmed when usage increases and will eventually become unable to meet the demands of a growing user base.

A scalable computer language such as Erlang can write large new programmes and extend large existing ones relatively pain-free, depending on the complexity of the size of the programme it is trying to manage. 

Concurrency and parallelism in Erlang

Erlang does a lot of things differently, one of those things being concurrency. When compared to most other programming languages that treat concurrency as an afterthought, Erlang builds in concurrency from the very base of the system.

It was designed from the ground up to support concurrency and parallelism. 

Illustrating concurrency and parallelism on a 2-core CPU. Source: OpenClassrooms 2020. https://devopedia.org/concurrency-vs-parallelism

Erlang’s lightweight processes, also known as actors, can execute in parallel, and they communicate with each other by exchanging messages. This message-passing model makes it easy to build highly concurrent systems that can handle a large number of users.

Fault tolerance (Let it Crash)

The philosophy behind Erlang is simply ‘Let it Crash.’

Sound odd, right? Actually, letting it crash isn’t about crashing for the user or system. 

It’s about containing failure and letting Erlang clean it up.

It knows that errors will happen, and things will break. 

Instead of trying to simply guard against those errors, Erlang has a built-in mechanism to handle those errors and failures. 

These mechanisms allow guarding against errors. So when a process crashes, it can restart automatically. In turn, the system restarts quickly and continues to operate smoothly.

OTP

The Open Telecom Platform (OTP) is a set of tools, frameworks and principles that are designed to guide and support the deployment of Erlang systems. 

OTP includes a wide range of components, such as a supervision tree, process registry, and message queues, which can be used to build complex distributed systems.

Supervision tree example https://www.erlang.org/doc/design_principles/des_princ.htm

Focusing on the supervision tree is a key hierarchical structuring model that is based on the idea of workers and supervisors, which makes it possible to design and programme fault-tolerant software.

The workers are processes that perform computations meaning, they do the actual work. And supervisors are processes that monitor the behaviour of those workers. A supervisor can restart a worker if something goes wrong.

Using OTP in your projects will help you to avoid accidental complexity.

Distributed systems

Erlang was designed for building distributed systems. It has built-in support for building systems that span multiple nodes. Erlang’s distribution mechanism allows processes to communicate with each other across the network, making it simple to build systems that scale horizontally.

Erlang is high- performance

Erlang is an incredibly high-performing language that can handle a large number of concurrent users and has great resilience over high task loads. 

Well known for its low latency, it is well-suited for building systems that require real-time processing and also has a small memory footprint, which enables it to run efficiently on low-end hardware.

Hot Code Loading

Erlang has a unique feature known as hot code loading, which enables developers to update their systems without shutting them down. 

Another way to think of it is that Hot Code Loading is the art of replacing an engine from a running car, without ever having to stop the car itself. It can update the code without causing any disruption to the service, meaning zero impact on users.

This feature is particularly useful for building systems that need to be available 24/7.

Scalability

Last but not least, Erlang’s scalability is next to none. This language can be used to build systems that can handle millions of users. Erlang’s concurrency model and distributed architecture make it easy to build systems that can scale horizontally across multiple nodes, allowing developers to handle increasing loads, without sacrificing performance.

To conclude

Overall, Erlang is a great choice for building large-scale distributed systems that need to be highly available and performant. It handles concurrency and all its complexities with robustness and ease. But don’t just take our word for it. There are thousands of companies across the globe that have enlisted Erlang beyond its early days in telecoms. 

But don’t just take our word for it. Here are some of the clients who have felt the real-life impact of Erlang on their businesses.

Fancy finding more out about Erlang? Check out our page.

Keep reading

5 Erlang and Elixir use cases in FinTech

5 Erlang and Elixir use cases in FinTech

Erlang and Elixir can be found powering some of the most performative and innovative systems in the world of financial services.

Guess Less with Erlang Doctor
Guess Less with Erlang Doctor

Guess Less with Erlang Doctor

Introducing Erlang Doctor: Leveraging the tracing capabilities of BEAM languages like Erlang and Elixir.

gen_statem Unveiled
gen_statem

gen_statem Unveiled

In this post by Nelson Vides, explore the practical applications of Erlang's gen_statem behaviour, as discussed in his recent FOSDEM conference talk.