vert.x 소개 및 개발 실습
DESCRIPTION
동영상 - https://vimeo.com/88997603 소스 - https://github.com/JohnKim/url-shortenerTRANSCRIPT
vert.x 특징 은 ? 하지만, 직접 만들어 봐야 알지! !
오늘 중요한 건,
개.발.해.보.기
just in time programming !1. 지원되는 module 로 static web server 실해하기 2. mongodb 를 활용한 모듈 개발하고 모듈 단위 테스트 하기 3. API 서버 모듈 개발하고 EventBus 사용하기 4. script 로 모듈 디플로이해서 실행하기 5. auto-deploy 로 쉽게 테스트 하기 6. cluster 설정하여 구성하기
AsynchronousModularityPolyglot
vert.x 의 특징 중 3가지만,
非同期(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
高効率(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
スケーラブル
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
Modularity
Modularity
ClassLoader
Main.class!library1.jar!library2.jar!library3.jar
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)
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...
http://vertx.io/
http://www.techempower.com/benchmarks/
URL Shortener 만들기
긴 URL 에 대한 Key
Server Verticle
Persister Worker Verticle
vert.x instance
EventBus
Starter Verticle
Server Verticle
Persister Worker Verticle
vert.x instance
EventBus
Starter Verticle
Deploy script (javascript)"- 필요한 Module 을 Deploy 해주는 역할"
- 서버 프로그램 로직은 없고, 설정값 셋팅과 모듈 실행을 명령하는 script
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 )
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
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. . . . . . “} . . . . .
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
EventBus
EventBus
sequence 로 short key 생성하기
encode(2147483647) -> cvuMLb
decode(“cvuMLb”) -> 2147483647
[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
준비
Spring Tool Suite™ http://spring.io/tools/sts
http://www.oracle.com/technetwork/java/javase/downloads/index.htmlJDK 7
http://www.mongodb.org/downloadsmongoDB
just in time programming
데모 말고, 라이브 코딩
아키텍트 가 뭐라고 생각하세요?