Vert.x 세미나 이지원_배포용

  • 4,059 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,059
On Slideshare
0
From Embeds
0
Number of Embeds
5

Actions

Shares
Downloads
70
Comments
0
Likes
5

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Vert.x 가 좋다! Vert.x is a poluglot, non-blocking, event-driven Application platform that Runs on The JVM.
  • 2. 입문 Vert.x? Vert.x is a polyglot, non-blocking, event-driven Application platform that Runs on The JVM.
  • 3. 철학 Polyglot Super Simple Concurrency model Event Bus Module System & Public Module Repository
  • 4. 아키텍처 Vert.x 애플리케이션은 Verticle 또는 Module 의 조합으로 이루어지며 이들 간의 통신은 Event Bus를 사용한다. Vert.x 아키텍처
  • 5. 용어들… Verticle vert.x 인스턴스 동시성(concurrency) Event-based Programming Model Event Loops Message Passing Shared data vert.x Core
  • 6. Node.js 와의 성능 비교 200 OK 응답만 주었을 때의 성능 비교 72바이트 크기의 정적 파일 제공 성능 비교
  • 7. 개인적으로 좋은 부분 1. Event-based 프로그래밍 모델을 제공하 는 프레임웍. 2. 멀티코어 리소스를 쉼게 사용. 3. Event Bus. 4. Module System. 5. Polyglot.
  • 8. 개발자 커뮤니티 자료를 얻기 위한 실질적인 유일한 곳!! 주요 답변자 • timfox – RabbitMQ 개발자 • normanmaurer – Netty 개발자 Please don’t use StackOverflow to ask Vert.x questions – ask them here!
  • 9. Hello World public class MainVerticle extends Verticle { public void start() { container.logger().info(“MainVerticle start”); vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() { public void handle(HttpServerRequest req) { req.response().headers().set(“Content-Type”, “text/plain”); req.response().end(“Hello World!”); } }).listen(8080); } }
  • 10. 주의 사항 1. 코드의 중첩이 깊어지게 하지 말자 2. 차단 코드를 작성하지 말자 3. 상태전이에 주의 하자
  • 11. 개발 환경 구축 목차 1. 환경설정 2. 설치 3. 셋팅 4. gradle project template 5. auto redeploy 6. remote debugging
  • 12. 환경설정 • JDK 1.7 이상이 필요. • Eclipse
  • 13. 설치 1. 홈페이지에서 최신 버전을 다운로드 받 는다. 2. 적당한 경로에 압축을 해제한다. 3. 환경변수에 경로를 설정한다. 4. vertx 명령이 실행되는지 확인한다. 5. 앞에 작성한 Hello World 코드를 작성하 여 실행해 본다. http://vertx.io/downloads.html
  • 14. 설치 1. 홈페이지에서 최신 버전을 다운로드 받 는다. 2. 적당한 경로에 압축을 해제한다. 3. 환경변수에 경로를 설정한다. 4. vertx 명령이 실행되는지 확인한다. 5. 앞에 작성한 Hello World 코드를 작성하 여 실행해 본다. jee1@~ $ cat .bashrc PATH=“$PATH”:/home/jee1/vert.x/bin jee1@~ $ source .bashrc
  • 15. 설치 1. 홈페이지에서 최신 버전을 다운로드 받 는다. 2. 적당한 경로에 압축을 해제한다. 3. 환경변수에 경로를 설정한다. 4. vertx 명령이 실행되는지 확인한다. 5. 앞에 작성한 Hello World 코드를 작성하 여 실행해 본다. jee1@~ $ vertx usage 문구가 표시되면 설치 완료.
  • 16. 설치 1. 홈페이지에서 최신 버전을 다운로드 받 는다. 2. 적당한 경로에 압축을 해제한다. 3. 환경변수에 경로를 설정한다. 4. vertx 명령이 실행되는지 확인한다. 5. 앞에 작성한 Hello World 코드를 작성하 여 실행해 본다. jee1@work $ vertx run HelloWorldVerticle.java Verticle start. 이후 브라우저로 8080 포트에 접속하면 Hello World! 문구를 확인할 수 있음.
  • 17. 셋팅 기본 설정은 로그가 OS의 temp 디렉토리에 vertx.log 로 생성. 설정파일 위치 vert.x/conf/logging.properties # Put the log in the system temporary directory # java.util.logging.FileHandler.pattern = %t/vertx.log java.uril.logging.FileHandler.pattern = /home/jee1/vertx/log/vertx.log jee1@~ $ cat vertx/log/vertx.log [vert.x-eventloop-thread-2] 03:06:37,789 INFO [null- HelloWorldVerticle.java-704507910] Verticle start.
  • 18. gradle project template 간단한 프로토타입은 Verticle 로 개발가능. 그러나, Module 로 개발을 권장. Module을 개발하기 위한 방법 • Maven 을 이용한 방법 • Gradle 을 이용한 방법 Gradle 는 Groovy의 빌드 도구. 별도 설치 필요 없음. Gradle 를 이용한 방법 선호 특별한 이유는 없으나 팀 폭스가 그래들을 사용해서 예제가 Gradle 로 되어 있음. 그래서 너도 나도 Gradle…
  • 19. gradle project template 1. git clone 하여 eclipse로 가져오기 2. mod.json 수정 3. HelloWorldVerticle 을 Module로 이동 4. Module 실행
  • 20. gradle project template 1. git clone 하여 eclipse로 가져오기 2. mod.json 수정 3. HelloWorldVerticle 을 Module로 이동 4. Module 실행 jee1@work $ git clone https://github.com/vert-x/vertx- gradle-template.git my-vertx-module jee1@work $ cd my-vertx-module/ jee1@my-vertx-modyle $ git remote rm origin jee1@my-vertx-modyle $ ./gradlew test jee1@my-vertx-modyle $ ./gradlew eclipse
  • 21. gradle project template 1. git clone 하여 eclipse로 가져오기 2. mod.json 수정 3. HelloWorldVerticle 을 Module로 이동 4. Module 실행 jee1@my-vertx-modyle $ vi ./src/main/resources/mod.json “main”:“com.mycompany.myproject.PingVerticle”
  • 22. gradle project template 1. git clone 하여 eclipse로 가져오기 2. mod.json 수정 3. HelloWorldVerticle 을 Module로 이동 4. Module 실행 jee1@my-vertx-modyle $ vi ./src/main/resources/mod.json // “main”:“com.mycompany.myproject.PingVerticle” “main”:”HelloworldVerticle” jee1@my-vertx-modyle $ ./gradlew runModEclipse 두가지 문제
  • 23. gradle project template 1. git clone 하여 eclipse로 가져오기 2. mod.json 수정 3. HelloWorldVerticle 을 Module로 이동 4. Module 실행 jee1@my-vertx-module $ vertx runmod com.mycompany~my-module~0.0.1 –cp bin jee1@my-vertx-module $ vi gradle/vertx.gradle task copyModJson( type:Copy, dependsOn: 'copyMod' , description: 'Copy the mod.json into the local mods directory for runmod auto-redeploy' ) { file( "mods/$moduleName" ).mkdirs() from "build/mods/$moduleName/mod.json” into "mods/$moduleName“ } jee1@my-vertx-module $ ./gradlew copyModJson
  • 24. auto redeploy mod.json 에 정의 기본값은 false “main”:“HelloWorldVerticle”, “auto-redeploy”:true,
  • 25. remote debugging vert.x/bin/vertx 의 시작부분에 있는 JVM_OPTS 를 수정 Eclipse의 remote debugging 에서 설정한 포 트(8000) 로 연결하면 remote debugging 사 용 가능. #JVM_OPTS="-XX:+CMSClassUnloadingEnabled -XX:- UseGCOverheadLimit“ #JVM_OPTS="“ JVM_OPTS="-Xdebug - Xrunjdwp:transport=dt_socket,address=8000,server=y,suspe nd=n”
  • 26. DEMO 소스코드 다운받을 곳:
  • 27. Event Loops 와 Verticle 인스턴스 목차 1. Vert.x ’s Threads 2. Event Loops 3. Verticle Instances 4. Event Loop & Verticle Instances 5. Performance Test
  • 28. Vert.x ‘s Threads main thread 1개 vert.x-eventloop-thread 가 4개 vert.x-worker-thread 가 20개
  • 29. Event Loops 왜 eventloop-thread 가 4개인가? org.vertx.java.core.impl.VertxExecutorFactory.java public static EventLoopGroup eventLoopGroup(String poolName) { int poolSize = Integer.getInteger( "vertx.pool.eventloop.size" , Runtime.getRuntime().availableProcessors()); return new NioEventLoopGroup(poolSize, new VertxThreadFactory(poolName)); } jee1@my-vertx-module $ grep –c processor /proc/cpuinfo 4
  • 30. Verticle Instances -instances 옵션을 사용하여 인스턴스를 늘 릴수 있음. Verticle 생성시 EventLoopGroup에서 하나 의 eventloop_thread를 할당하고 Verticle을 맵핑.  동기화등의 고민없이 쉽게 작성가 능. jee1@my-vertx-module $ vertx runmod com.mycompany~my-module~0.0.1 –cp bin –instances 10 org.vertx.java.platform.impl.DefaultPlatformManager.java org.vertx.java.core.impl.DefaultContext.java org.vertx.java.core.impl.DefaultVertx.java
  • 31. Event Loop & Verticle Instances • Event Loops 는 코어수에 따라 쓰레드 수 를 자동 결정 • Verticle Instances 는 –instances 옵션을 지정해서 인스턴스 수 변경 가능 • 1개의 Verticle 인스턴스가 생성될 때 Event Loops 에서 하나의 eventloop- thread 가 할당 1. vertx-eventloop-thread-0 • Verticle-0 • Verticle-4 • Verticle-8 2. vertx-eventloop-thread-1 • Verticle-1 • Verticle-5 • Verticle-9 3. vertx-eventloop-thread-2 • Verticle-2 • Verticle-6 4. vertx-eventloop-thread-3 • Verticle-3 • Verticle-7
  • 32. Performance Test 테스트한 환경에서의 eventloop-thread 는 4 Verticle의 인스턴스 수를 1,2,4,8 로 변화시 켜 테스트 진행. Vertx 예제에 있는 http performance example 사용하여 테스트 진행. (https://github.com/vert-x/vertx- examples/tree/master/src/raw/java/httpperf) jee1@my-vertx-module $ vertx runmod com.mycompany~my-module~0.0.1 –cp bin (–instances 2/4/8) jee1@java $ vertx run perf / RateCounter.java –cluster Starting clustering… No Cluster-host specified so using address 10.0.1.6 jee1@java $ vertx run httpperf / RerfClient.java –instances 4 –cluster Starting clustering… No Cluster-host specified so using address 10.0.1.6
  • 33. Performance Test 인스턴스 수 1 71968 Rate : count / sec : 124666.66666666667 Average rate : 120609.15962650067 74968 Rate : count / sec : 124666.66666666667 Average rate : 120771.52918578594 77968 Rate : count / sec : 123333.33333333333 Average rate : 120870.10055407346 80967 Rate : count / sec : 125375.12504168056 Average rate : 121036.96567737473 83967 Rate : count / sec : 123333.33333333333 Average rate : 121119.01104005145 86967 Rate : count / sec : 123333.33333333333 Average rate : 121195.39595478745 89967 Rate : count / sec : 126000.0 Average rate : 121355.60816743918 92967 Rate : count / sec : 126000.0 Average rate : 121505.48043929566 95968 Rate : count / sec : 123958.68043985339 Average rate : 121582.19406468823 98968 Rate : count / sec : 12533​​3.33333333333 Average rate : 121695.9017056018
  • 34. Performance Test 인스턴스 수 2 72824 Rate : count / sec : 179393.13104368123 Average rate : 168241.23915192793 75825 Rate : count / sec : 176607.79740086637 Average rate : 168572.37059017475 78825 Rate : count / sec : 178666.66666666666 Average rate : 168956.5493​​1810973 81825 Rate : count / sec : 176000.0 Average rate : 169214.78765658417 84825 Rate : count / sec : 178000.0 Average rate : 169525.49366342468 87825 Rate : count / sec : 172000.0 Average rate : 169610.01992598918 90825 Rate : count / sec : 171333.33333333334 Average rate : 169666.94192127718 93825 Rate : count / sec : 175333.33333333334 Average rate : 169848.12150279776 96825 Rate : count / sec : 178000.0 Average rate : 170100.69713400464 99825 Rate : count / sec : 176666.66666666666 Average rate : 170298.02153769095
  • 35. Performance Test 인스턴스 수 4 72069 Rate: count/sec: 189270.24325224926 Average rate: 173805.6584661921 75068 Rate: count/sec: 190730.24341447148 Average rate: 174481.8031651303 78068 Rate: count/sec: 190000.0 Average rate: 175078.13700876158 81068 Rate: count/sec: 189333.33333333334 Average rate: 175605.66438052006 84069 Rate: count/sec: 191936.02132622458 Average rate: 176188.60697760174 87068 Rate: count/sec: 190063.3544514838 Average rate: 176666.51352965497 90068 Rate: count/sec: 188666.66666666666 Average rate: 177066.21663631924 93069 Rate: count/sec: 193268.91036321226 Average rate: 177588.6707711483 96068 Rate: count/sec: 193397.79926642214 Average rate: 178082.19178082192 99068 Rate: count/sec: 192666.66666666666 Average rate: 178523.84220939153
  • 36. Performance Test 인스턴스 수 8 70314 Rate : count / sec : 185333.33333333334 Average rate : 161646.32932275222 73315 Rate : count / sec : 186604.4651782739 Average rate : 162667.93971220078 76314 Rate : count / sec : 186728.90963654552 Average rate : 163613.4916267002 79313 Rate : count / sec : 187395.79859953318 Average rate : 164512.7532686949 82314 Rate : count / sec : 184605.1316227924 Average rate : 165245.28026824113 85313 Rate : count / sec : 186728.90963654552 Average rate : 166000.492304807 88314 Rate : count / sec : 186604.4651782739 Average rate : 166700.63636569513 91315 Rate : count / sec : 177940.68643785405 Average rate : 167070.0323057548 94314 Rate : count / sec : 179393.13104368123 Average rate : 167461.882647327 97314 Rate : count / sec : 178666.66666666666 Average rate : 167807.3041905584
  • 37. Performance Test - 인스턴스가 1인 경우는 약 120K count/sec - 인스턴스가 2인 경우는 약 170K count/sec - 인스턴스가 4인 경우는 약 190K count/sec - 인스턴스가 8인 경우는 약 180K count/sec
  • 38. 참고사이트 • http://vertx.io • http://helloworld.naver.com/helloworld/163784 • http://www.infoq.com/jp/news/2013/05/high-volume-vertx • http://vertxproject.wordpress.com/2013/07/17/vert-x-2-0-0-final-is- released/ • http://m.javaworld.com/javaworld/jw-07-2013/130730-osjp- enterprise-messaging-and-integration-with- vertx.html?source=IFWNLE_nlt_jw_2013-07-30 • http://www.infoq.com/jp/news/2013/08/tim_fox_vertx_2
  • 39. 감사합니다.