JSUG勉強会 2019その6 Spring IO 報告会 に行ってきた #jsug

JSUG勉強会 2019その6 Spring IO 報告会に行ってきました。簡単に所感をまとめます。

jsug.doorkeeper.jp

所感

最近はレガシーなシステムのお守りに追われて新しい情報を追えてなかったので、いろいろと新鮮な情報がいっぱいでした。

とはいえ、なかなか Reactive なシステムを開発する機会がなく、RSocket や R2DBC などは未だに試せていない状態です...。GraalVM とかかなりホットな話題なので素振りしておきたいところ。以前、ちょっと触ってみた Micronaut あたりで GraalVM を試してみようか。もしくは Quarkus あたり?

あと、Moduliths はなかなか面白そう。アーキテクチャをテストできるという意味では、JJUG CCC 2019 Spring で紹介されていた ArchUnit と近いものがあるんだろうか。

JJUG CCC 2019 Spring に行ってきた #jjug_ccc - kntmr-blog

以下、メモから抜粋。(2019/07/02: 資料のリンクを追記しました)

Spring Framework のロードマップと 5.2 の新機能

www.slideshare.net

  • Spring 5.2 は 9/4 GA に延期
  • 5.x で取り入れた機能のアップデートがメイン
  • Reactive API
    • RSocket (マイクロサービス間の通信)
    • R2DBC (RDBMSへのリアクティブアクセス)
  • R2Socket
    • L7のバイナリプロトコル (HTTPと同じレイヤ)
    • Reactive Streams (Backpressure)
    • 4つのインタラクションモデル (片方向/双方向、Mono/Flux)
    • spring-boot-starter-rsocket
    • @MessageMapping
  • R2DBC
  • Reactor のデバッグ出力を改善
    • トレース生成のコストは高い
  • 関数型 API の整備
    • Router Function が MVC で使える
  • Spring 5.3
    • JDKアップデートに追従 (13-15)
    • Code Analysis Annotations
      • @Nullable
    • GraalVM
  • Spring 5.x で対応されないもの
    • Java 11 ベース
    • モジュールシステム
    • Jakarta EE (javax パッケージ?)
    • Project Loom

Spring 5.2 の Kotlin 対応

www.slideshare.net

  • Coroutine 対応
    • WebFlux 向けの機能をサポート
    • ReactiveX に替わるものではない
    • Reactive と Coroutine は同じように使える
  • Spring Kofu
    • Experimental
    • Functional Configuration
    • アプリ起動の高速化、省メモリ

GraalVMの概要と、Native-Image化によるSpring Boot爆速化の夢

www.slideshare.net

  • Graal コンパイラ
  • Truffle
  • Native Image
  • 現時点ではそのまま Spring Boot アプリを Native Image にはできない (制限が多い)
    • リフレクションや Dynamic Proxy で動的なクラス生成を多用しているため
  • Spring 5.3 で Native Image に正式対応予定
  • 今のところ Native Image のビルド時間は非常に長い

Spring Cloud Netflix

www.slideshare.net

  • ほとんどがメンテナンスモードに
    • 脆弱性やバグfixは Pull Request で対応
  • Ribbon ⇒ Spring Cloud Load Balancer
  • Eureka ⇒ Spring Cloud Zookeeper
    • メンテナンスモード対象ではない
    • 移行パスを検討中
  • Zuul ⇒ Spring Cloud Gateway
  • Hystrix ⇒ Spring Cloud Circuit Breaker + Resilience4j
    • アノテーションが不要に
    • Circuit Breaker は様々なサーキットプレイカーを使えるように抽象化したもの
  • Hystrix Stream, Turbine, Hystrix Dashboard ⇒ Micrometer + Prometheus
    • メトリクス情報を収集して監視ツールにエンドポイントを提供する
  • Archaius ⇒ Spring Cloud Config Server
    • そもそもアーキテクチャが違う
    • Archaius は各サービスがプロパティを取得するためのエンドポイントを提供する
    • Config Server は各サービスにプロパティを配布して起動時にロードさせる
  • マイクロサービス開発を担うプロダクトは多い
    • 今後、統廃合があったりするかもしれない

Spring Boot で作るいまどきなモノリス

www.slideshare.net

  • Modular Monoliths
  • Moduliths
  • パッケージをモジュールで分割する (ドメイン)
  • main がある階層のパッケージがモジュールになる
  • モジュール間のDIを避ける
    • EventListener で依存モジュールに Event を送る
    • @DomainEvent
  • Bootstrap Modes
    • Standalone, Direct dependencies, All dependencies
  • モジュールのパッケージ直下に配置したクラスは他モジュールに公開される
    • サブパッケージ配下のクラスは他モジュールには非公開
  • 相互依存をチェックしてエラーにしてくれる
  • Documenter
    • モジュールの関連グラフを作ってくれる (PlantUML)
  • Java のモジュールシステムと関係があるものではない
    • Moduliths はテストをサポートするもの