Distributed erlang

download Distributed erlang

If you can't read please download the document

Transcript of Distributed erlang

Erlang

Minsk F# User Group

?

A distributed system is one in which the failure of a computer You didnt even know existed can render your own computer unusable.

?

:

Google BigTable, Amazon SimpleDB, Hadoop, Cassandra

, .. Erlang:

Riak, CouchDB

?

Google Search, , WhatsApp

, .. Erlang:

Hadoop, Github

?

:

Facebook, Twitter,

?

:

World of Warcraft

World of Tanks

Call of Duty Black Ops

?

,

,

,

, (CDN -- content delivery network)

Erlang?

Erlang

Erlang?

90%99%99,9%99,99%99,999%99,9999%99,99999%99,999999%99,9999999%

< < 4 < 9 < 1 ~ 5 ~ 31 ~ 3 ~ 300 ~ 30

Erlang?

99s

http://ninenines.eu/

Cowboy, Ranch, Bullet, Sheriff

(Application)

(Node)

(Cluster)

Erlang?

Erlang?

:

( )

( )

,

-

Erlang?

:

, :)

Erlang?

:

,

-

Erlang?

:

-

Erlang?

:

-

Erlang?

Erlang?

Erlang?

Erlang?

Erlang?

Takeover

Failover


?

,

...


?

,


?


?


?


?


?

,


?


?

Erlang

trusted environment

Erlang

trusted environment

Erlang

(HTTP REST )

Erlang

erl -name node@host

Erlang

erl -name [email protected]

Erlang

Erlang

4 6

10 45

Erlang

Heart Beat

Erlang

erl -name node@host -hidden

Erlang

~/.erlang.cookie

erl -setcookie abc

erlang:set_cookie(Node, Cookie)

Erlang

epmd

Erlang Port Mapper Daemon

Erlang

empd

-

Erlang

Empd

Name listing

Port queries

global

global:register_name(Name, Pid)

global:re_register_name(Name, Pid)

global:whereis_name(Name)

Naming Conflict

global:register_name(Name, Pid, Resolve)

Naming Conflict

fun global:random_exit_name/3

fun global:random_notify_name/3

fun global:notify_all_name/3

net_adm

Various Erlang Net Administration Routines

net_adm:ping(Node)

Erlang

BIF (Build in functions)

node()nodes()

monitor_node(Node, Flag)

disconnect_node(Node)

get_cookie()set_cookie(Node, Cookie)

spawn(Fun)spawn(Node, Fun)spawn(Module, Function, Args)spawn(Node, Module, Function, Args)

spawn_link/1,2,3,4

net_kernel

Erlang Networking Kernel

net_kernel:connect_node(Node)

net_kernel:start([Name, shortnames])net_kernel:start([Name, longnames, HeartBeat])

net_kernel:set_net_ticktime(5)

rpc

Remote Procedure Call Services

rpc:call(Node, Module, Function, Args)

rpc:call(Node, Module, Function, Args, Timeout)

Res = rpc:asyn_call(node, module, function, arguments)

rpc:yield(Res)

rpc:nb_yield(Res, Timeout)

rpc:multicall(Module, Function, Args)

rpc:multicall(Nodes, Module, Function, Args)

rpc:multicall(Module, Function, Args, Timeout)

rpc:multicall(Nodes, Module, Function, Args, Timeout)

rpc:cast(Node, Module, Function, Args)

rpc:abcast(Nodes, Name, Msg)

rpc:sbcast(Nodes, Name, Msg)

OTP-

OTP-:

loaded

started

stopped

OTP-

OTP-:

loaded

started/running

stopped

OTP-

Failover

Takeover

Net Split

OTP-

LYSE

Distributed OTP Applications

- 4 .

?