Historia
Sukces - 1998
AXD 301
Niezawodność: 99.9999999%
Rozmiar: ~2M LOC
Czas pracy bez przerwy: 21 lat
AXD 301 to switch telekomunikacyjny, oferujący dużą
przepustowość 160 Gb/s (jak na tamte czasy).
Zwróćcie uwagę na niezawodność - na tym poziomie
oznacza ona przestój rzędu 32 ms w ciągu roku, który
jest spowodowany błędem.
Na cały system składa się 2 milionów linii kodu - to
nie tylko kod w Erlangu, ale także C. Większość
(ok. 65-70%) to jednak kod napisany w Erlangu. Szacuje
się, że to był na tamte czasy największy system
informatyczny napisany w oparciu o język funkcyjny.
Cały system działał 21 lat bez przestoju. To
oczywiście nie oznacza, że każdy komponent działał bez
przerwy tyle lat, mowa tutaj o kontekście całego
systemu. Ale nawet w takim kontekście to bardzo
imponująca wartość.
Zastosowanie
Kto?
WhatsApp Facebook T-Mobile Ericsson Motorola Amazon Heroku Github DemonWare last.fm Yahoo! Klarna Tail-F
Zwróćcie uwagę jakie firmy wybrały Erlanga.
Wymienię tylko kilka największych - T-Mobile,
Motorola, Facebook, Rackspace, Amazon, Heroku oraz
Github.
Zastosowanie
Obszary
Mobile IoT Cloud Computing Banking Databases Trading Gaming Telecom Gambling Networking
Obserwując poprzedni slajd można zauważyć kilka
powtarzających się obszarów.
Najważniejsze z nich to: Telekomunikacja (T-Mobile,
Ericsson, Motorola), Chmura (Amazon, Heroku,
CloudBees), Serwery gier (DemonWare, Riot Games,
Wooga) czy Wiadomości - Mobilne i Social Media
(Facebook, WhatsApp, Yahoo!).
Kategorie wyspecjalizowane takie jak Internet Rzeczy,
Sieci oraz Bazy Danych czy mają również swoich ważnych
ale mniej znanych przedstawicieli.
Widać wyraźnie, że wszystkie dziedziny wymagają
niezawodności, zajmują się wymianą dużej ilości
komunikatów, są z natury rozproszone.
Ta technologia sprawdzi się również w tzw. soft
real-time systems. Jest idealnie przystosowany do
pracy z danymi binarnymi (wszelkiego rodzaju
implementacje protokołów sieciowych).
Erlang nie sprawdzi się w miejscach, gdzie potrzeba
mocy CPU i najwydajniejszej implementacji związanej z
konkretną architekturą procesora. Nie sprawdzi się
również w aplikacjach, które są typowo CRUDowe lub
operują na dużych ilościach danych tekstowych.
Budowa
Problemy i Wymagania
Rozproszenie Niezawodność Współbieżność Wolne CPU Mało RAMu Koszt implementacji Koszt utrzymania
Widzimy tu problemy i wymagania, które system musiał
spełniać 30 lat temu. Praktycznie poza sprzętowymi
czynnikami, każde z wymagań zebranych na slajdzie jest
w dalszym ciągu aktualne dzisiaj.
Mamy do dyspozycji rozwiązanie, które dzięki swojej
bogatej historii wiele z problemów ma rozwiązane i
przetestowane najlepiej jak się da.
Mechanika
Functional Programming
Immutability Side-effect Free Pattern Matching Referential Transparency Higer Order Functions Purity Recursion Tail Calls
Kolejnym ważnym elementem całej układanki jest zestaw
cech języka programowania. Erlang jest jednym z
funkcyjnych języków programowania i naturalnie czerpie
z tego dziedzictwa.
Najważniejszym elementem spośród wymienionych na
slajdzie jest zupełnie innemu podejściu do zarządzania
stanem wewnątrz aplikacji, który opiera się
na braku mutowalności. Dzięki temu możemy pewne elementy
aplikacji traktować jak przezroczyste skrzynki, w których
dokładnie widać co się dzieje - wnioskowanie na temat
zachowania systemu jest znacznie prostsze.
Na pierwszy rzut oka może to wyglądać jak
ograniczenie, natomiast przy pracy z wysoce
współbieżnymi systemami warto mieć jak najwięcej
takich ograniczeń, którzy są naszymi "sprzymierzeńcami".