はじめに
Spring Fest 2018に参加し、いくつかのセッションを聞いてきました。
その中で「もっと知りたい」「自分の開発にも取り入れてみたい」と思った技術などを紹介します。
※どんなセッションがあったか、参加したセッションの内容説明は今回はしません。(Spring Fest 2018 の公式サイトに開催されたセッションとその発表スライドなどがあります。)
まだ途中なのでちょっとずつ更新します
JVM、Kotlin関連
GraalVM
クラウド環境で動かすことを想定すると、すごくメリットがありそうな機能で注目したい。
- JavaScript, Python, Ruby, R, JVM, JVM言語(Java, Scala, Kotlin, Clojure), C, C++ などの多くの言語が動くVM
- Nativeイメージにコンパイルすることができ、JVMベースアプリの起動時間やメモリのフットプリントを減らせる
- Keynoteでのアプリのデモでは、GraalVMとNettyで0.007秒で起動し、メモリ使用量もすごく少ないよという話があった
Spring Fu
KotlinはSpringでも積極的にサポートしてるよ!とのこと。
- Kofuと呼ばれるKotlin DSLで、アノテーションではなくコードベースの設定記法(functional configuration)で軽量なSpringアプリケーションを作成できる実験的プロジェクト
- Java向けのJafuというのもある
- Jafu,Kofuを総称してSpring Fuと呼ぶみたい
ReactiveなWebアプリケーション
この界隈の技術は今後盛んになりそう。Spring 5に備えるリアクティブプログラミング入門がかなり参考になった。
Spring WebFlux
- ノンブロッキングのイベントループモデルで動くReactive Streamsで作成されたアプリケーションフレームワーク
R2DBC
- RDBをreactive programming APIで利用できる
RSocket
- TCP, WebSocket, Aeronのようなバイトストリームト転送で使用するためのバイナリプロトコル
モニタリング
早期的なサービスの問題検知、性能改善や新機能の効果測定の可視化など、継続的なサービス運用をするにはもはや必須と感じた!
Prometheus
- もともとSoundCloud社で作られた、OSSのシステム監視/アラート通知ツール
- メトリクス名とkey/valueのペアごとの時系列データを持つ、多次元データモデル
- 多次元データモデルを利用するための柔軟なクエリが用意されている
- 分散ストレージに依存しない、自立型の単一サーバノード
- pull型監視(Prometheus -> 監視対象サーバ)による時系列コレクション
- ゲートウェイを介したpush型の時系列モデルもサポートしてる
- O'REILYのSRE本でも紹介されてる
- バイナリ実行するだけで動く
Micrometer
- 様々なモニタリングシステムに対して、共通のインターフェースで利用できる機能を提供している
- SLF4Jのメトリクス版のようなもの
- Prometheusもサポートしている
Spring Boot Actuator
-
/actuator/***
というエンドポイントへアクセスするだけで、Spring Bootアプリケーションのモニタリングなどができる機能 - 内部でMicrometerを利用している
Grafana
- 簡単にかっこいいグラフが作れる、ログやデータの可視化ツール
マイクロサービス/分散システムの構築に役立つ技術
Hystrix
- 分散システム上で発生するレスポンス遅延やサービスダウン時の挙動を制御するライブラリを提供しているOSS
- サーキットブレーカーの機能が有名
- 外部サービスの呼び出しの失敗、遅延が発生してリクエストが詰まりそうになった場合、設定したエラーを返したり直前の値をキャッシュしたものを返すなどができる
- Netflixが開発している
Zipkin
- 分散システムで、あるリクエストが複数のサーバをまたがって処理している場合にどこで時間がかかっているかなどのデータを収集して原因調査などに役立てることができる
Apache Kafka
- MQやPub/Subなどを利用できる分散メッセージングシステム
CI周りとか
あまりSpringとは関係ないが面白いなと思ったのでメモ。
ConcourseでのUTをJavaの複数バージョンで並列で実施
- 将来的にJavaをバージョンアップする時にすぐ移行できるように、実施しているとのこと
- 実際にTLS証明書のハンドシェイク周りのバグで、jdk11ではテスト失敗し、jdk12では成功するという状態を発見したこともあったらしい
JMeterで毎日負荷テストとレポート出力
- 綺麗なレポートを作成できるらしい
- テスト環境などで毎日実施して、Slackでレポート通知などすることもできる