Nieuwe programmeertaal gebouwd met betrouwbare techniek
Elixir is een relatief nieuwe programmeertaal waarmee we back-end applicaties mee ontwikkelen en is gemaakt door José Valim. Elixir is gebouwd op Erlang en maakt gebruik van het Erlang Open Telecom Platform (OTP). Erlang OTP is in de jaren 80 ontwikkeld door Ericsson met als doel: vele verbindingen tegelijk af te handelen voor telecom-toepassingen. Denk hierbij aan GSM masten en centrales waarbij het essentieel is dat er heel veel processen tegelijk worden afgehandeld, in tegenstelling tot meer traditionele systemen die zich vooral focussen op het heel snel afhandelen van één enkele taak.
Erlang en OTP wordt vandaag de dag nog steeds in een groot deel van alle telefooncentrales gebruikt om zowel telefoonverbindingen als mobiel internet mogelijk te maken. Maar ook moderne systemen zoals WhatsApp maken gebruik van OTP om vele processen tegelijk te verwerken en om het systeem zo fout-tolerant mogelijk te maken. Vriendelijke taal voor programmeurs
Erlang is echter niet een heel vriendelijke taal voor programmeurs. Het is immers in 1986 ontwikkeld en, ondanks dat de taal nog steeds actief wordt ontwikkeld, komt de basis uit een tijd dat hogere programmeertalen nog een academische oefening waren. In tegenstelling tot modernere programmeertalen zoals Ruby waarbij er veel meer aandacht is voor de ontwikkelaar en zijn tijd. De bedenkers waren zelf eerst onderdeel van het Ruby on Rails ontwikkelteam en hebben daardoor bij Elixir hun ervaring in het opzetten van een prettig taal nogmaals kunnen toepassen. Het resultaat is Elixir, een moderne taal die door vele programmeurs gewaardeerd wordt door de prettige syntax, die de krachtige Erlang Virtual Machine (BEAM) aan kan sturen en daarmee de performance biedt van een "lower-level" programmeertaal. Het beste van beide werelden.
Fout tolerantie en concurrency
Doordat Elixir bouwt op het OTP systeem en daarbij gebruik maakt van dezelfde BEAM VM zijn Elixir applicaties ook in staat om heel veel processen tegelijk te runnen, dit noemt men "concurrency". In een webapplicatie ontwikkeld met Elixir zal elk request zijn eigen BEAM process opstarten. Het voordeel is dat de performance van het enkele request niet sterk afhankelijk is van de de hoeveelheid gelijktijdige request, theoretisch is er zelfs geen limiet op het aantal requests dat tegelijkertijd loopt. Daarnaast zijn de processen ook geïsoleerd van elkaar, een enkel request kan een fout tegenkomen en "crashen", zonder dat dit enig gevolg heeft voor andere processen. Dit resulteert in een hoge mate van stabiliteit van het ontwikkelde systeem.
Functioneel programmeren
In tegenstelling tot vele andere back-end talen die we hebben gebruikt, zoals: Ruby on Rails, Node.js, PHP enzovoorts is Elixir een functionele programmeertaal. De eerder genoemde zijn OOP programmeertalen, dat betekent dat ze object georiënteerd zijn. Dat is even wennen voor programmeurs maar onze ervaring leert dat een programmeur al binnen een paar weken als Elixir ontwikkelaar aan de slag kan. Met name voor webapplicaties merken wij zelf dat het functionele paradigma ineens veel logischer lijkt dan de OOP principes die vooral uitgaan van het bijhouden van "state".
Schaalbare applicaties ontwikkelen
Elixir stelt ontwikkelaars in staat om snel schaalbare applicaties te maken. Doordat Elixir een funcitonele programmeertaal is kunnen op verschillende servers uitgevoerd worden. Dit hoeft niet meer op 1 CPU van 1 server te gebeuren.
Dit zorgt er voor dat iedere Elixir applicatie die we ontwikkelen zeer snel (horizontaal) schaalbaar is. Door een eenvoudige load-balancer te laten bepalen naar welke instantie een request gaat zorgen we er voor dat processen verspreid worden en uiteindelijk de gebruiker zo min mogelijk ophouden.
Gebruikers van Elixir
Wij zijn niet de enige organisatie die applicaties ontwikkelen in Elixir. Ook deze bedrijven passen Elixir toe om grote applicaties goed te laten draaien:
- Slack
- Discord
- Lonely Planet
- Toyota Connected