Vert.x 가 좋다! Vert.x is a poluglot, non-blocking, event-driven Application platform that Runs on The JVM.

Slides:



Advertisements
Similar presentations
OpusCollege and Spring-DM. OSGi based web applications – three strategies OSGi container embedded in another container: OSGi Bridge Server (OBS)  e.g.
Advertisements

BEA WebLogic version Practice 장성봉
Ch 7. Spring EL (Spring Framework 3.0 M3) 백기선
Problem MRO 웹 서버에서 NAS 의 공유 폴더를 SMB protocol 을 사용하여 z: 드라이브로 mount 하여 weblogic 서비스 시, 성능 저하 발생 ( 11~15 sec ) MRO 웹 서버 Windows 2003 R2 Enterprise x64 NFS.
1 Lab Session-8 CSIT-121 Fall 2003 w Call by Reference w Lab Exercise 1 w Lab Exercise for Demo w Practice Problems.
1 Basics of Linux On linux machine: Login at your home directory Open a “shell” or “terminal” or “xterm” workspace (4) On windows machine Intall linux.
강성재 Developer Evangelist Microsoft Korea D&PE 개발자 관점에서 바라본 SQL Server 2005 (2)
GWT-EXT 로 Web application 개발하기
Using Ant to build J2EE Applications Kumar
Computer System Architecture Dept. of Info. Of Computer Chap. 6 Programming the Basic Computer 6-1 Chap. 6 Programming the Basic Computer n 6-1 Introduction.
SAP Tuning 실무 교육
Pintos overview Operating System Project kit 금오공과대학교.
TinyOS 1/2 Onsystech Sangjae Han.
Oracle webcache Installation Guide - 기본 Setting & Tunning 포함 – Version : Webcache StandAlone 전자계산소
SOAP 실전예제 Internet Computing KUT Youn-Hee Han.
Codec,battery,powermanager 커널 드라이버
AI project components: Facter and Hiera
SALSA: Language and Architecture for Widely Distributed Actor Systems. Carlos Varela, Abe Stephens, Department of.
Events and Timers. Event handlers ScratchC#/VS 2 Script == event handler.
Business Computing Lab Ahn, Younghoe WAF overview and Study guide WAF overview and Study guide.
COMP 321 Week 7. Overview HTML and HTTP Basics Dynamic Web Content ServletsMVC Tomcat in Eclipse Demonstration Lab 7-1 Introduction.
Node.js - What is Node.js? -
Chapter 06 데이터베이스 연동 지원 작성자 : 장은호 소속팀 : 네이버메인개발 작성년월일 :
1 Linux Command. Advanced Compiler Laboratory2 Simple linux cmds ls List information about FILEs, by default the current directory. pwd Print Working.
12 1 Embedded Software Lab. OS 실습 Embedded Software Lab. 박대준, 박은수 Lecture 3. Kernel fusing, printk.
Many-SC 아키텍처 기반 OpenCL 프레임워크상에서의 응용프로그램 구현 및 최적화
Spring/2002 Distributed Software Engineering C:\unocourses\4350\slides\DefiningThreads 1 RMI.
AODVjr TinyOS Implementation
User-defined Functions CSED421: Database Systems Labs.
Simulink 강의 노트 작성 일자 : 2007, 01, 30 저 자 : 임 종수. 강의 순서 -- Section Simulink 의 특징과 install 시 주의사항. 2. simple simulink model 개발. 3. simulink 의 계산 방법.
ARToolKit Settings The department of Computer Engineering Shin ho hwan.
C By Example 1 The assumption is that you know Java and need to extend that knowledge so you can program in C. 1. Hello world 2. declarations 3. pass by.
9 주 실습강의 XML Visualization(1) 학기, 소프트웨어 설계 및 실험 ( Ⅰ )
LOGO System Call. Introduction System call is the mechanism used by an application program to request service from the OS. Users use it to communicate.
영상 획득 영상 저장 카메라 파라메터 커스텀 이미지
Eclipse Project. Installing Visit to download a copy for your home computerhttp:// –Get Release version 3.0 (or.
Enterprise Java v090125Dev Env Overview1 Enterprise Java ( ) Development Environment Overview.
Gradle and Eclipse RCP Ned Twigg
IRM Enforcement of Java stack Inspection Pslab YunKyung Kim.
5.Index Construction 인공지능연구실. 2 목차 Memory-based inversion Sort-based inversion Exploiting index compression Compressed in-memory inversion Comparison.
R-BOX. step1. TIB_rv_7.5.3_win_x86 설 치 step2. RBOX.exe 실행.
(Icommand & Processing). NXT The NXT is the brain of a MINDSTORMS® robot. It's an intelligent, computer- controlled LEGO® brick that lets a MINDSTORMS.
introductory lecture on java programming
Ez-java(tm) platform 박 준 영 단말기술팀, LGTeleCom.
목차 한국기술교육대학교 강사: 김 영 준 ㈜헬로앱스 1일차 아두이노 제어 실습
CPRG 215 Introduction to Object-Oriented Programming with Java Module 1-Introduction to Java Topic 1.3 Write Your First Java Program Produced by Harvey.
Memory & Storage Architecture Seoul National University Python Installation In PC (Window, Mac OS) Byoungjun Kim Ansu
Morpheus Server 2.0 정기교육 Version 목 차 Morpheus Server 2.0 SpringFramework API 개발 Morpheus Admin 실 습.
Company Logo Kernel Debugging 발표자 : 장명우.
C 프로그래밍 개발 도구. 컴파일러 gnu c compiler 컴파일 gcc sample.c 실행 a.out 실행 파일 지정 컴파일 gcc –o sample sample.c 실행 sample.
NAM S.B MDLAB. Electronic Engineering, KNU 1 Beaglebone Black System.
Status Meeting KAIST Software Architecture Lab 2014 년 06 월 12 일.
박주연 고객기술지원부 한국마이크로소프트 ( 유 ). SQL Server 운영 경험 SQL Server 를 이용한 개발 경험 SQL Server 의 구조 / 동작 방식 개념 및 소 개 수준 선수 지식 불 필요 100 중간 수준 100 에 더하여 기술적 세부 사항 설명 200.
J2ME Programming. Java2 Micro edition Introduction 년 5 월 26 일 CLDC, MIDP 라이브러리 Reference :
XNAT 1.7: Getting Started 6 June, Introduction In this presentation we’ll discuss:  Features and functions in XNAT 1.7  Requirements  Installing.
Practical Exercise: Bastei
UNIX To do work for the class, you will be using the Unix operating system. Once connected to the system, you will be presented with a login screen. Once.
NodeJS and MEAN cs6320.
Packaging a Structural Biology Application – imod / 3dmod
NodeJS and MEAN Prof. L. Grewe.
CS399 New Beginnings Jonathan Walpole.
Event driven Microservices with VERT.X & Kubernetes
Zlatko Stamatov JavaSkop 13 December 2015
Multi-module programming in C
autodiscoverable microservices with vertx3
Tutorial Unix Command & Makefile CIS 5027
Cordova & Cordova Plugin Installation and Management
Jonathan Walpole Computer Science Portland State University
Constructors, GUI’s(Using Swing) and ActionListner
C By Example The assumption is that you know Java and need to extend that knowledge so you can program in C. 1. Hello world 2. declarations 3. pass.
Presentation transcript:

Vert.x 가 좋다! Vert.x is a poluglot, non-blocking, event-driven Application platform that Runs on The JVM.

입문 Vert.x? Vert.x is a polyglot, non-blocking, event-driven Application platform that Runs on The JVM. Vert.x 는 Node.js 로 부터 많은 영향을 받음. Event-based 프로그래밍 모델을 제공하는 프레임웍!!!

철학 Polyglot Super Simple Concurrency model Event Bus Module System & Public Module Repository

아키텍처 Vert.x 애플리케이션은 Verticle 또는 Module 의 조합으로 이루어지며 이들 간의 통신은 Event Bus를 사용한다. Vert.x 아키텍처

용어들… Verticle vert.x 인스턴스 동시성(concurrency) Event-based Programming Model Event Loops Message Passing Shared data vert.x Core

Node.js 와의 성능 비교 200 OK 응답만 주었을 때의 성능 비교 72바이트 크기의 정적 파일 제공 성능 비교

개인적으로 좋은 부분 Event-based 프로그래밍 모델을 제공하 는 프레임웍. 멀티코어 리소스를 쉼게 사용. Event Bus. Module System. Polyglot.

개발자 커뮤니티 자료를 얻기 위한 실질적인 유일한 곳!! 주요 답변자 timfox – RabbitMQ 개발자 normanmaurer – Netty 개발자 Please don’t use StackOverflow to ask Vert.x questions – ask them here!

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); } }

주의 사항 코드의 중첩이 깊어지게 하지 말자 차단 코드를 작성하지 말자 상태전이에 주의 하자

개발 환경 구축 목차 환경설정 설치 셋팅 gradle project template auto redeploy remote debugging

환경설정 JDK 1.7 이상이 필요. Eclipse

설치 http://vertx.io/downloads.html 홈페이지에서 최신 버전을 다운로드 받 는다. 적당한 경로에 압축을 해제한다. 환경변수에 경로를 설정한다. vertx 명령이 실행되는지 확인한다. 앞에 작성한 Hello World 코드를 작성하 여 실행해 본다. http://vertx.io/downloads.html

설치 jee1@~ $ cat .bashrc PATH=“$PATH”:/home/jee1/vert.x/bin 홈페이지에서 최신 버전을 다운로드 받 는다. 적당한 경로에 압축을 해제한다. 환경변수에 경로를 설정한다. vertx 명령이 실행되는지 확인한다. 앞에 작성한 Hello World 코드를 작성하 여 실행해 본다. jee1@~ $ cat .bashrc PATH=“$PATH”:/home/jee1/vert.x/bin jee1@~ $ source .bashrc

설치 jee1@~ $ vertx usage 문구가 표시되면 설치 완료. 홈페이지에서 최신 버전을 다운로드 받 는다. 적당한 경로에 압축을 해제한다. 환경변수에 경로를 설정한다. vertx 명령이 실행되는지 확인한다. 앞에 작성한 Hello World 코드를 작성하 여 실행해 본다. jee1@~ $ vertx usage 문구가 표시되면 설치 완료.

설치 jee1@work $ vertx run HelloWorldVerticle.java Verticle start. 홈페이지에서 최신 버전을 다운로드 받 는다. 적당한 경로에 압축을 해제한다. 환경변수에 경로를 설정한다. vertx 명령이 실행되는지 확인한다. 앞에 작성한 Hello World 코드를 작성 하여 실행해 본다. jee1@work $ vertx run HelloWorldVerticle.java Verticle start. 이후 브라우저로 8080 포트에 접속하면 Hello World! 문구를 확인할 수 있음.

셋팅 # Put the log in the system temporary directory 기본 설정은 로그가 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.

gradle project template 간단한 프로토타입은 Verticle 로 개발가능. 그러나, Module 로 개발을 권장. Module을 개발하기 위한 방법 Maven 을 이용한 방법 Gradle 을 이용한 방법 Gradle 는 Groovy의 빌드 도구. 별도 설치 필요 없음. Gradle 를 이용한 방법 선호 특별한 이유는 없으나 팀 폭스가 그래들을 사용해서 예제가 Gradle 로 되어 있음. 그래서 너도 나도 Gradle…

gradle project template git clone 하여 eclipse로 가져오기 mod.json 수정 HelloWorldVerticle 을 Module로 이동 Module 실행

gradle project template git clone 하여 eclipse로 가져오기 mod.json 수정 HelloWorldVerticle 을 Module로 이동 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

gradle project template git clone 하여 eclipse로 가져오기 mod.json 수정 HelloWorldVerticle 을 Module로 이동 Module 실행 jee1@my-vertx-modyle $ vi ./src/main/resources/mod.json “main”:“com.mycompany.myproject.PingVerticle”

gradle project template git clone 하여 eclipse로 가져오기 mod.json 수정 HelloWorldVerticle 을 Module로 이동 Module 실행 jee1@my-vertx-modyle $ vi ./src/main/resources/mod.json // “main”:“com.mycompany.myproject.PingVerticle” “main”:”HelloworldVerticle” jee1@my-vertx-modyle $ ./gradlew runModEclipse 두가지 문제

gradle project template git clone 하여 eclipse로 가져오기 mod.json 수정 HelloWorldVerticle 을 Module로 이동 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

auto redeploy “main”:“HelloWorldVerticle”, “auto-redeploy”:true, mod.json 에 정의 기본값은 false “main”:“HelloWorldVerticle”, “auto-redeploy”:true,

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,suspend=n”

DEMO 소스코드 다운받을 곳:

Event Loops 와 Verticle 인스턴스 목차 Vert.x ’s Threads Event Loops Verticle Instances Event Loop & Verticle Instances Performance Test

Vert.x ‘s Threads main thread 1개 vert.x-eventloop-thread 가 4개 vert.x-worker-thread 가 20개 eventloop-thread 가 4개인 점이 node.js 와 다름. node.js 는 1개

Event Loops org.vertx.java.core.impl.VertxExecutorFactory.java 왜 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

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

Event Loop & Verticle Instances Event Loops 는 코어수에 따라 쓰레드 수를 자동 결정 Verticle Instances 는 –instances 옵션을 지정해서 인스턴스 수 변경 가능 1개의 Verticle 인스턴스가 생성될 때 Event Loops 에서 하나의 eventloop- thread 가 할당 vertx-eventloop-thread-0 Verticle-0 Verticle-4 Verticle-8 vertx-eventloop-thread-1 Verticle-1 Verticle-5 Verticle-9 vertx-eventloop-thread-2 Verticle-2 Verticle-6 vertx-eventloop-thread-3 Verticle-3 Verticle-7

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/httpper f) 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

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

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

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

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

Performance Test 인스턴스가 1인 경우는 약 120K count/sec

참고사이트 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 참고사이트

감사합니다. 슬라이드 쇼 모드에서 PowerPoint 시작 센터로 이동하려면 화살표를 클릭하세요.