Netty情報
Nettyとは
Nettyは非同期イベント駆動に基づく高性能なネットワークアプリケーションの構築を支援するフレームワークです。
多数のプロトコルをサポートし、JDK標準のライブラリのみで動作します。
Java標準のネットワークAPIであるjava.netや初期のjava.nioは複雑でバグを生みやすく抽象度が低いため開発効率の面で課題がありました。
特に非同期I/O(NIO)を適切かつ効率的に実装することは非常に困難でした。
Nettyはこれらの複雑さを隠蔽し、誰でも高性能なネットワークアプリケーションを容易に開発できるようにするために生まれました(もともとはJBossプロジェクトの一部)。
Nettyはプロトコルサーバやクライアントを迅速かつ容易に開発するための「土台」を提供します。
TCPやUDPといった低レイヤの通信制御から、HTTPやWebSocketといった高レイヤのプロトコル処理までを一貫して扱いやすくし、ネットワークプログラミングの面倒な部分であるスレッド管理、バッファ管理、接続維持などを肩代わりします。
NettyのアーキテクチャはReactorパターンに基づいています。
主に下記の4つのコンポーネントで構成されます。
- EventLoopGroup / EventLoop
- I/Oイベント(接続、データ受信など)を監視し、発生したイベントを処理するスレッドモデルです
- Channel
- ネットワーク接続そのものを抽象化したコンポーネントで、読み書きや接続・切断の操作を提供します
- ChannelPipeline / ChannelHandler
- Nettyの中心機能で、受信したデータや送信するデータを加工する「処理の連なり」です
- たとえば: 「SSL/TLS復号」→「HTTP解析」→「業務ロジック」→「HTTP応答生成」→「SSL/TLS暗号化」のように、ハンドラをチェーンのように連結して処理します
- ByteBuf
- Java標準のByteBufferより高機能で使いやすい独自のバイトコンテナです
Nettyの「Getting Started」を実施すると、Nettyによるサーバ・クライアントの実装がいかにシンプルで、効率よく実装できるかを感じることができます。
現在の安定バージョンは4.1系と4.2系の2つです。
4.2系は4.1系に対する機能追加・バグ修正が取り込まれた最新版であり、新規プロジェクトやアップグレード時には4.2系の利用を推奨します。
4.1系も現状はサポートが継続されており、引き続き問題なく利用できます。
5.0系はアルファ版であり、安定版はまだリリースはされていません。
主な特徴
|
特徴 |
説明 |
|---|---|
|
ノンブロッキング通信(NIO)、ブロッキング通信(Old I/O)両方のソケット通信をサポート |
ノンブロッキング通信(NIO)、ブロッキング通信(Old I/O)両方のソケット通信をサポート ノンブロッキング通信(NIO)とは、I/O待ち時間中もスレッドを停止させず、少数のスレッドで大量の接続を効率よく処理する方式です。 |
|
高度にカスタマイズ可能なスレッドモデル |
Reactorパターンに基づき、接続を受け付ける「Boss」と、I/O処理を行う「Worker」という2種類のスレッドプール(EventLoopGroup)を柔軟に構成できます。 |
|
多くのプロトコルをサポート |
HTTP、WebSocket、FTP、SMTP、SSL/TLS、StartTLS、Google Protocol Buffers、zlib/gzip圧縮、大容量ファイル転送、Real Time Streaming Protocol(RTSP)、テキストベースのレガシープロトコルなどをサポートします。 |
|
低レイテンシ、高スループット |
OS固有の高性能なイベント通知機構(Linuxのepoll、macOSのkqueue)を直接利用するトランスポートへの切り替えが可能です。 |
|
低リソース(CPU、メモリ)消費、不要なメモリコピーの排除 |
Nettyは「ゼロコピー」と呼ばれる技術を駆使し、メモリ間の不要なデータコピーを極限まで削減します。 |
|
活発なコミュニティと、豊富な実績 |
現在は4.1.x系と4.2.x系がリリースされています。 |
メリット・デメリット
メリット・必要性
- 高性能: 高スループットかつ低レイテンシ
- 開発効率: 複雑なNIO処理が隠蔽されており、ロジックの実装に集中できる
- 柔軟性: 豊富なプロトコルサポートと拡張しやすいパイプライン構造
- 安定性: Twitter(現在のX), Apple, Netflixなどの大手プラットフォーマーで長年にわたり採用されており、成熟している(バグが少ない)
デメリット・注意点・課題
- 学習コスト: 非同期プログラミングやコールバック、独自のByteBufの仕様を理解する必要がある
- デバッグの難しさ: 非同期処理のため、スタックトレースを追いにくい場合がある
- 過剰な機能: HTTPリクエストを数回投げるだけの単純な用途にはオーバースペック
ユースケース
- 高負荷Webサーバ/APIゲートウェイ
Spring WebFlux, Zuul, Play Frameworkなど
- RPCフレームワーク
gRPC (Java実装), Apache Dubbo, Thriftなど
- リアルタイム通信/ゲームサーバ
Minecraftサーバや大規模MMORPGのバックエンド
- ビッグデータ/メッセージング
Apache Cassandra, Apache Spark, Apache Pulsarなどのノード間通信
動作環境
Nettyの動作環境は以下の通りです。
- Netty3.x - JDK5以上
- Netty4.x - JDK6以上
NettyでHTTP/2を使う場合、TLSの処理には下記のような推奨や制約があります。
- 利用可能な暗号化機能(TLS)としてOpenSSLとJDKの2つがありますが、機能、性能の両面からOpenSSLが推奨されています
- 一定の条件を満たせば自動的にOpenSSLが適用されます
- JDKを使う場合はそのバージョンに応じた制約に注意する必要があります
上記以外にも細かい動作条件があります。
詳細については下記のURLをご参照ください。
Nettyのライセンス
Apache License, Version2.0の下でリリースされているオープンソースソフトウェアです。
営利、非営利を問わず、だれでも自由かつ無償で利用・改変することができるほか、ライセンスのコピーの提供や変更内容の告知など、特定の条件を満たすことで再配布も認められています。
製品ダウンロード
参考情報
オープンソース年間サポートサービス
OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。
関連OSS
-
サポート対象Spring Boot
スプリング ブート。Springフレームワークのアプリケーションを簡単に開発できるオープンソースのJavaフレームワークです。
-
サポート対象Nginx
エンジンエックス。Apache HTTP Serverに次ぐ利用率で人気急上昇中の高速・高性能Webサーバです。
-
Jetty
ジェティ。100%Javaで開発されたJava Servletコンテナ/Webサーバです。
-
サポート対象Apache Tomcat
アパッチトムキャット。JavaサーブレットやJSPを実行するためのソフトウェア


