Skip to content

네티란

박원영 edited this page Jul 27, 2019 · 3 revisions

네티란?

Netty는 비동기 이벤트 기반 네트워크 응용 프로그램 프레임워크입니다. 유지 보수가 가능한 고성능 프로토콜 서버 및 클라이언트를 신속하게 개발할 수 있습니다. - 네티 공식사이트 소개글 -

Netty Architecture

Netty는 프로토콜 서버 및 클라이언트와 같은 네트워크 응용 프로그램을 빠르고 쉽게 개발할 수있는 NIO 클라이언트 서버 프레임 워크입니다. TCP 및 UDP 소켓 서버와 같은 네트워크 프로그래밍을 크게 간소화합니다.

Netty는 FTP, SMTP, HTTP 및 다양한 바이너리 및 텍스트 기반 레거시 프로토콜과 같은 많은 프로토콜 구현으로 얻은 경험을 바탕으로 신중하게 설계되었습니다.

결과적으로 Netty는 개발, 성능, 안정성 및 유연성을 손쉽게 달성 할 수있는 방법을 모색하는 데 성공했습니다.

  • Java 네트워크 애플리케이션 프레임워크
  • 이벤트에 기반하여 요청을 비동기 처리
  • 쉽고 빠른 네트워크 애플리케이션 구현
  • IO API 추상화

네티를 왜 사용할까?

java NIO 를 사용하여 Non-Bloking 방식으로 네트워크 애플리케이션을 직접 구현할 수도 있습니다.

하지만 우리가 다른 프레임워크를 사용하는 것처럼 생산성, 개발 편의성, 코드품질, 유지보수성 등의 이유로 직접 개발하기란 쉽지 않음.

Features

Design

  • 다양한 전송 유형을 위한 통합 API - blocking & non-blocking socket
  • 관심사를 명확하게 분리 할 수있는 유연하고 확장 가능한 이벤트 모델을 기반
  • 사용자 정의 가능한 스레드 모델 - single thread, one or more thread pools

Ease of use

  • 추가적인 Dependency가 필요 없음
    • JDK 5 (Netty 3.x)
    • JDK 6 (Netty 4.x)

Performance

  • 더 나은 처리량, 더 낮은 대기 시간
  • 자원 소비 감소
  • 불필요한 메모리 복사 최소화

Security

  • SSL/TLS, StartTLS 지원

성능

TechEmpower Benchmarks최신 결과를 보면 Netty는 웹 서버 중 29번째로 빠른 웹서버이고, 초당 460만건의 HTTP 요청에 응답할 수 있습니다. (테스트 환경, 14 코어, 32 RAM)

다른 서버와 비교

  • nginx 보다 1.24배 빠름
  • servlet 보다 1.84배 빠름
  • nodejs 보다 4.67배 빠름

Round 18 results - TechEmpower Framework Benchmarks 2019-07-22 21-05-00

Netty가 고성능인 이유

  • Non-blocking Asynchronous 처리가 기본
  • 적은 스레드로 많은 요청을 처리
    • 컨텍스트 스위칭으로 인한 CPU 오버헤드 감소
  • GC 부하를 최소화 하는 Zeor-copy-ByteBuf 지원
    • NIO의 ByteBuffer를 개선
    • DirectBuffer로 커널버퍼를 직접 핸들링 하기 때문에 JVM 내부 버포로의 복사로 인한 CPU 오버헤드 및 GC 비용 감소
    • ByteBufferPool 제공
      • 버퍼를 할당, 해제할 때 발생하는 GC 비용 감소

Netty가 무조건 좋은가?

https://3.bp.blogspot.com/-3i759KJap_U/We6baQQFc2I/AAAAAAAAfTs/0G7gLgD2BWsmVbPluFFoeGhViOafX1QqgCLcBGAs/s640/Boot1VsBoot2.png

  • 성능이 동일한 구간이 있다. (서비스의 트래픽이 높지 않다면 기존 Reqeust Per Thread 방식으로 서비스를 제공하더라도 무리가 없다.)
  • Blocking IO가 발생할 경우 모든 Client Request에 영향을 받는다. (ex. slow query)
  • 비동기 코드로 인해 디버깅과 코드 작성이 어렵다. (= 러닝커브가 크다.)