Erlang! Politechnika Poznańska. Łukasz Cieśnik, (Politechnika Poznańska) Erlang!

Podobne dokumenty
ξ II.UWr Erlang - wprowadzenie Marek Materzok 29 października 2007

Język programowania Erlang

Wstęp do. Erlanga. Mateusz Lenik

Wprowadzenie. Dariusz Wawrzyniak 1

Język programowania Erlang

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

Podstawowe pojęcia dotyczące relacyjnych baz danych. mgr inż. Krzysztof Szałajko

Integracja komunikatora opartego o protokół XMPP z dużym portalem internetowym

5. Model komunikujących się procesów, komunikaty

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

ActiveXperts SMS Messaging Server

UML w Visual Studio. Michał Ciećwierz

Projektowanie architektury systemu rozproszonego. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Działanie systemu operacyjnego

Middleware wprowadzenie października 2010

PHP: bazy danych, SQL, AJAX i JSON

Middleware wprowadzenie października Dariusz Wawrzyniak (IIPP) 1

Czujniki obiektowe Sterowniki przemysłowe

SZKOLENIE: Administrator baz danych. Cel szkolenia

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Materiały do laboratorium MS ACCESS BASIC

Programowanie obiektów

Problemy niezawodnego przetwarzania w systemach zorientowanych na usługi

KUP KSIĄŻKĘ NA: PRZYKŁADOWY ROZDZIAŁ KOMUNIKATY DLA UŻYTKOWNIKA

Bazy Danych. C. J. Date, Wprowadzenie do systemów baz danych, WNT - W-wa, (seria: Klasyka Informatyki), 2000

4. Procesy pojęcia podstawowe

Działanie systemu operacyjnego

Organizacyjnie. Prowadzący: dr Mariusz Rafało (hasło: BIG)

Rywalizacja w sieci cd. Protokoły komunikacyjne. Model ISO. Protokoły komunikacyjne (cd.) Struktura komunikatu. Przesyłanie między warstwami

Projektowanie bazy danych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

API transakcyjne BitMarket.pl

Wykaz zmian w programie SysLoger

Spis treści. Przedmowa

Zarządzanie ruchem w sieci IP. Komunikat ICMP. Internet Control Message Protocol DSRG DSRG. DSRG Warstwa sieciowa DSRG. Protokół sterujący

Przygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)

Projektowani Systemów Inf.

Działanie systemu operacyjnego

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład X

Technologie informacyjne - wykład 12 -

Interfejs do potwierdzania produkcji w SAP ze skanerem ELZAB

Rozproszone bazy danych. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW

AUREA BPM Oracle. TECNA Sp. z o.o. Strona 1 z 7

4. Procesy pojęcia podstawowe

Zagadnienia egzaminacyjne INFORMATYKA. Stacjonarne. I-go stopnia. (INT) Inżynieria internetowa STOPIEŃ STUDIÓW TYP STUDIÓW SPECJALNOŚĆ

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

1 Kursory 1. 2 Wyjątki Wyjątki predefiniowane Wyjątki niezdefiniowane wcześniej Definiowanie własnych wyjątków...

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

Hurtownie danych wykład 5

Programowanie obiektowe zastosowanie języka Java SE

Mariusz Rudnicki PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO CZ.1

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1

Systemy operacyjne. Wprowadzenie. Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA realizacja w roku akademickim 2016/2017

Zagadnienia egzaminacyjne INFORMATYKA. stacjonarne. I-go stopnia. (INT) Inżynieria internetowa STOPIEŃ STUDIÓW TYP STUDIÓW SPECJALNOŚĆ


Wstęp. Historia i przykłady przetwarzania współbieżnego, równoległego i rozproszonego. Przetwarzanie współbieżne, równoległe i rozproszone

Oracle11g: Wprowadzenie do SQL

dr inż. Konrad Sobolewski Politechnika Warszawska Informatyka 1

Podstawy programowania III WYKŁAD 2

Pakiety podprogramów Dynamiczny SQL

Wprowadzenie do programowania współbieżnego

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Programowanie w języku Swift : Big Nerd Ranch guide / Matthew Mathias, John Gallagher. Gliwice, cop Spis treści

Rozproszone systemy internetowe. Wprowadzenie. Koncepcja zdalnego wywołania procedury

Języki programowania deklaratywnego

Współpraca z platformą dokumentacja techniczna

Zdalne wywoływanie procedur RPC. Dariusz Wawrzyniak 1

CHARAKTERYSTYKA ZASOBÓW INFORMACYJNYCH

Projektowanie logiki aplikacji

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Autor: Joanna Karwowska

Tuning SQL Server dla serwerów WWW

Programowanie MorphX Ax

DEKLARATYWNE ZARZĄDZANIE W MICROSOFT SQL SERVER

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Windows.

Zdalne wywoływanie procedur RPC

Bazy danych - wykład wstępny

Zdalne wywoływanie procedur RPC

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Systemy rozproszone System rozproszony

Wykład I. Wprowadzenie do baz danych

współbieżność - zdolność do przetwarzania wielu zadań jednocześnie

Wykład 0 Informacje Podstawowe

Gwarancja jakości świadczenia usług (SLA)

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Analiza i projektowanie aplikacji Java

Diagramy klas. dr Jarosław Skaruz

Multimedia JAVA. Historia

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Metody Kompilacji Wykład 1 Wstęp

AKADEMIA GÓRNICZO-HUTNICZA. Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki KATEDRA INFORMATYKI. SyncFile

Transkrypt:

Erlang! Łukasz Cieśnik lukasz.ciesnik@gmail.com Politechnika Poznańska 2009-10-29 Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 1 / 19

Plan prezentacji Plan prezentacji Plan prezentacji Geneza języka Programowanie sekwencyjne Współbieżność w Erlangu Rozpraszanie Obsługa błędów Mnesia Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 2 / 19

Geneza Geneza Geneza Początek w 1986 w firmie Ericsson. Napisany przez Joe Armstronga na potrzeby oprogramowania telekomunikacyjnego: soft real time systems wymagany jest niski czas odpowiedzi, ale bez sztywnych ograniczeń czasowych, działające nieprzerwanie (non-stop systems), obsługujące asynchroniczne zdarzenia, najłatwiej modelowane przy pomocy procesów duże (złożone) systemy skalowalne, wymagające rozpraszania odporne na błędy (robust) Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 3 / 19

Wprowadzenie Cechy Cechy paradygmat funkcyjny: funkcje (w tym domknięcia) to first-order objects, ograniczenie efektów ubocznych, zachłanne obliczanie, wbudowane silne wsparcie dla współbieżnie wykonywanych procesów komunikacja na zasadzie przesyłania komunikatów, rozproszone przetwarzanie, obsługa błędów, ładowanie kodu w działającym systemie (hot code loading) bez naruszania działających procesów, komunikacja ze światem zewnętrznym. Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 4 / 19

Wprowadzenie Programowanie funkcyjne w Erlangu Programowanie funkcyjne w Erlangu W Erlangu same obiekty (term) są niemodyfikowalne, ale istnieją efekty uboczne: tworzenie procesów wysyłanie, odbieranie wiadomości obsługa wejścia/wyjścia Zachłanne wartościowanie i obecność jawnej komunikacji lepiej służy modelowaniu procesów komunikujących się ze światem zewnętrznym i obsługujących asynchronicznych zdarzenia. Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 5 / 19

Wprowadzenie Typy danych Typy danych liczby (całkowite, zmiennoprzecinkowe), atomy (symbole), listy, [1, 2, 3] == [1 [2 [3 []]]] krotki, {1, 2, 3} brak osobnego typu łańcuchowego tekst reprezentowany jest przez listę kodów znaków, rekordy (implementowane jako krotki), -record(person, {firstname, lastname}). #person{firstname="john", lastname="kowalski"} == {person, "John", "Kowalski"} funkcje (przeciążane ze względu na ilość argumentów), identyfikatory procesów. Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 6 / 19

Wprowadzenie Składnia Składnia Przykładowy kod: -module(factor). -export([factor/1]). factor(n) when N > 0 -> factor(n, 2). factor(n, Div) when N rem Div == 0 -> [Div factor(n div Div, Div)]; factor(n, Div) when Div*Div =< N -> factor(n, Div+1); factor(n, _) when N > 1 -> [N]; factor(_, _) -> []. Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 7 / 19

Współbieżność Procesy Procesy Procesy w ramach maszyny wirtualnej: tanie w tworzeniu, niski narzut przełączania kontekstu, brak ograniczenia na ilość procesów, Utworzenie nowego procesu: Pid = spawn(module, Function, Arguments) Identyfikator procesu: self() Wysłanie wiadomości: Pid! Message Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 8 / 19

Współbieżność Ping: serwer Ping: serwer echo() -> receive {echo_request, From, Seq} -> From! {echo_reply, self(), Seq}, echo(); stop -> ok end. Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 9 / 19

Współbieżność Ping: wysyłanie Ping: wysyłanie ping_send(_, Receiver, Stop, Stop, _) -> Receiver! stop; ping_send(peer, Receiver, Seq, Stop, Interval) -> Peer! {echo_request, Receiver, Seq}, receive after Interval -> ping_send(peer, Receiver, Seq+1, Stop, Interval) end. Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 10 / 19

Współbieżność Ping: odbiór Ping: odbiór ping(peer, N, Interval) -> Receiver = self(), spawn(fun() -> ping_send(peer, Receiver, 0, N, Interval) end), ping_recv(peer). ping_recv(peer) -> receive {echo_reply, From, Seq} -> io:format("reply from ~w seq=~w\n", [From, Seq]), ping_recv(peer); stop -> ok end. Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 11 / 19

Współbieżność Ping: wywołanie Ping: wywołanie -module(ping). -export([start/0, echo/0, ping/3]). start() -> Echo_server = spawn(fun echo/0), ping(echo_server, 3, 500), Echo_server! stop. Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 12 / 19

Współbieżność Rozpraszanie Rozpraszanie Dzięki komunikacji poprzez wymianę pakietów wsparcie dla rozproszonych systemów jest naturalne. Można bez większych zmian program działający lokalnie uruchomić na wielu węzłach, ale trzeba określić lokalizację procesów na etapie ich tworzenia częściowa przezroczystość lokalizacji. Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 13 / 19

Obsługa błędów Odporność na awarie Odporność na awarie Erlang wspiera tworzenie systemów odpornych na błędy programistyczne czy awarie sprzętu: Zapewnia izolację procesów, łatwy podział systemów na niezależne moduły i warstwy. Mechanizmy wykrywania błędów, monitorowania procesów. Możliwość powtórzenia przetwarzania. Możliwość poprawienia kodu w działającym systemie (bez restartowania). Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 14 / 19

Obsługa błędów Monitorowanie procesów Monitorowanie procesów Procesy można organizować w graf nieskierowany połączeń ustanawianych przez wywołanie link(pid). Proces przy zakończeniu (pomyślnym lub nie) wysyła informację o tym do procesów z nim połączonych. Domyślnym zachowaniem procesów przy dostarczeniu wiadomości o pozytywnym zakończeniu jest jej ignorowanie, a przy błędnym zakończenie przetwarzania i dalsze rozpropagowanie błędu. Po wywołaniu process_flag(trap_exit, true)proces będzie odbierał informację o identyfikatorach zakończonych procesów oraz przyczynach zakończenia. Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 15 / 19

Mnesia Mnesia Mnesia Mnesia to obiektowo-relacyjna baza danych. Szybki czas dostępu baza działa w tej samej maszynie wirtualnej co aplikacja. Język zapytań zrealizowany na bazie składni Erlanga. Wartościami atrybutów mogą być dowolne struktury danych. Tranzakcje mogą być rozproszone i zagnieżdżone. Operacje krytyczne pod względem czasu wykonania można realizować z obejściem tranzakcyjności. Tabele mogą być replikowane w pamięci i/lub na dysku wielu węzłów. Gwarantuje to mniejszy czas dostępu oraz odporność na awarię można operować na tabeli tak długo jak dostępna jest jedna z replik. Zapytania są niezależne od lokalizacji tabeli. Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 16 / 19

Mnesia Zapytania 1 Zapytania 1 -record(person, {id, first_name, last_name, sex}). -record(project, {id, name}). -record(project_assignment, {project_id, person_id, hours}). list_females() -> mnesia:transaction(fun() -> Q = qlc:q([{p#person.first_name, P#person.last_name} P <- mnesia:table(person), P#person.sex == female]), qlc:e(q) end). Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 17 / 19

Mnesia Zapytania 2 Zapytania 2 -record(person, {id, first_name, last_name, sex}). -record(project, {id, name}). -record(project_assignment, {project_id, person_id, hours}). assigned_people(project) -> Q = qlc:q([person Person <- mnesia:table(person), Assign <- mnesia:table(project_assignment), Assign#project_assignment.project_id == Project#project.id, Assign#project_assignment.person_id =:= Person#person.id]) qlc:e(q). Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 18 / 19

Mnesia Linki Linki Erlang oficjalna strona: <http://erlang.org > prezentacja: <http://sirius.cs.put.poznan.pl/ inf66226/erlang/ > Łukasz Cieśnik, lukasz.ciesnik@gmail.com (Politechnika Poznańska) Erlang! 2009-10-29 19 / 19