forked from netty/netty
-
Notifications
You must be signed in to change notification settings - Fork 0
네티란
박원영 edited this page Jul 27, 2019
·
3 revisions
Netty는 비동기 이벤트 기반 네트워크 응용 프로그램 프레임워크입니다. 유지 보수가 가능한 고성능 프로토콜 서버 및 클라이언트를 신속하게 개발할 수 있습니다. - 네티 공식사이트 소개글 -
Netty는 프로토콜 서버 및 클라이언트와 같은 네트워크 응용 프로그램을 빠르고 쉽게 개발할 수있는 NIO 클라이언트 서버 프레임 워크입니다. TCP 및 UDP 소켓 서버와 같은 네트워크 프로그래밍을 크게 간소화합니다.
Netty는 FTP, SMTP, HTTP 및 다양한 바이너리 및 텍스트 기반 레거시 프로토콜과 같은 많은 프로토콜 구현으로 얻은 경험을 바탕으로 신중하게 설계되었습니다.
결과적으로 Netty는 개발, 성능, 안정성 및 유연성을 손쉽게 달성 할 수있는 방법을 모색하는 데 성공했습니다.
- Java 네트워크 애플리케이션 프레임워크
- 이벤트에 기반하여 요청을 비동기 처리
- 쉽고 빠른 네트워크 애플리케이션 구현
- IO API 추상화
java NIO
를 사용하여 Non-Bloking 방식으로 네트워크 애플리케이션을 직접 구현할 수도 있습니다.
하지만 우리가 다른 프레임워크를 사용하는 것처럼 생산성, 개발 편의성, 코드품질, 유지보수성 등의 이유로 직접 개발하기란 쉽지 않음.
- 다양한 전송 유형을 위한 통합 API - blocking & non-blocking socket
- 관심사를 명확하게 분리 할 수있는 유연하고 확장 가능한 이벤트 모델을 기반
- 사용자 정의 가능한 스레드 모델 - single thread, one or more thread pools
- 추가적인 Dependency가 필요 없음
- JDK 5 (Netty 3.x)
- JDK 6 (Netty 4.x)
- 더 나은 처리량, 더 낮은 대기 시간
- 자원 소비 감소
- 불필요한 메모리 복사 최소화
- SSL/TLS, StartTLS 지원
TechEmpower Benchmarks 의 최신 결과를 보면 Netty는 웹 서버 중 29번째로 빠른 웹서버이고, 초당 460만건의 HTTP 요청에 응답할 수 있습니다. (테스트 환경, 14 코어, 32 RAM)
- nginx 보다 1.24배 빠름
- servlet 보다 1.84배 빠름
- nodejs 보다 4.67배 빠름
- Non-blocking Asynchronous 처리가 기본
- 적은 스레드로 많은 요청을 처리
- 컨텍스트 스위칭으로 인한 CPU 오버헤드 감소
- GC 부하를 최소화 하는 Zeor-copy-ByteBuf 지원
- NIO의
ByteBuffer
를 개선 - DirectBuffer로 커널버퍼를 직접 핸들링 하기 때문에 JVM 내부 버포로의 복사로 인한 CPU 오버헤드 및 GC 비용 감소
-
ByteBufferPool
제공- 버퍼를 할당, 해제할 때 발생하는 GC 비용 감소
- NIO의
- 성능이 동일한 구간이 있다. (서비스의 트래픽이 높지 않다면 기존 Reqeust Per Thread 방식으로 서비스를 제공하더라도 무리가 없다.)
- Blocking IO가 발생할 경우 모든 Client Request에 영향을 받는다. (ex. slow query)
- 비동기 코드로 인해 디버깅과 코드 작성이 어렵다. (= 러닝커브가 크다.)
-
Alibaba
- RPC framework
- Elasticsearch
-
Kakao Talk
- 안드로이드 푸시 서버
- Pivotal
- Vert.x
- 카산드라