• Like
  • Save
Asynchronous architecture (Node.js & Vert.x)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Asynchronous architecture (Node.js & Vert.x)

  • 319 views
Published

@2013 Hanwha Devday …

@2013 Hanwha Devday
Introduce asynchronous architecture and Node.js, Vert.x

Published 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
319
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
2

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
  • 초창기 웹은 단순 정보를 제공해주는 정적페이지로 구성이 되어 있었음.
    이후에 사용자가 정보를 제공하고 전송할 수 있는 페이지로 변화하였고
    그 이후엔 사용자의 요청에 다이나믹하게 반응을 가져오고 보여주는 ajax 방식의 웹이 만들어 졌음. 지금은 가장 보편화된 방식.
    지금은 웹에서 사용자의 행동이 실시간으로 전송되고 응답되어지는 real time 방식으로 변해가고 있음.
  • Facebook 이나 twitter를 안쓰시는분?
  • 국내 그래프 : 2013년에 비해 2015년 무선 트래픽 2배증가
    이 그래프를 꼭 보지 않아도 알 수 있겠지만 인터넷을 사용하는 디바이스가 PC에서 벗어나 스마트폰을 비롯한 모바일 디바이스로 옮겨 가면서 트래픽량이 급격히 증가함.
  • PC만을 가지고 인터넷에 접속하던 시대를 넘어서 언제 어디서나( Anytime Anywhere) 스마트폰, 휴대용 태블릿을 비롯한 수많은 기기들을 통해서 사용자들이 인터넷에 접속하게됨.
    Real Time application으로 인해서 사용자의 needs가 높아지고 이에 따라서 트래픽이 증가함.
    제한된 서버가 한계에 도달함.
  • 이대로 방치해 두었다가는 서버가 취침모드에 들어간다던지 운명을 한다던지 엄청난 사태를 경험하게 되겠죠.
  • 이런 Real-time application, Instant Messaging, Twitter(SNS), Voice and video 와 같은 huge transaction의 환경 속에서 어떻게 해결해 나가야 하는가?
    http://www.kegel.com/c10k.html#top
    http://en.wikipedia.org/wiki/C10k_problem
  • 미국 취업 포탈 중 careercast.com 에서 The Best Jobs for Veterans in 2013 뉴스 포스팅 캡쳐.
  • 이 모든 솔루션의 공통된 단어는
    Fast, Scale, non blocking I/O, event-driven, asynchronous
  • 지금까지 알아본 문제를 개발자가 소프트웨어로 해결할 수 있는 방법이 이제 부터 설명할 비동기식 아키텍쳐입니다.
    비동기식 아키텍쳐는 비동기, 이벤트드리븐, non blocking I/O 이 세가지의 키워드로 설명할 수 있습니다.
    이에 대해서 자세히 알아보도록 하겠습니다.
  • 전통적인 프로그래밍
    하나의 작업이 마무리되기 전까지는 다음 처리를 계속할 수 없음
    I/O작업을 수행할 때 blocking 방식을 사용하는 프로그래밍 모델
    한 명의 사용자를 다른 사용자로부터 고립시킴
    컴퓨터 네트워크와 인터넷이 폭넓게 확산되면서 이와 같은 ‘One User, One Process’ 모델은 확장성을 제대로 충족하지 못함.
    많은 프로세스를 관리하는 일은 운영체제에 큰 부담이 됨.(메모리 및 컨텍스트 전환 비용 측면)
    작업의 성능은 일정 개수에 도달하면 느려지기 시작함.
  • 이미 사용되고 있고 검증되고 있는 해결책들이 이와 같이 있다.
    그렇다면 이들의 특징은 무엇인가?
    Established solutions
    - Nginx, Jetty Continuations(6버젼부터 Servlet3.0 구현하여 비동기API를 지원하고 있음) , Apach AWF = Infrastructure
    - EventMachine(Ruby), Tornado, Twisted(Python), Node.js(Javascript), Vert.x = Application Framworks
    EventMachine : fast, simple event-processing library for Ruby programs
    Tornado : Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed. By using non-blocking network I/O, Tornado can scale to tens of thousands of open connections, making it ideal for long polling, WebSockets, and other applications that require a long-lived connection to each user.
    Twisted : an event-driven networking engine written in Python and licensed under the open source
  • Nginx uses evented, non-blocking architecture, where as Apache uses multi-threaded architecture
  • 동기와 blocking I/O 모델을 지원하는 멀티쓰레드 서버들은 간단한 I/O실행 방식을 제공한다. 하지만 heavy load를 처리할때 멀티쓰레드 서버는 추가적으로 더 많은 쓰레드들을 사용하게 되는데 그 이유는 직접적으로 컨넥션과 쓰레드가 연결되어 있기 때문이다. 추가적인 쓰레드를 지원하는것은 쓰레드간의 컨텍스트 스위칭을 더 발생시켜 추가적인 메모리와 높은 CPU사용의 원인이 된다.
  • N Core system인 경우 N개의 Event loop가 실행되도록 Clustering을 실행할 수 있다. 각각의 core의 프로세스를 worker라고 한다.
  • 이 아키텍쳐는 앞단에서 이벤트루프(메인 쓰레드)를, 커널레벨에서 비동기I/O를 실행하는걸 이용한다. 쓰레드들과 연결들이 직접적으로 연관되지 않고, 이 모델은 오직 메인 이벤트 루프 쓰레드와 I/O를 실행할 극 소수의 쓰레드들을 필요로 한다.
    그 이유는 극 소수의 쓰레드들과 그로인한 적은 컨텍스트 스위칭 때문인데 이것은 적은 메모리뿐만 아니라 적은 CPU를 사용한다.
  • 1. Blocking Code
    I/O를 요청하고 결과를 받을 때까지 thread는 아무 일도 안하는 상태로 대기하고 응답이 돌아온 후 다음 줄의 코드가 실행됨.
    I/O를 동기 방식으로 사용하고 I/O의 수행이 완료될 때까지 thread가 blocking됨
  • 2. non-blocking Code
    I/O를 요청 후 응답을 기다리지 않고 다음 코드를 실행하며 응답이 있을시 callback function을 실행.
    DB요청과 File요청이 병렬로 처리됨. 응답이 먼저 돌아오는 순서에 따라서 callback function이 실행됨.
  • 이름 : Ryan Dahl
    경력 : Joyent Software engineer
    2009년 5월 첫 릴리즈.
    2013년 11월 21일 현재 Stable Version 0.10.22,
    Preview Version 0.11.8, 참고로 Node.js는 짝수버젼이 안정화 버젼으로 릴리즈됨.
    MIT 라이센스
  • - 웹서버를 거치지않고 Node.js에서 직접 데이터를 처리하므로 매우 가볍고, 처리 속도가 빠르다.
    - 메모리 소비량이 적어서 많은 양의 서비스 요청 처리에도 뛰어난 성능을 보여주는 차세대 웹 플랫폼.
    - Node.js는 다른 C나 C++, java(JSP), C#(.net)과 달리 웹에서 사용할 수 있는 언어이고 웹서버를 돌릴 수 있다.
    - 새로운 페이지 로딩 없이 실시간 소켓통신이 가능하다. (정적인 웹을 동적으로 만든다.)
    - 싱글스레드방식이며, 이벤트 (메세지) 기반으로 비동기식으로 처리한다 (기존 다른 언어들은 멀티스레드 방식 / 동기적 처리)
    Single Thread가 더 좋다! 원칙적으로 I/O 성능은 스레드의 수와 상관없이 동일하다.
    CPU내에 스레드가 몇 개있던, 근본적으로 타겟 장치로의 I/O 포트는 한 개뿐이다.
    따라서 여럿이 싸우는 것보다 싱글 스레드의 처리가 더 나오는 것은 당연하다.
    일반적으로 비동기 I/O 라고 하면 멀티스레드를 이야기하는 것이 아니다. CPU내의 스레드간의 이야기도 아니다. 이것은 CPU와 주변장치와의 관계를 말한다!
    CPU가 데이터를 주변장치에 전달하고, I/O 종료 될 때까지 대기하느냐 아님 주변장치에 시키고 CPU는 다른일을 하느냐의 관계이다.
    비동기 I/O 처리는 실시간 서비스의 제공이 아니면 사실 별로 필요없다.
    비동기 I/O API의 필요성은 싱글 스레드 프로그래밍을 더 편하게 해줄 것 같다고 한다?
  • 이름 : Timfox
    학력 : 학부 물리학 전공, 대학원 반도체 기술 과학
    경력 :
    첫 직장부터 프로그래머로 활동함.
    -T-Mobile 근무 시절에 7천만명 이상이 접속하는 모바일 인터넷 포탈을 운영할수 있는 플랫폼을 설계
    -Springsource에서 RabbitMQ 팀에서 일하면서 만들고 vert.x 프로젝트를 리딩함.
    -현재 Redhat에서 Vert.x 프로젝트를 리드하고 잇음.
    릴리즈 된지 2년정도 됨.
    현재 2.0.2-final 버젼이 릴리즈 된 상태임.
    Apache License version 2.0
  • -Polyglot : Vert.x는 Java로 만들어졌으나 사용하는데 Java를 필요로 하지 않는다. JVM기반의 언어인 Java, Groovy 뿐만아니라 Ruby, Python 심지어 JavaScript까지 사용이 가능하다.
    -모든 CPU Core를 사용할 수 있도록 multi thread 생성을 한다.
    -Vert.x는 one process DAEMON을 만드는 것만을 목적으로 하지 않고 Vert.x로 개발된 다양한 서버 프로그램들이 서로 커뮤케이션할 수 있게 한다. 이를 위해서 Vert.x는 Event Bus를 제공한다. 그로인해 Point to point, Pub/Sub 같은 MQ(Message Queue) 기능들을 사용할 수 있다.
    -Node.js는 자체적으로 multi thread, multi core를 지원하지 않는다. 하지만 cluster module과 같은 지원가능한 개발이 진행되고 있다. 하지만 vert.x는 multi-thread multi core를 지원한다. 각 Core당 Event-loop가 생성됨.
    -모든 IO처리를 Netty를 기반으로 한다. 하지만 Netty와 Vert.x가 같은 것은 아니다. Vert.x는 API와 기능을 제공하는 server framework이고 Netty에게서 독립적으로 동작하며 설계된 목적 자체가 다르다.
  • -Acceptor: A thread to accept a socket. One thread is created for one port.
    -Event Loops: (same with Run Loop) equals the number of cores. When an event occurs, it executes a corresponding handler. When execution is performed, it repeats reading another event.
    -Background: Used when Event Loop executes a handler and an additional thread is required. Users can specify the number of threads in vertx.backgroundPoolSize, an environmental variable. The default is 20. Using too many threads causes an increase in context switching costs, so be cautious.
    http://www.cubrid.org/blog/dev-platform/understanding-vertx-architecture-part-2/
  • Node.js 가 개발되어진 시간이 오래된 만큼 많은 module들이 만들어지고 있고 커뮤니티가 더 활성화 되어 있음.
    Vert.x는 공식적으로 등록되어진 module을 제외하고 github에 여러 개발자들의 module들이 올라오고 있음.
  • 트위터, 채팅앱과 같은 리얼타임 소셜 어플리케이션
    높은 퍼포먼스, 높은 입출력 처리 능력을 요구하는 TCP 어플리케이션.
    백앤드 로깅, 처리 어플리케이션
    어플리케이션 서버 앞단의 Rest-ful API기반의 웹서버
    Build a (soft) real-time social app like Twitter or a chat app.
    Build high-performance, high I/O, TCP apps like proxy servers, PaaS, databases, etc.
    Build backend logging and processing apps.
    Add a RESTful API-based web server in front of an application server.
  • 복잡한 CPU 연산을 필요로 하는 어플리케이션
    리얼타임이나 높은 퍼포먼스를 필요로 하지 않는 간단한 CRUD 형식의 어플리케이션 ( nodejs의 이점이 드러나지 못함)
    특정 라이브러리를 사용해야 하는 엔터프라이즈 어플리케이션 ( Java와 같은 언어처럼 다양한 라이브러리를 아직 제공하지 않고 있음)
  • If you should to handle a large number of clients in a high performance
    Environment? Asynchronous architecture helps you.
    If you want to do agile development, 짧은 반복주기의 개발을 원하냐?
    간단하지만 높은 퍼포먼스의 에코시스템을 원하나?
    갑작스런 트래픽에 서버가 죽어?
    I/O퍼포먼스가 안나?
    Callback 함수 형식의 비동기식 개발은 더이상 자바스크립트 개발자의 전유물이 아니다.

Transcript

  • 1. 고성능 / 고효율 어플리케이션을 위한 비동기 아키텍쳐 한화 S&C IT 선진화부문 기술혁신팀 유광종 HONE DevDay 2013 2013. 11. 21 Node.js & Vert.x (Asynchronous architecture for High performance applications)
  • 2. The Evolution of the Web ( 웹의 진 화 ) The problems currently facing ( 직면한 문 제 ) Asynchronous, non-blocking I/O, event-drivenTitle Introduce Node.js & Vert.x How to use it ( 적용점 ) Addressing the problem ( 해결책 ) Title Title Title Title Title
  • 3. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013The Evolution of the Web Real time Applicatio ns
  • 4. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Real time applications
  • 5. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Why? What’s the problem? 인터넷을 통한 트래픽의 폭발적 증가
  • 6. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights Huge number of clients UNIX 계열의 서버에 아주 많은 수의 클라이언트 (10K) 가 동시에 접속하 여 소켓을 열게 된다면 OS 에서 제공하는 I/O 처리 방식의 문제 때문 에 프로세스가 제대로 처리하지 못한다는 개념 UNIX 계열의 서버에 아주 많은 수의 클라이언트 (10K) 가 동시에 접속하 여 소켓을 열게 된다면 OS 에서 제공하는 I/O 처리 방식의 문제 때문 에 프로세스가 제대로 처리하지 못한다는 개념 C10K Problem http://en.wikipedia.org/wiki/C10k_problem
  • 7. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Server is Down
  • 8. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights Hardware limitations How do you handle 10,000+ concurrent connections? Without grinding to a halt?
  • 9. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Solution is the Money!?
  • 10. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights The Power of Software engineer! http://www.careercast.com/jobs-rated/best-veterans-jobs-201 I don’t need to add server. Just I believe myself and I need my friend Google.
  • 11. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Keyword of Solutions
  • 12. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights Addressing to Problem
  • 13. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights Traditional I/O model - Multi threaded HONE DevDay 2013 TCP/IP connection Thread 1 1 • Multi threaded • Blocking I/O (Synchronous I/O) application kernel read() no datagram ready system call datagram ready copy datagram copy complete wait for data copy data from kernel to userdeliver signal signal handler process datagram process waiting
  • 14. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Established Solutions They implemented Asynchronous architecture~!
  • 15. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Multi thread vs Asynchronous Benchmark(1) Saving in I/O cost 똑같은 동시접속에 초당 3 배의 요청처리똑같은 동시접속에 초당 3 배의 요청처리
  • 16. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Multi thread vs Asynchronous Benchmark(2) Saving in Memory 똑같은 동시접속에 메모리 사용량이 13 분의 1똑같은 동시접속에 메모리 사용량이 13 분의 1
  • 17. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013From Native threads To Event driven Native threads Event driven http://www.yesodweb.com/blog/2012/11/warp-posa
  • 18. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Worker – Asynchronous multi core N event-driven processes to utilize N cores http://www.yesodweb.com/blog/2012/11/warp-posa
  • 19. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Event Loop(Reactor pattern) Event-Loop (single threaded) Callback function Resource Event Queue Clients Request Response Input Output
  • 20. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights Asynchronous I/O Model HONE DevDay 2013 application kernel asynchronous read() no datagram ready system call return datagram ready copy datagram copy complete wait for data copy data from kernel to user deliver signal specified in async read() signal handler process datagram process continues executing
  • 21. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Blocking I/O blocking Code • I/O 를 요청하고 결과를 받을 때까지 thread 는 아무 일도 안하는 상태로 대기하고 응답이 돌아온 후 다음 줄의 코드가 실행됨 . • I/O 를 동기 방식으로 사용하고 I/O 의 수행이 완료될 때까지 thread 가 blocking 됨
  • 22. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013non blocking I/O non-blocking Code • I/O 를 요청 후 응답을 기다리지 않고 다음 코드를 실행 • DB 요청과 File 요청이 병렬로 처리 • 응답이 먼저 돌아오는 순서에 따라서 callback function 이 실행
  • 23. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Node.js & Vert.x
  • 24. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Introduce Node.js
  • 25. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Node.js Architecture & Key features Node standard library Node bindings V8 engine Thread pool (libeio) Event loop (libev) JavaScript C Architecture Single Thread V8 JavaScript Engine (Monoglot) Event loop Asynchronous NPM(Node Packaged Modules) Key features
  • 26. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Introduce Vert.x
  • 27. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Vert.x Architecture & Key features Architecture Based on JVM Polyglot Powerful module system Distributed Event Bus Key features Host Verticle Verticle Verticle Verticle Vert.x Instance JVM Verticle Verticle Verticle Verticle Vert.x Instance JVM Event Bus Java, JavaScript, Python, Ruby, Scala etc. Thread pool management
  • 28. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Vert.x Thread Pool
  • 29. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights Modules Node.js ( https://npmjs.org ) Vert.x ( http://modulereg.vertx.io/ ) 48,004 86
  • 30. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights Node.js VS Vert.x (1) Comparison of Performance When Only 200/OK Response Has Been Returned. Requests/sec http://www.cubrid.org/blog/dev-platform/inside-vertx-comparison-with-nodejs/
  • 31. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights Node.js VS Vert.x (2) Comparison of Performance When a 72-byte Static HTML File is Returned. Requests/sec http://www.cubrid.org/blog/dev-platform/inside-vertx-comparison-with-nodejs/
  • 32. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013When to use it High performance High I/O TCP apps Paas Proxy servers databases Real-time social application Web development ecosystem RESTful
  • 33. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights Enterprise apps that might need some specific librariesEnterprise apps that might need some specific libraries HONE DevDay 2013When NOT to use it Mission-critical (hard) real-time apps like heart monitoring apps or those that are CPU-intensive. Mission-critical (hard) real-time apps like heart monitoring apps or those that are CPU-intensive. For simple CRUD apps that don’t have any real-time or high-performance needs For simple CRUD apps that don’t have any real-time or high-performance needs
  • 34. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights HONE DevDay 2013Summary Web 2.0 and the massive growth of mobile clients changed the way we have to think about application architectures. Founding member of Java Champions - Eberhard Wolff Pay attention to Asynchronous architecture! Try to use Asynchronous framework or platform like Node.js and Vert.x etc. Enjoy Asynchronous programming with your own languages! Be a Happy Developer ; )
  • 35. - -Copyright ⓒ 2013 HANWHA S&C CO.LTD., All rights Thank you :) twitter.com/ryoostar www.facebook.com/ryoostar shinystar.kr/ ryoostar@gmail.com @Yu Kwangjong