Many early client-server systems were stateful. Servers kept working state in memory. They passed messages back and forth with their clients over persistent connections. Think of a banking system with a central mainframe and a dedicated terminal for each teller. This worked because the number of clients was small. Having fewer clients limited the system resources necessary to maintain those concurrent connections.
Then Tim Berners-Lee invented a new client-server system called the World Wide Web. The web is an incredibly successful software platform. As the web has grown and spread, so has HTTP.
HTTP is a stateless protocol, so we think of web applications as stateless as well. This is an illusion. State is necessary for applications to do anything interesting, but instead of keeping it in memory on the server, we often push it off into a database where it awaits the next request.
Offloading state to a database provides some real advantages. HTTP-based applications need to maintain temporary connection with clients only until they send a response, so they require far fewer resources to serve the same number of requests. Most languages can’t muster the concurrency necessary to maintain enough persistent connections to be meaningful for a modern web application. Going “stateless” has let us scale.
But statelessness comes at a cost. It introduces significant latency as applications need to make one or more trips to the database for the data to prepare a response. It makes the database a scaling bottleneck, and it habituates us to model data for databases rather than for application code.
How Elixir can solve this "problem"?
Elixir offers more than enough concurrency to power stateful servers. Phoenix channels provide the conduit. A single Phoenix application can maintain persistent channel connections to hundreds of thousands or even millions of clients simultaneously. Those clients can all broadcast messages to each other, coordinated through the server. While processing those messages, the application remains snappy and responsive. Elixir and Phoenix provide a legitimate alternative to stateless servers capable of handling modern web traffic. Low latency is important when you are processing a high volume of data, but still need the app to run quickly and smoothly without any delays. This combination of high concurrency and low latency is one of the main reasons that Elixir web development is so popular.
Since Elixir runs on Erlang VM, it is able to run applications on multiple communicating nodes. This makes it easy to create larger web and IoT applications that can be scaled over several different servers. Having multiple virtualized servers over a distributed system also leads to better app performance.
One of the features that developers love most about Elixir is its fault-tolerance. It provides built-in safety mechanisms that allow the product to work even when something goes wrong. Processes alert a failure to dependent processes, even on other servers, so they can fix the problem immediately.
Elixir is a functional programming language that is easy to read and easy to use. It utilizes simple expressions to transform data in a safe and efficient manner. This is yet another reason that so many developers are currently choosing Elixir and why many programmers are learning the language.
Not all roses...
Elixir is not a great choice when it comes to raw CPU power and processing speed. If your application or solution involves a lot of number crunching, you’ll probably want to choose a different language for that specific purpose and then integrate it into Elixir.
On the other hand, if your system is performing many concurrent I/O and CPU tasks, Elixir can work for you, as Erlang was created with a strong focus on latency and predictable performance.
To sum up, with the prevalence of new programming languages popping up practically every year and the desire of developers to migrate to new, more “modern” languages, there has been an increased interest in Elixir.
Elixir programming is the best choice for developing high-load solutions and applications with large numbers of users. It is great for developing IoT applications and social media apps.