Amazon's Dynamo in POE and Erlang @ YAPC::Asia 2008 LT

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    2 Favorites & 1 Event

    Amazon's Dynamo in POE and Erlang @ YAPC::Asia 2008 LT - Presentation Transcript

    1. Developing Amazon’s Dynamo in POE and Erlang – Prologue of “From POE to Erlang” takemaru
    2. Dynamo ?   Amazon CTO Werner Vogels
    3. Dynamo ?   Key-value   my %hash = ( key1 => “value1”, key2 => “value2”, );   memcached
    4. Dynamo ?   Key-value  
    5. Dynamo ?   Key-value  
    6. Dynamo ?   Key-value   Latency < 300ms
    7. Dynamo ?   Key-value   Lock
    8. Dynamo ?   Key-value   …………… …………… …………… …………… …………… …………… Dynamo Bigtable/GFS
    9. Kai – Yet Anothoer Amazon’s Dynamo   Dynamo   POE   Erlang memcache
    10.   Dynamo Dynamo Node Node Dynamo Dynamo Client Node Node Dynamo Dynamo Node Node
    11.   3   Consistent Hashing Dynamo Dynamo Node Node Dynamo Dynamo Client Node Node Dynamo Dynamo Node Node
    12.   1 Dynamo Dynamo Node Node Dynamo Dynamo Client Node Node Dynamo Dynamo Node Node
    13.   2     Dynamo Dynamo Node Node Dynamo Dynamo Client Node Node Dynamo Dynamo Node Node
    14.     Dynamo Dynamo Node Node Dynamo Dynamo Client Node Node Dynamo Dynamo Node Node
    15. POE (Event Driven)   Dynamo Dynamo Node Node Receive from Client Timeout Receive from Node Dynamo Dynamo Client Node Node State my $State; sub recv_from_client; sub recv_from_node; Dynamo Dynamo sub timeout; Node Node sub another_error;
    16. POE (Event Driven)   Dynamo Dynamo Node Node Receive from Client Timeout Receive from Node Dynamo Dynamo Client Node Node State sub recv_from_client { $cli_sock->recv(my $req, 1024); Dynamo Dynamo Node Node
    17. POE (Event Driven)   3 Dynamo Dynamo Node Node Receive from Client Timeout Receive from Node Dynamo Dynamo Client Node Node state_init($cli_sock); my @nodes = choose_nodes($req); State for my $node (@nodes) { $sock = IO::Socket::Inet->new(…); $sock->write($req); $poe->kernel->select_read( Dynamo Dynamo $sock, Node Node ‘recv_from_node’, $cli_sock, ); }
    18. POE (Event Driven)   1 Dynamo Dynamo Node Node Receive from Client Timeout Receive from Node Dynamo Dynamo Client Node Node State sub recv_from_node { my $cli_sock = $poe->args->[2]; $node_sock->read(my $res, 1024); Dynamo Dynamo stat_add_res($cli_sock, $res); Node Node my $count = stat_count_res($cli_sock); if ($count == 2) {
    19. POE (Event Driven)   2   Dynamo Dynamo Node Node Receive from Client Timeout Receive from Node Dynamo Dynamo Client Node Node State sub recv_from_node { my $cli_sock = $poe->args->[2]; $node_sock->read(my $res, 1024); Dynamo Dynamo stat_add_res($cli_sock, $res); Node Node my $count = stat_count_res($cli_sock); if ($count == 2) { my $res = stat_uniq_res($cli_sock); $cli_sock->write($res); }
    20. POE (Event Driven)   Receive from Client Timeout Receive from Node Dynamo Dynamo Client Node Node State Client Receive from Client Receive from Node Node
    21. Erlang   Dynamo Dynamo Node Node Process for Client Dynamo Dynamo Client Node Node Dynamo Dynamo Node Node
    22. Erlang   Dynamo Dynamo Node Node Processes for Nodes Process for Client Dynamo Dynamo Client Node Node recv(Sock) -> {ok, Req} = gen_tcp:recv(Sock, 0), lists:foreach( Dynamo Dynamo fun(Node) -> spawn(Mod, map, [Node, Req, self()]) end, choose_nodes(Req) Node Node ), Res = gather(2, []),
    23. Erlang   3 Dynamo Dynamo Node Node Processes for Nodes Process for Client Dynamo Dynamo Client Node Node map(Node, Req, Parent) -> {ok, Sock} = gen_tcp:connect(Node, …), gen_tcp:send(Sock, Req), Dynamo Dynamo Node Node
    24. Erlang   1 Dynamo Dynamo Node Node Processes for Nodes Process for Client Dynamo Dynamo Client Node Node map(Node, Req, Parent) -> {ok, Sock} = gen_tcp:connect(Node, …), gen_tcp:send(Sock, Req), receive Dynamo Dynamo {tcp, Sock, Res} -> Node Node send(Parent, Res);
    25. Erlang   2   Dynamo Dynamo Node Node Processes for Nodes Process for Client Dynamo Dynamo Client Node Node map(Node, Req, Parent) -> {ok, Sock} = gen_tcp:connect(Node, …), gen_tcp:send(Sock, Req), receive Dynamo Dynamo {tcp, Sock, Res} -> Node Node send(Parent, Res);
    26. Erlang   2   Dynamo Dynamo Node Node Processes for Nodes Process for Client Dynamo Dynamo Client Node Node Res = gather(2, []), gen_tcp:send(Sock, Res). gather(0, Acc) -> Acc; Dynamo Dynamo gather(N, Acc) -> Node Node receive Res -> gather(N-1, uniq([Res|Acc])), after 100 -> % timeout Acc end.
    27. Erlang   Process for Node Process for Client Dynamo Dynamo Client Node Node Client Process for Client Process for Node Node
    28.   Erlang              

    + Takeru InoueTakeru Inoue, 2 years ago

    custom

    1053 views, 2 favs, 1 embeds more stats

    More Info

    © All Rights Reserved

    Go to text version
    • Total Views 1053
      • 1040 on SlideShare
      • 13 from embeds
    • Comments 0
    • Favorites 2
    • Downloads 41
    Most viewed embeds
    • 13 views on http://teahut.sakura.ne.jp

    more

    All embeds
    • 13 views on http://teahut.sakura.ne.jp

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as innappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel

    Categories

    Groups / Events