블로그 이미지
평범하게 살고 싶은 월급쟁이 기술적인 토론 환영합니다.같이 이야기 하고 싶으시면 부담 말고 연락주세요:이메일-bwcho75골뱅이지메일 닷컴. 조대협


Archive»


Node.js vs Vert.x 비교


간단하게 정리해본 Node.JS Vert.x의 장단점 비교,

두 서버 모두 C10K 문제를 해결 하기 위한 Single Thread 기반의 고성능 비동기 서버이다.

C10K 문제는 대용량 (10,000개이상의 동시 커넥션을)처리 하기 위한 문제로 전통적인 Tomcat등의 WAS에서는 이 문제를 해결할 수 없다 들어온 request는 무조건 큐잉이 되었다가 뒷단의 멀티 쓰레드에 의해서 작업이 처리되는데 이 멀티 쓰레드의 수 만큼만 동시 사용자를 처리할 수 있는 개념이다.

반대로 이 두 서버들은 일단 Connection이 연결되면, 연결된 socket들을 물고 있다가, Single Thread Event Loop가 고속으로 돌면서, socket에 들어온 메세지들을 처리하고 빠지는 구조이기 때문에 하나의 Thread임에도 불구하고, 동시에 여러 사용자를 처리할 수 있는 장점을 가지고 있다.

Vert.x Node.js에 영감을 받고 만들어진 서버이기 때문에, 그 특성이 매우 비슷하지만, 장단점이 극명하게 들어난다.

 

Node.js

Vert.x

내부 엔진 기반

Google Chrome V8 자바스크립트 엔진

libuv 기반의 비동기 처리 IO

Netty 기반의 NW IO

Hazel Case 기반 클러스터링

구현언어

C

Java

사용가능 언어

Javascript(애플리케이션), C (네이티브 모듈)

Python,JavaScript,Java,Groovy,Scala

외부 모듈

40,000개 이상

100개이하

클러스터링

한 하드웨어에 여러개 node.js를 띄울 수 있음. Node.js 인스턴스간 상태 Share 불가

한 하드웨어에 여러개의 vertx를 띄울 수 있음. node간의 상태 공유 메세징 가능
(HazelCast
기반)

에코시스템

매우 풍부. 레퍼런스,서적,교육,컨설팅 기관

공식 서적 2 (2권다 100페이지 이하))
컨설팅,교육 업체 없음

성능

열세
(
node 인스턴스당 CPU 코어 1개 이상 사용이 불가함)

우세
(JVM
기반으로 하나의 vert.x인스턴스에 여러개의 verticle 인스턴스를 띄워서 CPU 사용률을 극대화 할 수 있음)

한 마디로 정리하면, Vert.xHazelCast기반의 IMDG (In memory data grid)를 가지고 있어서, 클러스터링 기능이 좋으며, JVM기반으로, 여러 개의 Verticle을 동시에 띄어서 CPU 사용률을 극대화 함에 따라 더 높은 성능을 낼 수 있으며, 여러 프로그래밍 언어를 지원한다. 기술적으로는 Vert.x가 우세적인 면이 있으나, 아직 에코 시스템이 제대로 형성되지 않아서 기술 지원이나 자료를 구하기가 어려워, 기술 습득이나 운영 유지보수에서는 Node.JS가 우세이다.

 

본인은 구글 클라우드의 직원이며, 이 블로그에 있는 모든 글은 회사와 관계 없는 개인의 의견임을 알립니다.

댓글을 달아 주세요

  1. 2014.05.19 11:22  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  2. rnd마니아 2014.07.29 22:25 신고  댓글주소  수정/삭제  댓글쓰기

    좋은 글 감사합니다.
    그런데 nodejs의 단점 중 "한 node 인스턴스당 CPU 코어 1개 이상 사용이 불가함" 라는 말은 어떤 의미인지 잘 이해가 안가네요~^^;
    nodejs가 제공하는 built-in module중 cluster 모듈을 이용하면 multi-process로 동작 가능합니다

    • 조대협 2014.07.30 23:14 신고  댓글주소  수정/삭제

      감사합니다. 많은 분들이 같은 피드백을 주셨는데요.
      Vert.x는 구조상, 하나의 프로세스로도 멀티 코어를 사용할 수 있는 구조이고. (여러개 의 쓰레드를 띄워서)
      Node.js는 구조상 Single Thread이기 때문에, 하나의 node.js는 하나의 CPU 밖에 못 사용한다는 차이를 설명하기 위함입니다. 당연히 여러개의 Process를 띄우면 여러 CPU 사용이 가능합니다.

  3. 조대협 2014.07.30 23:15 신고  댓글주소  수정/삭제  댓글쓰기

    "node 인스턴스당 CPU 코어 1개" 인스턴스당 1개 입니다. :)