Your SlideShare is downloading. ×
  • Like
Erlang: Agile Scaling
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Erlang: Agile Scaling

  • 578 views
Published

 

Published in Technology , News & Politics
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
578
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
4
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Erlang agile scaling - distributed cluster in 10 minutes Sunday, February 22, 2009
  • 2. Obsah • Základní principy • Úvod do syntaxe • Distributed Erlang • Demo: Distribuovaný PMAP algoritmus Sunday, February 22, 2009
  • 3. Erlang vs. Java Sunday, February 22, 2009
  • 4. Erlang vs. Java #2 Sunday, February 22, 2009
  • 5. Základní principy • Funkcionální jazyk - žádná podpora OOP • Procesy místo objektů • Posílání zpráv místo threadů a sdílení paměti • Pattern matching místo přiřazování • Podpora pro distribuované programování • Lehce exotická syntaxe Sunday, February 22, 2009
  • 6. Úvod do syntaxe • Proměnné začinají velkým písmenem, lze přiřadit pouze 1x • Poslední výsledek je výstupem funkce • Čárka odděluje výrazy a argumenty • Středník odděluje klauzule (v rámcí jedné funkce) • Tečka ukončuje funkci -module(my_math). -export([factorial/1]). factorial(1) -> 1; factorial(N) -> N * factorial(N - 1). Sunday, February 22, 2009
  • 7. Datové typy • Integer - libovolná velikost • Float (64 bit) • Atom - podobné jako symboly v Ruby • true, false, ok, error • Tuple - soubor prvků, pevná velikost • {1, 2, three, {3, 1}} • List - soubor prvků, proměnná velikost • [1,2,3,4,5,[a,b,c]] Sunday, February 22, 2009
  • 8. Co chybí? • String - pouze jako list integerů. • Res = lists:append([quot;Hello, quot;, quot;Erlangquot;, quot;!quot;]). %%% Hello, Erlang! • Boolean - lze nahradit použitím atomů • if A == true -> ok; A == false -> not_ok end. • Hash - lze použít list tuplů • Hash = [{key1, value1}, {key2, value2}]. {value,{_,Value}} = lists:keysearch(key1,1,Hash). Sunday, February 22, 2009
  • 9. Distributed Erlang • Systém se skládá z nodů • každý node má své jméno • procesy beží na nodech, každý má své PID • předávání správ mezi procesy je transparentní (nemusíme znát příslušný node) • spojení mezi nody je automaticky udržované a tranzitivní (A -> B, B -> C => A -> C) • komunikace povolena mezi nody se stejným cookie • každý node má seznam všech ostatních nodes(). Sunday, February 22, 2009
  • 10. Jak to rozjet? echo quot;TWRKJYJEQZGEBRITIFLSquot; > ~/.erlang.cookie erl -sname node1 erl -sname node2 erl -sname node3 (node1@localhost)> net_adm:ping(node2@localhost) (node2@localhost)> net_adm:ping(node3@localhost) (node3@localhost)> nodes(). [node1@localhost, node2@localhost] Sunday, February 22, 2009
  • 11. Co s tím? DPMAP! • Distribuovaný Paralelní MAP • paralelní výpočet hodnot funkce pro sadu parametrů probíhající na několika počítačích současně • Oproti DRuby automatická správa nodů • není potřeba vědět nic o IP adresách a portech • přidávání dalších nodů je triviální Sunday, February 22, 2009
  • 12. Jak to funguje? • 80 řádek kódu: • zjisti seznam nodů, nastartuj na nich worker procesy • procházej sekvenci parametrů a rozděluj na workery • toto se děje zasíláním zpráv worker procesům pode PID • počkej na odpovědi • ukonči procesy • vypiš výsledek Sunday, February 22, 2009
  • 13. DEMO ! pmap(Fun, List) when is_function(Fun), is_list(List) -> Master = self(), Workers = lists:map(fun (Node) -> proc_lib:spawn_link(Node, fun () -> control(Master) end) end, [node() | nodes()]), Refs = distribute_tasks(Fun, List, Workers, Workers), lists:foreach(fun (Worker) -> Worker ! stop end,Workers), Res = gather_tasks(Refs), gather_workers(Workers), Res. Sunday, February 22, 2009