Wykład dotyczący maszyny wirtualnej Erlanga wygłoszony dla kierunku Informatyka na wydziale IEiT AGH w Krakowie.
BEAMmaszyna wirtualna ErlangaMichał Ślaski @michalslaski
View Slide
PLAN WYKŁADU• Erlangowy styl programowania współbieżnego• Złożoność systemów komputerowych• Systemy współbieżne i rozproszone• Maszyna BEAM
O MNIE• AGH'2005• SFI'2009 '2017• Tech Lead'2012 @ Erlang SolutionsProgramowanie współbieżnew języku ErlangAkademia Górniczo-Hutnicza w Krakowie18 grudnia 2007Michał Ślaski[email protected]© 1999 – 2007 Erlang Training and Consulting Ltd
JĘZYKI FUNKCYJNE• Rachunek lambda - lata 30. XX wieku• LISP 1958 - rekurencja i GC• Scheme 1970 -𝝀-calculus• Miranda 1985 - ewaluacja leniwa• Erlang 1986 - przetwarzanie współbieżne• Elixir 2012 - nowoczesne wzorce projektowe
JĘZYKI FUNKCYJNE• typy funkcyjne i funkcje wyższego rzędu• funkcje czyste i zmienne niemutowalne• rekurencja i ewaluacja leniwa• wyrażenia (nie instrukcje)• dopasowywanie wzorca
HISTORIA WSPÓŁBIEŻNOŚCI• Komputer - lata 40. - Alan Turing• Actor Model - lata 70. - Carl Hewitt• Communicating Sequential Processes - lata 70. - Tony Hoare• Erlang - lata 80. - Joe Armstrong
JOE ARMSTRONG
OBSERWACJA ARMSTRONGA• In order to implement a concurrent language, you have to do three things at a very primitive level• message passing should be extremely fast• context switching should be extremely fast• and there should be a built-in error processingmechanism
MATERIAŁY• Let's #TalkConcurrency Panel Discussion with Sir Tony Hoare, Joe Armstrong and Carl Hewitt• The Mess We're In by Joe Armstrong
2021+• Wielordzeniowe CPU - systemy współbieżne• Chmura i mgła - systemy rozproszone• 5G - systemy miękkiego czasu rzeczywistego
SYSTEM ROZPROSZONYVizceral - inżynieria intuicyjna w Netflixie
BEAM• zwięzły kod (concise code)• odporność na błędy programów (reliability)• wykorzystanie wielu rdzeni CPU (utilisation)• sprawiedliwy podział zasobów (latency)• możliwość śledzenia wykonania (traceability)
BEAM 2017
BEAM 2021
PRODUKTY OPEN SOURCE• MongooseIM• RabbitMQ• VerneMQ• CouchDB• Riak
MONGOOSEIM• serwer komunikatora XMPP• wsparcie dla Geo Distribution• zastosowanie powyżej 10k użytkowników• wdrożenia w nk.pl, ooVoo, Grindr
COUCHDB• baza danych zorientowana na dokumenty• język zapytań w JavaScript używa MapReduce• replikacja multi-master• zastosowania w BigData i Mobile• wdrożenia w LHC, Apple
VERNEMQ• Broker MQTT• Realizuje głównie wzorzec PubSub• zastosowanie w platformach IoT• wdrożenia w Siemens, Volkswagen
RIAK• Rozproszona baza danych typu KV• Replikacja danych na N węzłach w klastrze• Replikacja multi-datacenter• zastosowania w składowaniu krytycznych danych• wdrożenia w brytyjskiej i duńskiej służbie zdrowia
RABBITMQ• Broker protokołów AMQP, STOMP i MQTT• Konfiguracje kolejek: replikacja, persystencja• Zastosowania w architekturach mikroserwisów• wdrożenia w około 35,000firm
• program do modelowania obiektówtrójwymiarowychWINGS 3D
LIVEBOOK• Interaktywny notatnik dla Nx + Axon• Wspólna praca z kodem i wykresami
ERLANG 24.0• JIT dla architektury x86-64• Linux perf - profilowanie wydajności• Intel LBR - śledzenie wykonania programu• WebView - uniwersalne appki na każdy OS
JIT + LBR + PERF
PERF + SPEEDSCOPE
CO DALEJ?• Erlang the Movie• Erlang the Movie II • Erlang 25• JIT dla ARM64• Frame Pointers