Pisz współbieżne programy, które działają “do końca świata”. Historia Elixira

O przykłady nieefektywnych rozwiązań z wczesnych lat życia nowych technologii nietrudno. Kiedyś połowa wsi pracowała za jeden niewielki kombajn, a żarówki chętniej produkowały ciepło, niż światło. Tak samo było z sieciami telekomunikacyjnymi – obecna infrastruktura powstawała stopniowo, wraz z postępem technologicznym, rosnącym zapotrzebowaniem i głębszym zrozumieniem niezbędnych procesów.

Szymon Soppa. Początkowo widział się jako sportowca, a algorytmów nienawidził, ale rewolucja internetowa wciągnęła go po same uszy. Szymon Soppa – założyciel Curiosum, software house’u pracującego głównie w Elixirze – to doświadczony programista i lider, który pomógł wielu międzynarodowym organizacjom stworzyć lub rozwinąć aplikacje webowe.


historia elixir

Na zdjęciu: Erlang, circa IIWŚ

Jednym z największych wyzwań dla gwałtownie rozwijającej się w połowie lat 80-tych telekomunikacji (w tym już mobilnej) było szybkie i niezawodne przełączanie połączeń – praca, która jeszcze niedawno była powszechnie wykonywana przez pracownice fizyczne! Ostatni operator ręcznego przełączania połączeń stracił pracę dopiero w 1983 roku. Pierwsze próby automatyzacji były bardzo zawodne.

Jak więc sprawić, żeby programy komputerowe pracowały niezawodnie przez lata, a wręcz były w stanie same korygować niektóre swoje błędy?

Rezultatem tych poszukiwań był ojciec Elixira, Erlang. Powstały prawie 34 lata temu w szwedzkim Ericsson, z niszowego narzędzia stał się szybko jednym z technologicznych fundamentów dzisiejszego internetu i telefonii komórkowej. Według szacunków cyfrowego giganta CISCO, zaprezentowanych podczas sztokholmskiego CodeBEAM, 90% całego ruchu internetowego przechodzi przez kontrolowane przez Erlanga węzły. Żeby zrozumieć unikalne cechy Elixira, warto prześledzić losy jego protoplasty.

historia elixir

Źródło: Praca doktorska

Napisz raz, uruchom na zawsze

W dużym skrócie, Erlang został tak zaprojektowany, aby pisać w nim współbieżne programy, które działają “do końca świata”. Erlang używa równoległych procesów, aby nadać programom strukturę, co odróżnia Erlanga od wielu technologii. W Erlangu procesy nie mają współdzielonej pamięci, a komunikują się ze sobą za pomocą asynchronicznych wiadomości.

Taka infrastruktura jest bardzo lekka – procesy są bardzo małe i działają wewnątrz języka, nie systemu operacyjnego. Jeśli w jednym procesie pojawi się błąd, nie będzie on miał wpływu na pozostałe procesy – nie dojdzie do krytycznego sprzężenia, gdyż programy nie są ze sobą sekwencyjnie połączone. To trochę filozofia “fail-fast”; coś się wysypało? Trudno, milion procesów obok musi toczyć się dalej.

historia elixir

Źródło grafiki: Johan Bevemyr – How Cisco is using Erlang for intent-based networking – Code Beam STO

Wspomniane wyżej zdolności, takie jak odporność na błędy czy możliwość ograniczonej samo-naprawy, nabierają jeszcze większego znaczenia biorąc pod uwagę typ systemów, do których obecnie Erlang jest stosowany. Od bankomatów, przez gry online i aż po telefony komórkowe i przesył danych. Erlang jest tam, gdzie wymagamy od usług bardzo wysokiej niezawodności przy wysokiej liczbie jednoczesnych użytkowników.

Dużo ruchu, mało pracy

Wczesne lata 90-te to szybki wzrost popularności Erlanga, który w 1998 roku został „uwolniony” przez Ericssona i zyskał tym samym wsparcie społeczności open-source. Z kolei na początku lat 2000, to czasy dogoniły Erlanga – nowe technologie, jak procesory wielordzeniowe, gigantyczny wzrost ruchu sieciowego i nieodległy świat aplikacji mobilnych wymagały szybko skalowalnych i łatwych w utrzymaniu systemów, które nie odrzucały klientów masą błędów w krytycznych dla życia usługach. Kod w Erlangu i jego konfiguracja mogą być aktualizowane właściwie na żywo, bez przestojów.

Erlang do dziś jest wykorzystywany tam, gdzie wymaga się współbieżności i niezawodności. Miliard ludzi wyśle dziś wiadomości przez WeChat i WhatsApp, sto milionów obejrzy coś na Netfliksie, setka tysięcy zaloguje się na serwer World of Warcraft – a głęboko pod powierzchnią każdej z tych akcji drzemie proces w Erlangu.

historia elixir

Źródło grafiki: Johan Bevemyr – How Cisco is using Erlang for intent-based networking – Code Beam STO

Z perspektywy programistów, Erlang to mimo wszystko nisza – ma specyficzny zestaw zastosowań i nie jest prosty w obsłudze. Zapotrzebowanie na developerów jest stosunkowo niewielkie. Przykładowo WhatsAppowi wystarczyła niespełna połowa setki inżynierów, żeby zarządzać od A do Z 900 milionami dziennych użytkowników – raz postawiony w Erlangu system wymaga bardzo niewiele obsługi.

Wywar z Erlanga

Niestety, Erlang ma swoje ograniczenia – łatwość pisania kodu mogła robić wrażenie kilkanaście lat temu, ale do codziennych zastosowań Erlang zwyczajnie nie przystawał. Choć świetny BEAM – wirtualna maszyna Erlanga – zapewnia najwyższą wydajność, to cały język wymagał przynajmniej odświeżenia.

Tu pojawia się w naszej historii Jose Valim – sympatyczny i niebywale pracowity twórca Elixira. Zanim zaczął pracę nad Elixirem był Ruby developerem i języki te dzielą nieco podobieństw. Wkurzało go w codziennej pracy, że Ruby słabo radzi sobie z współbieżnością. Szukając rozwiązania, Jose docenił wydajność maszyny wirtualnej Erlanga i postanowił ją wykorzystać.

historia elixira

Źródło: geek.justjoin.it/ruby-czy-elixir

Ruby jest uważany za język wysoko produktywny. Ta cecha sprawiła, że wiele startupów oparło na nim swoją architekturą serwerową. Zależność jest prosta – im szybciej jesteśmy w stanie stworzyć aplikację osiągając zamierzony efekt, tym mniej kosztów ponosimy. Właśnie tego typu produktywności w developmencie na próżno szukać w Erlangu.

Dobrze rozumiał to Jose – obok rozszerzalności (tzn. łatwości dodawania nowych funkcji) kluczowym założeniem nowo powstającego języka była właśnie produktywność.

Potężny, ale niszowy

Tak powstał Elixir – język w wielu miejscach inspirowany składnią Ruby’ego oraz korzystający z OTP, czyli zbioru bibliotek i dobrych praktyk projektowania języka Erlang. Do głównych zalet Elixira należy zaliczyć:

  • kod kompilowany do Bytecode, który następnie interpretowany jest przez świetny BEAM,
  • funkcyjność języka co dla wielu oznacza znacznie prostszą strukturę kodu,
  • dość prosta składnia, w rezultacie kod jest krótki,
  • metaprogramowanie,
  • pattern matching, który daje zaawansowanym użytkownikom potężne możliwości,
  • prostotę zastosowanych rozwiązań, które pozwalają pisać zaawansowane aplikacje.

Elixir zajął również istotną niszę w tworzeniu aplikacji internetowych i mobilnych. Dzięki bibliotece Phoenix pozwala na wytwarzanie zaawansowanych aplikacji internetowych i wprowadza wiele świeżości przez rozwiązania typu LiveView. Relacja Elixir/Phoenix może być porównana do tej Ruby z Rails. To jeden z powodów, dla których programistom RoR jest stosunkowo łatwo nauczyć się Elixira.

Środowisko Elixira nie jest bardzo duże – jest to specyficzny język, którego wartość objawia się świetnie przy tworzeniu MVP. Ma w tym zakresie porównywalną wydajność i szybkość developmentu jak Ruby on Rails, ale skaluje się nieporównywalnie lepiej. Będzie również szybszy od RoR w mocniej obciążonych usługach i aplikacjach. Ze względu na moc Elixira w powyższych zastosowaniach, chętnie używają go największe software house’y i wielkie korporacje (np. Pepsi, Spotify czy Square Enix).

Jak każdy język, Elixir ma szereg wad, które ograniczają jego przydatność. Przede wszystkim trzeba brać pod uwagę koszty związane z relatywnie niską dostępnością wykwalifikowanych programistów w tej technologii. Ma trochę wyższy próg wejścia niż inne technologie, więc mało który developer wybiera go jako pierwszy język.

Społeczność Elixira jest silna, ale nie można jej porównywać skalą do popularniejszych technologii, jak Pythona czy JavaScript. Zanim zaczniemy nietypowy projekt, warto upewnić się, czy dostępne są niezbędne biblioteki – jeśli nie, trzeba będzie je stworzyć!

Zachęcamy do obejrzenia krótkiego filmu dokumentalnego z udziałem twórcy Elixira, który opisuje jego początki i społeczność wokół niego zgromadzoną.

A więc… chcesz zacząć programować w Elixirze?

Jak już wiemy, Elixir nie jest wyjątkowo trudny w nauce – choć niektórym programistom przysparza trochę kłopotu przejście z paradygmatu obiektowego na funkcyjny, którego Elixir jest świetnym reprezentantem. Trzeba przyznać, Elixir nie ma fantastycznej dokumentacji, ale można łatwo znaleźć wysokiej jakości materiały do nauki. Subiektywny wybór zamieszczamy poniżej:


Zdjęcie główne artykułu pochodzi z unsplash.com.

Zapraszamy do dyskusji

Patronujemy

 
 
More Stories
Płatności za oprogramowanie Open Source? Śniadanie z programowaniem #3