Distributed erlang
-
Upload
yuri-zhloba -
Category
Software
-
view
735 -
download
2
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 .
?