爆速WebFW(らしい) Light-4JをGroovyから使ってみる

G* Advent Calendar 5日目の記事です。

JVM上で使えるWebAPIを開発するFWなどは多々ありまして、ハイパフォーマンスなものを探していたらどうやら Light-4Jというものがあるらしいと聞きつけました。 彼が言うにはそこそこ速いということで、ベンチマークも出しているんだぜと。

doc.networknt.com

www.techempower.com

鵜呑みにはできないし、使い方とか知りたいので最小限のプロジェクトテンプレートをつくってみました。

github.com

JDK8が入っていれば、 ./gradlew runhttp://localhost:8081/baz で bazというテキストがレスポンスされると思います。 サンプルプロジェクトを移植しただけなので、Groovyらしさとかテストコードもありませんが。(ルーティング部分だけだったので)

Light4Jでは、Swagger 2.0, Open API 3.0, GraphQLに対応していたり、OAuth2.0に対応していたり、マイクロサービストレーサビリティ(X-Traceability-Id)に対応していたりとしていてよい感じです。(それぞれがライブラリで管理されているのもよい)

今回のプロジェクトテンプレートはそういったものは使っておらず、単純なAPIルーティング形式だけです。以下は使っている部分に関する知っていることの紹介です。

Java向けを考えて開発されている

当たり前?かもしれませんが、Java言語で開発されており、公式のサンプル、テストコードはJava言語で、ビルドツールはMavenでした。 今回自分は(最低限レベルですが)Gradleにして、Groovyを依存関係に追加するくらいでは特にハマったりとかはなかったです。 GroovyでもLight4Jは使えそう。

基本的な依存はundertow

light4jはundertowに依存して作られているので、Handlingまわりとかもそういう雰囲気です。netty信者とかじゃなければそんなに困らないかと思います。

いろんなものがライブラリに切られている

Light4Jはいろんなライブラリとして分割されており、たいていはそのライブラリに対応する設定を ライブラリ名.yml というファイル名で src/main/resources/config パス配下に置くことで認識されます。

例えば今回置いたのは server.ymlservice.yml です。

これらはドキュメントとしては Cross-Cutting Concerns としてライブラリ毎に設定例などが記述されています。 ので、この辺をとりあえず読んでおくと使えるようになります。

Light | Concerns

service.yml

このファイルにはどのファイルをエントリポイントとするかとかサービス起動全般に関わることを記述します。 今回は1つのみ記述していますが、そもそも複数のサービスを管理したい場合などにも対応しています。

詳細はこちらを見てみてください。

Light | Service

server.yml

このファイルには使うポートはなんだとか、https/http2使うのかとか記述します。

Light | Server

で、パフォーマンス

調べられていないので、そのうち。。。><

Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築

Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築

Groovy in Action

Groovy in Action

  • 作者: Dierk Konig,Paul King,Guillaume Laforge,Hamlet D'arcy,Cedric Champeau
  • 出版社/メーカー: Manning Pubns Co
  • 発売日: 2015/06/27
  • メディア: ペーパーバック
  • この商品を含むブログを見る

絵で見てわかるシステムパフォーマンスの仕組み

絵で見てわかるシステムパフォーマンスの仕組み