VulCode

Elixir: co w nim budujemy i dlaczego

Elixir na maszynie wirtualnej Erlanga wybieramy do procesów, które muszą przetrwać awarię sąsiada: routerów żądań, połączeń strumieniowych i pamięci podręcznych.

Kiedy Elixir, a kiedy coś innego

Technologia ma pasować do miejsca, w którym kod będzie działał, i do zespołu, który go przejmie. Ostateczny wybór zapada przy wycenie, razem z Tobą.

Wybieramy Elixir

Router poleceń na węźle

Router Flaem na każdym węźle trzyma strumień poleceń z rdzenia, kolejkę zadań i raporty. Wolne wywołanie Proxmoxa wykonuje się w osobnym zadaniu, więc nie zagłusza reszty węzła.

Podnoszenie się po awarii

Nadzorca OTP restartuje proces, który padł, a reszta systemu działa dalej. Zamknięty strumień z rdzeniem kończy się ponownym połączeniem, a nie awarią usługi.

Raport o tym, co naprawdę działa

Na prośbę rdzenia węzeł wylicza maszyny, które istnieją w Proxmoxie, i serwery gier, które hostuje. Błąd przy zbieraniu danych kończy się raportem o błędzie, a nie zatrzymaniem strumienia poleceń.

Lokalny stan węzła

Węzeł trzyma w SQLite przez Ecto swoje serwery, przydzielone adresy, tunele i dostępy SFTP. Restart procesu nie gubi tego, co węzeł wie o sobie.

Pamięć podręczna zgodna z Redisem

excache rozmawia protokołem RESP, więc łączą się z nim zwykli klienci Redisa. Klucze są podzielone między procesy pod nadzorcą, a każdy proces obsługuje swoje klucze po kolei, bez blokad.

Każde połączenie we własnym procesie

Procesy maszyny Erlanga są lekkie, więc w excache każde połączenie klienta ma własny. Zawieszony albo zerwany klient nie blokuje pozostałych.

Wybieramy coś innego

Interfejsy i strony

Panel Flaem jest w React i TypeScripcie, a Elixir pracuje na węzłach, gdzie nie ma żadnego ekranu. Interfejs w TypeScripcie łatwiej przekazać kolejnemu zespołowi.

Ciężkie obliczenia

Maszyna wirtualna Erlanga jest zbudowana pod wejście i wyjście, a nie pod liczenie. Obliczenia na liczbach i kryptografię piszemy w Ruście.

Agent w maszynie klienta

Wydanie Elixira zabiera ze sobą własne środowisko ERTS. Agent wewnątrz VPS-a klienta ma być jednym małym plikiem, więc piszemy go w Go.

Rdzeń z rozliczeniami

Elixir sprawdza typy głównie w działaniu, więc zły kształt danych wychodzi dopiero wtedy, gdy kod się wykona. Rozliczenia i KSeF w rdzeniu Flaem są w Ruście, gdzie sprawdza je kompilator.

Usługa dla zespołu bez Erlanga

Programistów Elixira jest mniej niż programistów Go czy TypeScriptu. Gdy usługę przejmie zespół klienta, a nadzór procesów nie jest kluczowy, wybieramy Go.

Skrypty i automatyzacje

Jednorazowy skrypt albo bot nie potrzebuje nadzorców ani wydań. Python jest na każdym Linuksie i zrobi to szybciej.

Elixir w porównaniu, punkt po punkcie

Każda potrzeba w jednym wierszu, a obok siebie to, co w tej sprawie daje każda z dwóch kolumn.

UsługaElixirGo

Tysiące połączeń i nadzór procesów

Wbudowane w OTP
Trzeba napisać samemu

Jeden plik binarny

Wydanie z własnym ERTS
Tak

Dostępność programistów

Mniejsza
Większa

Awaria jednej części

Nadzorca restartuje tylko ją
Nieobsłużona panika kończy cały program

Zawieszone wywołanie zewnętrzne

Osobny proces, reszta dalej odpowiada
Osobna gorutyna z limitem czasu

Typy

Sprawdzane głównie w działaniu
Statyczne, sprawdzane przy kompilacji

Ciężkie obliczenia

Słabsza strona maszyny Erlanga
Szybszy kod maszynowy

Elixir w całym naszym kodzie

Ile linii napisaliśmy w Elixir i jaką część wszystkiego, co napisaliśmy, to stanowi. Liczymy linie dodane w commitach naszych repozytoriów, osobno dla każdego języka.

91 810
linii napisanych w Elixir
1,7%
wszystkich linii, które napisaliśmy
2
repozytoria z kodem w Elixir
9.
miejsce wśród 26 języków

Biblioteki, na których stoją te projekty

Z plików zależności naszych repozytoriów. Przy każdej jedno zdanie o tym, do czego jej używamy.

Instalacja aplikacji na VPS w panelu Flaem: katalog aplikacji i postęp instalacji
Stan usług w aplikacji Flaem na telefonie: dostępność komponentów i planowane prace
  • grpc i protobuf

    Strumień poleceń z rdzenia.

  • Bandit i Plug

    Lokalne API węzła.

  • Ecto i SQLite

    Lokalny stan węzła.

  • Joken

    Tokeny dostępu.

Inne technologie i gdzie działa ich kod

Każda ma swoją stronę z projektami na prawdziwych ekranach i porównaniem z alternatywami.

Strony i aplikacje webowe

To, co widać w przeglądarce, i jego zaplecze.

Aplikacje mobilne

Natywne klienty Android i iOS.

Aplikacje desktopowe

Programy na Windows, macOS i Linux bez przeglądarki w środku.

Backend i infrastruktura

Rdzenie, agenty na serwerach i usługi czasu rzeczywistego.

Boty i automatyzacje

Discord, skrypty i monitoring.

Pytania o Elixir

Odpowiedzi o Elixir, naszych projektach i liczbach na tej stronie.

Projekt w Elixir?

Opisz, co chcesz zbudować. Odpiszemy w godzinę i powiemy wprost, czy ta technologia jest dobrym wyborem.