나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

97
Elixir 그그그 MSA

Transcript of 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Page 1: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Elixir 그리고 MSA

Page 2: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

MSA?

Page 3: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

http://www.slideshare.net/andrewdohyunjung/msa-43702981

Page 4: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

http://www.slideshare.net/andrewdohyunjung/msa-43702981

Page 5: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

http://www.slideshare.net/andrewdohyunjung/msa-43702981

Page 6: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
Page 7: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Elixir 와 MSA 가 무슨 연관이 ?

Page 8: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Erlang

Elixir

Page 9: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

사실 MSA 에 묻어가려고…

Page 10: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

MSA 개발 / 운영 시에 있으면 좋을꺼 같은것들 ( 매우 주관적 )

Page 11: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

• 서비스들이 죽지 않았으면 좋겠다 .• 운영중에 패치가 편했으면 좋겠다 .• 클러스터링 가능 했으면 좋겠다 .• 서비스들간의 통신이 편했으면 좋겠다 .

Page 12: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

• 서비스들이 죽지 않았으면 좋겠다 . Supervisor• 운영중에 패치가 편했으면 좋겠다 . Hot Code Swapping• 클러스터링 가능 했으면 좋겠다 . Cluster• 서비스들간의 통신이 편했으면 좋겠다 . MessagePassing/RPC

ErlangElixir

Page 13: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
Page 14: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Erlang/Elixir

Page 15: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

1986: 에릭슨사 개발

1998: 오픈소스화

2016: Erlang/OTP18.3

Page 16: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Erlang

• 함수형 언어 .• 불변 변수 (Immutable variables)• 강타입 , 동적 타입 자료형 체계 (strong, dynamic typing)• 병행성 (Concurrency) 모델중 Actor model.

Page 17: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

https://www.youtube.com/watch?v=B4rOG9Bc65Q

Page 18: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

https://www.youtube.com/watch?v=B4rOG9Bc65Q

Page 19: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

http://stackoverflow.com/questions/1636455/where-is-erlang-used-and-why/1637137#1637137

Page 20: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

2012: José Valim 개발

2016: Elixir 1.2

Page 21: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Elixir• Erlang 의 특징을 계승 .• Elixir 컴파일러가 BEAM(Erlang VM) 용 바이트코트로 컴파일 .• 도큐먼트 제공• 툴 제공 (ExUnit, iex, Mix)• 페키지 관리 (Hex packages)

Page 22: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
Page 23: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

https://www.youtube.com/watch?v=lly-1UYmnFI

Page 24: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

http://www.slideshare.net/gabriele.lana/the-magic-of-elixir

Page 25: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

–Joe Armstrong

“Erlang was designed for writing concurrent programs that run forever”

Page 26: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Concurrency modelErlang/Elixir Actor model

Node.js Single thread, Event driven

Go CSP

Page 27: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Actor = Process + Data + Code

Page 29: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
Page 30: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Actor Actor Actor

Actor Actor Actor

data data

datadata

data

Input

Output

Page 31: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

http://www.slideshare.net/eonblast/why-erlang-gdc-online-2012

Page 32: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

http://www.slideshare.net/eonblast/why-erlang-gdc-online-2012

Page 33: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Lightweight process

ProcessMail box

Heap

Stack

Garbage Collector

Page 34: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Message passing

P2Receiver

P1SenderMail box Mail box

message

message

Page 35: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Message passing

P2Mail boxmessage

P2

메시지 수신

메시지 라우팅

메시지 처리

메시지 응답

Page 36: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Message passingP2

메시지 수신

메시지 라우팅

메시지 처리

메시지 응답

Page 37: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Message passingP2

메시지 수신

메시지 라우팅

메시지 처리

메시지 응답

Page 38: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Message passingP2

메시지 수신

메시지 라우팅

메시지 처리

메시지 응답

Page 39: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Message passingP2

메시지 수신

메시지 라우팅

메시지 처리

메시지 응답

P3

메시지 수신

메시지 라우팅

메시지 처리

메시지 응답

PN

메시지 수신

메시지 라우팅

메시지 처리

메시지 응답

Page 40: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
Page 41: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

– erlang.org

“OTP (Open Telecom Platform) is a large collection of libraries for Erlang to do everything from compiling

ASN.1 to providing a WWW server. Most projects using "Erlang" are actually using "Erlang/OTP", i.e. the

language and the libraries. OTP is also open source.”

Page 42: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

OTP Behaviours

• GenServer• GenEvent• GenFSM• Supervisor

Page 43: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

GenServer

Page 44: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Server

Client

Client

requestresponse

request

Page 45: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

기본 프로세스 GenServer 프로세스

Page 46: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

GenEvent

Page 47: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

EventManager

Client Client Client

event

Page 48: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

GenFSM

Page 49: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

http://knewter.github.io/erlang_dc_workshop/deck/otp_with_elixir/finite_state_machines/slides/#/2

Page 50: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

MSA 와 Elixir

Page 51: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

• 서비스들이 죽지 않았으면 좋겠다 . Supervisor• 운영중에 패치가 편했으면 좋겠다 . Hot Code Swapping• 클러스터링 가능 했으면 좋겠다 . Cluster• 서비스들간의 통신이 편했으면 좋겠다 . MessagePassing/RPC

ErlangElixir

Page 52: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Supervisor

Page 53: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Supervisor

ProcessProcess Process

Page 54: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Supervisor

ProcessProcess Process

Page 55: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Supervisor

ProcessProcess ProcessProcess

Page 56: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
Page 57: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
Page 58: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Supervisor

ProcessProcess Process

one_for_one

Page 59: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Supervisor

ProcessProcess Process

one_for_one

Page 60: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Supervisor

ProcessProcess Process

one_for_one

Process

Page 61: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Supervisor

ProcessProcess Process

one_for_all

Page 62: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Supervisor

ProcessProcess Process

one_for_all

Page 63: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Supervisor

ProcessProcess Process

one_for_all

Process Process Process

Page 64: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Supervisor

ProcessProcess Process

reset_for_all

Page 65: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Supervisor

ProcessProcess Process

reset_for_all

Page 66: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Supervisor

ProcessProcess Process

reset_for_all

Process Process

Page 67: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Supervisor

ProcessProcess Supervisor

ProcessProcess Process

Page 68: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Hot code swapping

Page 69: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
Page 70: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
Page 71: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
Page 72: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
Page 73: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
Page 74: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
Page 75: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
Page 76: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

ActorCode Data

Process

Page 77: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

ActorCode Data

Process

New Code

Page 78: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

ActorData

Process

New Code

Page 79: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Cluster

Page 80: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

EndPoint

Payment Cart

Service

Page 81: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
Page 82: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

EndPoint

Payment Cart

Service

EndPoint

Payment Cart

Service

Proxy

Page 83: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Service

EndPoint

Payment Cart

특정 기능에만 부하가 집중된다면

Page 84: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

ServiceService

EndPoint

Payment Cart

EndPoint

Payment Cart

Proxy

Page 85: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Node#2Node#1

EndPoint

Payment Cart Cart

Cart

Page 86: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

EndPoint

EndPoint

EndPoint …

Cart Cart Payment …

DMZEndpoint

Business

Client

Page 87: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Node

Node Node

Node

$ Node.connect(nodename)

Page 88: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Service/Node 간 통신

Page 89: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

SystemSystem

Node Node

Node Node

Page 90: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

SystemSystem

Page 91: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

SystemSystem

pid

Page 92: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

사실 Thrift 씁니다 ..

Page 93: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

Elixir 에 관심이 생기셨다면 ..

Page 94: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

http://elixir-lang.org

Page 95: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
Page 96: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

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

Page 97: 나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발

감사합니다 .