【技術メモ】Undertow超入門
WildflyのServletコンテナ、Undertowについて調べる。
Undertow概要
Undertowアーキ概要
www.slideshare.net
概要
NIO(=New IO、java.nio)
- 入出力処理用ライブラリ
- java.ioの機能を補足する
- スケーラビリティが高く高速な入出力処理が目的
- 主な機能
特徴
アーキ概要①:XNIO Worker
リスナーとタスクのスレッドプールを管理
- リスナー=IOスレッド
- タスク=処理
アーキ概要②:リスナー
リクエスト受付とレスポンス
アーキ概要③:ハンドラ
ハンドラ=処理を行う単位
- 複数のハンドラをチェーンさせることで、全体としての処理を形成
- Undertowはハンドラの集合といえる(一般的なコンテナとは違う)
- Wildflyがうまいこと設定するので、利用者はあまり意識しない
設定のポイント
ioサブシステム
Undertowは/subsystem=ioに依存している
- リスナーがWorkersとBuffer Poolを参照
- 性能面での実質的なチューニングポイント
Workersの設定項目
- Task keepalive
- 同一クライアントとのコネクション維持
- default:60s
- IO threads
- Task max threads
- タスクスレッドの最大数
- default:CPU数x16
Buffer Poolの設定項目
- Buffer size
- default:16KB
- Buffer Per Slice
- 大きなバッファを分割操作する際のバッファの分割数
- default:20
undertowサブシステム
- buffer-cache
- 静的ファイルのキャッシュなど
- server
- Undertow全体の設定
- リスナー、ホストなど
- servlet-container
- サーブレットコンテナ設定
- 組み込みHandler
- Filter
TomcatではなくJBossを選ぶ○○の理由
「EJBを使うとき」では理解していないようにとられる、主に以下。
- 機能の充実度
- 複数システムでの統一性
- 運用管理の容易性
機能
- Tomcatは、基本的にServlet,/JSP,/JDBC接続プールのみ
- Java EEなら、JTA/EJB/MDB/JPA/JMS/JCA/JAX-WS
- JBoss固有だと、JMX/log4jを用いたログ基盤/分散キャッシュ
技術的な判断基準は「有効活用できるUseCaseは?」だが、どれも一覧で見せられてすぐに使いどころを判断できるものではないので、普段からある程度素振りが必要
APサーバの種類の統一
- 複数システムを開発・運用する場合、統一されていないと非常に面倒
- となると、機能の少ない方には倒せない
- また、JBossなら必要無いサービスは削除できる
→JBoss、という結論
運用管理の容易性
TomcatとJBossの違い
JBossとTomcatの性能比較をしてみた
http://tech-sketch.jp/2014/10/jbosstomcat.htmltech-sketch.jp