vert.x 소개 및 개발 실습

29
vert.x 로 개발하기 - 김요한 [email protected] 2013.03.11 Server Side Architect Group

Upload: john-kim

Post on 10-Jun-2015

984 views

Category:

Documents


7 download

DESCRIPTION

동영상 - https://vimeo.com/88997603 소스 - https://github.com/JohnKim/url-shortener

TRANSCRIPT

Page 1: vert.x 소개 및 개발 실습

vert.x 로 개발하기 - 김요한 [email protected]

!2013.03.11

Server Side Architect Group

Page 2: vert.x 소개 및 개발 실습

vert.x 특징 은 ? 하지만, 직접 만들어 봐야 알지! !

오늘 중요한 건,

개.발.해.보.기

Page 3: vert.x 소개 및 개발 실습

just in time programming !1. 지원되는 module 로 static web server 실해하기 2. mongodb 를 활용한 모듈 개발하고 모듈 단위 테스트 하기 3. API 서버 모듈 개발하고 EventBus 사용하기 4. script 로 모듈 디플로이해서 실행하기 5. auto-deploy 로 쉽게 테스트 하기 6. cluster 설정하여 구성하기

Page 4: vert.x 소개 및 개발 실습
Page 5: vert.x 소개 및 개발 실습

AsynchronousModularityPolyglot

vert.x 의 특징 중 3가지만,

Page 6: vert.x 소개 및 개발 실습

非同期(non-blocking)

8

thread socket

JavaVM

thread socket

thread socket

thread socket

Traditional AP Server

Vert.x

thread socket

JavaVM

socket

socket

socket

socket:thread = 1:1 socket:thread = N:1

Even

t Disp

atch

er

Asynchronous

Page 7: vert.x 소개 및 개발 실습

高効率(Efficiency)

9

socket

Vert.x Runtime(JVM)

socket

socket

socket

CPU Core

CPU Core

CPU Core

CPU Core

Event Loop

(thread)

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Even

t Disp

atch

er

Verticle Instances

Asynchronous

Page 8: vert.x 소개 및 개발 실습

スケーラブル

10

socket

Vert.x Runtime(JVM)

socket

socket

socket

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Even

t Disp

atch

ersocket

Vert.x Runtime(JVM)

socket

socket

socket

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Even

t Disp

atch

ersocket

Vert.x Runtime(JVM)

socket

socket

socket

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Even

t Disp

atch

er

socket

Vert.x Runtime(JVM)

socket

socket

socket

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Verticle

Even

t Disp

atch

erEven

t Bus

(Ba

sed

on H

azel

cast

)

Node#1 Node#2

Node#3

(*)デフォルトではイベントはnon-persistent

Asynchronous

http://www.slideshare.net/nobusue/gws-20131018-vertxhandson

Page 9: vert.x 소개 및 개발 실습

Modularity

Page 10: vert.x 소개 및 개발 실습

Modularity

ClassLoader

Main.class!library1.jar!library2.jar!library3.jar

Page 11: vert.x 소개 및 개발 실습

Modularity

ClassLoader ClassLoader ClassLoader

Module1.class!library1.jar!library2.jar

Module2.class!library1.jar!library2.jar

Module2.class!library1.jar!library2.jar

Module 1 Module 2 Module 3

EventBus (vert.x)

Page 12: vert.x 소개 및 개발 실습

Polyglot

“ Components + Scripts = Applications ” see John Ousterhout, IEEE Computer, March ’98

http://www.stanford.edu/~ouster/cgi-bin/papers/scripting.pdf

Java, Javascript, CoffeeScript, Ruby, Python or Groovy...

Page 13: vert.x 소개 및 개발 실습

http://vertx.io/

Page 14: vert.x 소개 및 개발 실습

http://www.techempower.com/benchmarks/

Page 15: vert.x 소개 및 개발 실습

URL Shortener 만들기

긴 URL 에 대한 Key

Page 16: vert.x 소개 및 개발 실습

Server Verticle

Persister Worker Verticle

vert.x instance

EventBus

Starter Verticle

Page 17: vert.x 소개 및 개발 실습

Server Verticle

Persister Worker Verticle

vert.x instance

EventBus

Starter Verticle

Deploy script (javascript)"- 필요한 Module 을 Deploy 해주는 역할"

- 서버 프로그램 로직은 없고, 설정값 셋팅과 모듈 실행을 명령하는 script

Page 18: vert.x 소개 및 개발 실습

Server Verticle

Persister Worker Verticle

vert.x instance

EventBus

Starter Verticle

HTTP API Server"- /url/ [LONG URL] : 긴 URL 을 받아서 Persister Worker 가 생성한 KEY 를 반환"

- / [KEY] : KEY 를 받아서 Persister Worker 에서 가져온 긴 URL 로 redirect

HTTP Request ( port : 8080 )

Page 19: vert.x 소개 및 개발 실습

Server Verticle

Persister Worker Verticle

vert.x instance

EventBus

Starter Verticle

mongoDB Persister"- create : mongodb 로 부터 sequence 를 가져와서

bijective algorithm 으로 short key 생성하고 다시 mongodb 에 URL 정보 저장. "

- get : short Key 로 mongodb 로 부터 URL 가져오기.

port : 27017

Page 20: vert.x 소개 및 개발 실습

Server Verticle

Persister Worker Verticle

vert.x instance

EventBus

Starter Verticle

[DB] url-shortener

[COLLECTION] seq [COLLECTION] urls

_id documents

“urlShortener” {“seq” : 2311}

_id documents“Ad23f” {“url” : “http://examp. . . . . . “}

“Ad23g” {“url” : “http://examp. . . . . . “}

“Ad23h” {“url” : “http://examp. . . . . . “} . . . . .

Page 21: vert.x 소개 및 개발 실습

vert.x instance

EventBus

Star

ter V

ertic

le

Serv

er V

ertic

le

Serv

er V

ertic

le

Serv

er V

ertic

le

Serv

er V

ertic

le

Pers

iste

r Wor

ker

Vert

icle

Pers

iste

r Wor

ker

Vert

icle

Pers

iste

r Wor

ker

Vert

icle

Pers

iste

r Wor

ker

Vert

icle

Pers

iste

r Wor

ker

Vert

icle

Page 22: vert.x 소개 및 개발 실습

EventBus

Page 23: vert.x 소개 및 개발 실습

EventBus

Page 24: vert.x 소개 및 개발 실습

sequence 로 short key 생성하기

encode(2147483647) -> cvuMLb

decode(“cvuMLb”) -> 2147483647

Page 25: vert.x 소개 및 개발 실습

[DB] url-shortener

[COLLECTION] seq [COLLECTION] urls

_id documents

“urlShortener” {“seq” : 2311230}

_id documents“Ad23f” {“url” : “http://examp. . . . . . “}

“Ad23g” {“url” : “http://examp. . . . . . “}

“Ad23h” {“url” : “http://examp. . . . . . “} . . . . .

create(long url)

get(key)

1. seq 에서 시퀀스를 가져오고 increment !"

2. bijective 로 시퀀스를 문자 키로 변환"

3. urls 에 URL 정보 저장

1. key 로 urls 에서 URL 찾아서 반환

2311231 -> Ad23h

Page 26: vert.x 소개 및 개발 실습

준비

Spring Tool Suite™ http://spring.io/tools/sts

http://www.oracle.com/technetwork/java/javase/downloads/index.htmlJDK 7

http://www.mongodb.org/downloadsmongoDB

Page 27: vert.x 소개 및 개발 실습

just in time programming

Page 28: vert.x 소개 및 개발 실습

데모 말고, 라이브 코딩

Page 29: vert.x 소개 및 개발 실습

아키텍트 가 뭐라고 생각하세요?