Ten minutes elixir (매우 간단한 Fault-tolerance server)

Preview:

Citation preview

10분안에 훑어보는 Elixir (매우 간단한 Fault-tolerance server)

박창욱 (syntaxfish@gmail.com)

Elixir? Erlang?

http://www.slideshare.net/YuriLeikind/elixir-study-group-kickoff-meetup?qid=e98d1040-0cd1-4e3a-9d33-ffdb0e1d180b&v=default&b=&from_search=41

Actor Concurrency Model

http://benjamintan.io/blog/2013/06/25/elixir-for-the-lazy-impatient-and-busy-part-2-processes-101/

Elixir• Elixir is a dynamic, functional language designed for

building scalable and maintainable applications.

• Elixir leverages the Erlang VM, known for running low-latency, distributed and fault-tolerant systems, while also being successfully used in web development and the embedded software domain.

• To learn more about Elixir, check our getting started guide. Or keep reading to get an overview of the platform, language and tools. - [www.elixir-lang.org]

Elixir• Elixir is a dynamic, functional language designed for

building scalable and maintainable applications.

• Elixir leverages the Erlang VM, known for running low-latency, distributed and fault-tolerant systems, while also being successfully used in web development and the embedded software domain.

• To learn more about Elixir, check our getting started guide. Or keep reading to get an overview of the platform, language and tools. - [www.elixir-lang.org]

Elixir• Elixir is a dynamic, functional language designed for

building scalable and maintainable applications.

• Elixir leverages the Erlang VM, known for running low-latency, distributed and fault-tolerant systems, while also being successfully used in web development and the embedded software domain.

• To learn more about Elixir, check our getting started guide. Or keep reading to get an overview of the platform, language and tools. - [www.elixir-lang.org]

라이브 코딩

프로젝트 생성

$ mix new kv --module KV --no-brunch

- config - config.exs

- lib - kv.ex

- test - kv_test.exs - test_helper.exs

- mix.exs

[KV_01] 간단한 Key, Value 저장 서버

https://github.com/haruio/ten_minutes_elixir/tree/master/kv_01

GenServer

KV.Storeget(key) set(key, val)

{key, value}

{key, value}

{key, value}

GenServer

KV.Storeget(key) set(key, val)

del(key)

{key, value}

{key, value}

{key, value}

GenServer

KV.Storeget(key) set(key, val)

del(key)

{key, value}

{key, value}

{key, value}

[KV_02] 다시 살아나는 간단한 Key, Value 저장 서버

https://github.com/haruio/ten_minutes_elixir/tree/master/kv_02

GenServer + Supervisor

KV.Store Supervisor

KV.Store

get(key) set(key, val) {key, value}

{key, value}

{key, value}

GenServer + Supervisor

KV.Store Supervisor

KV.Storedel(key)

{key, value}

{key, value}

{key, value}

GenServer + Supervisor

KV.Store Supervisor

KV.Storedel(key)

{key, value}

{key, value}

{key, value}

GenServer + Supervisor

KV.Store Supervisor

KV.StoreKV.Store

[KV_03] 상태를 유지하는 다시 살아나는 간단한 Key, Value 저장 서버

https://github.com/haruio/ten_minutes_elixir/tree/master/kv_03

GenServer + Supervisor + Agent

KV.Store Supervisor

KV.StoreKV.Store Stash

get(key) set(key, val)

get(key) set(key, val) {key, value}

{key, value}

{key, value}

GenServer + Supervisor + Agent

KV.Store Supervisor

KV.StoreKV.Store Stash

{key, value}

{key, value}

{key, value}

del(key)

GenServer + Supervisor + Agent

KV.Store Supervisor

KV.StoreKV.Store Stash

{key, value}

{key, value}

{key, value}

del(key)

KV.Store Supervisor

KV.StoreKV.Store Stash

{key, value}

{key, value}

{key, value}

del(key)KV.Store

GenServer + Supervisor + Agent

Resources• Tutorials

• http://elixir-lang.org/

• Books

• Programming Elixir: https://pragprog.com/book/elixir/programming-elixir

• Slack

• https://elixir-lang.slack.com/

• Facebook

• https://www.facebook.com/groups/elixir.korea/

• https://www.facebook.com/groups/elixir.lang/