Upload
changwook-park
View
284
Download
0
Embed Size (px)
Citation preview
SWITCH
SWITCH
http://stackoverflow.com/questions/1636455/where-is-erlang-used-and-why/1637137#1637137
SERVER
SERVER
http://stackoverflow.com/questions/1636455/where-is-erlang-used-and-why/1637137#1637137
ERLANG/OTP
▸ Functional language
▸ Immutable variables
▸ Strong, dynamic typing
▸ Actor model
▸ OTP
▸ Behavior
ACTOR MODELLIFE CYCLE
INITIALIZE
TERMINATE
RECEIVE-EVALUATE LOOP
Designing for Scalability with Erlang/OTP
start
stop
ACTOR MODEL
https://viethip.com/category/erlang/
process process process
ERLANG VM
GARBAGE COLLECTOR
GENSERVERGENERIC SERVER
SERVER
CLIENT
CLIENT
CLIENT
http://erlang.org/doc/design_principles/gen_server_concepts.html
requestresponse
SUPERVISOR
ACTOR ACTOR ACTOR
SUPERVISOR
http://erlang.org/doc/design_principles/gen_server_concepts.html
SUPERVISOR
ACTOR ACTOR WORKER
SUPERVISOR
ACTOR ACTOR ACTOR
SUPERVISOR
http://erlang.org/doc/design_principles/gen_server_concepts.html
SUPERVISION TREE
“Erlang was designed for writing concurrent programs that run forever.”
A History of Erlang - Joe Amstrong
ELIXIR
▸ Support tools
▸ ExUnit - Unit test
▸ Mix - Build tool
▸ Standard library
▸ Metaprogramming
▸ Ecosystem
▸ Hex - Package management
▸ Phoenix - Web framework
“A distributed system is one in which the failure of a computer you didn't even know existed can render your own computer unusable”
Leslie Lamport
ERLANG CLUSTER
NODE
A distributed Erlang system consists of a number of Erlang runtime systems communicating with each other. Each such runtime system is called a node.
PERFORMANCE
BUSINESS NODE
ENDPOINT NODE
PAYMENT GROUP
BUSINESS NODE BUSINESS NODE
LOGIN GROUP
BUSINESS NODE
PERFORMANCE
BUSINESS NODE
ENDPOINT NODE
PAYMENT GROUP
BUSINESS NODE BUSINESS NODE
LOGIN GROUP
BUSINESS NODE
Stateless
PERFORMANCE CLIENT
BUSINESS NODE
LOADBALANCER
ENDPOINT NODE ENDPOINT NODE
BUSINESS NODE
CACHE
STATEFUL #1
PERFORMANCE CLIENT
BUSINESS NODE
LOADBALANCER
ENDPOINT NODE ENDPOINT NODE
BUSINESS NODE
CACHE
STATEFUL #1
PERFORMANCE
BUSINESS NODE +
LOCAL MEMORY
LOADBALANCER
ENDPOINT NODE ENDPOINT NODE
STATEFUL #2
BUSINESS NODE +
LOCAL MEMORY
CLIENT
PERFORMANCE CLIENT#1
BUSINESS NODE +
LOCAL MEMORY
LOADBALANCER
ENDPOINT NODE ENDPOINT NODE
CLIENT#2
STATEFUL #2
BUSINESS NODE +
LOCAL MEMORY
{session : client#1} {session : client#2}
PERFORMANCE
BUSINESS NODE +
LOCAL MEMORY
LOADBALANCER
ENDPOINT NODE ENDPOINT NODE
CLIENT#2STATEFUL #2
BUSINESS NODE +
LOCAL MEMORY
{session : client#1} {session : client#2}
PERFORMANCESTATEFUL #2
NODE
VNODE1 VNODE2
NODE
VNODE3 VNODE4
NODE
VNODE5 VNODE6
…
hash(session_id) = 1
https://www.youtube.com/watch?v=sYYOLaJ-VDQ
PERFORMANCE CLIENT
BUSINESS NODE
LOADBALANCER
ENDPOINT NODE ENDPOINT NODE
BUSINESS NODE EXTERNAL SERVICEEXTERNAL SERVICE
PERFORMANCE
ENDPOINT NODE
BUSINESS NODE
EXTERNAL SERVICEEXTERNAL SERVICE
BACKPRESSURE
LOAD REGULATION
ENDPOINT NODE
BUSINESS NODE
BACKPRESSURE
LOAD REGULATION
CLIENTS
AVAILABILITYFAULT TOLERANCE
CLIENT
BUSINESS NODE
ENDPOINT NODE
CLIENT
BUSINESS NODE
ENDPOINT NODE
error
error
BUSINESS NODE
ENDPOINT NODE
PAYMENT GROUP
BUSINESS NODE BUSINESS NODE
LOGIN GROUP
BUSINESS NODE
AVAILABILITYRESILIENCE - NODE
BUSINESS NODE
ENDPOINT NODE
PAYMENT GROUP
BUSINESS NODE BUSINESS NODE
LOGIN GROUP
BUSINESS NODE
AVAILABILITYRESILIENCE - NODE
PAYMENT GROUP
ENDPOINT NODE
BUSINESS NODE BUSINESS NODE
LOGIN GROUP
BUSINESS NODE
AVAILABILITYRESILIENCE - NODE
BUSINESS NODE
ENDPOINT NODE
PAYMENT GROUP
BUSINESS NODE BUSINESS NODE
LOGIN GROUP
BUSINESS NODE
AVAILABILITYRESILIENCE - NODE
REFERENCES▸ Books
▸ Designing for Scalability with Erlang/OTP
▸ Programming Elixir 1.3 Reliability
▸ The_Little_Elixir_&_OTP_Guidebook
▸ Videos
▸ Experimenting with Superpowered Web Services: Phoenix on Riak_Core https://www.youtube.com/watch?v=sYYOLaJ-VDQ
▸ Erlang Factory SF 2016 - Concurrency + Distribution = Scalability + Availability, a Journey Architecting Erlang Systems https://www.youtube.com/watch?v=_IZMQMuphfo