LoginSignup
19
9

More than 3 years have passed since last update.

Spring Fest 2019 まとめ

Last updated at Posted at 2019-12-18

Spring Fest 2019

目次

基調講演

Stéphaneさん

  • RSocket
  • JUnit5
  • パフォーマンス
    • 起動時間の改善
    • 遅延初期化(Lazy initiation)
    • ランタイムのパフォーマンス改善
  • 統計情報
    • 1年で何プロジェクト?1ヶ月で100万プロジェクト
    • ダウンロードTop3
      • 中国
      • アメリカ
      • インド
    • クライアントの内訳
      • Web: 50%
      • CLI: 3%
      • IDE: 50%
  • Spring Framework 5.3
    • JDK 17 LTSに対応
    • GraalVM native image対応
    • 5.x テーマの改善 (RSocket Corouting)
  • Spring Boot 2.3
    • Containerサポート
      • なるべく自動化、packとの連携、他のものも連携
    • Kubenetesサポート
      • KubenetesクラスターをSpringで実行した場合、選択肢が増える
    • 依存ライブラリアップデート
      • SpringData
    • 6ヶ月ごとのリリース
      • 来年2回リリースされる

槙さん

  • GraalVM Native Image
    • 通常のJITよりも起動速度と消費メモリが優れている
      • ただし、コンパイル遅い
    • Spring Cloud Release Train
      • ロンドンの駅順でリリースされている
        • 現在はGreenwich
        • NetflixのバージョンがMaintenance Modeに
    • Spring Cloud Stream
      • Messaging Framework
        • Functionでかけるようになった
    • Buildpack pack

Spring Boot 爆速開発超絶技工

株式会社サムライズム: 山本さん

内容

  • TR;TD
    • IntelliJで爆速で開発できるようになる
  • IntelliJ IDEA初期設定
    • Keymap はMac OS
    • USキーボード設定
    • タッチバーは無効化
  • IntelliJ便利機能
    • なんでも検索: shift * 2
    • なんでも実行: ctr * 2
    • 過去の開いていたファイル Cmd + E, Cmd + E
    • 定義元、呼び出し元 Cmd + B
    • 補完後のTabとEnterを使いこなす
    • カッコ閉じるときはShift + Cmd + Enterで自動的にかっこ補完
    • Postfix complestionを使いこなす
      • strings.vars Enterで変数を書いてくれる
      • isHoge.not.if でif文を作成してくれる
    • デバッグ
      • ブレークポイントに条件をつけれる
      • ブレークポイントにメッセージをつくれる
    • 実行
      • Shift +( Ctr )+ R
  • Git
    • IntelliJのGitツールを使うと壊れたコードを確認できる
  • おすすめプラグイン
    • Key promoter X
    • Presentation Assistant
    • Rainbow Bracket

スライド

LINE公式アカウントのチャットシステムにおけるSpringおよびWebFluxの活用事例

LINE株式会社 長谷部さん

内容

  • LINEでは大体Spring Frameworkを使用しているプロジェクトは5000プロジェクトくらいある
  • Why
    • DI & Container & AOP
    • 豊富なインテグレーション
      • Mybatis, FreeMerker Thymeleaf, SpringBootActuater, prometeus
  • 活用事例
    • LINE公式アカウント
      • 規模
        • サーバ150台
        • 月4億アクセス
        • MAU: 5万
  • 設計/構成
    • もとめられる要素 その1
      • リアルタイム通信
        • 候補
          • Polling
          • SSE
          • WebSocket
          • gRPC RSocket
        • SSEを採用
          • 双方向通信は不要、テキスト形式でも問題ない
          • WebSocketと比較するとシンプル(HTTP 1.1 Chunckedベース)
        • Spring-webmbv で SSE
          • サーバとつなぎっぱなし
          • 1リクエスト、1スレッド扱うことになり、高負荷
          • Spring MVCではBlocking I/O なので微妙
        • そこでWebflux
          • Non Blocking I/O
          • スレッド効率が良い
          • サーバの数が少ない
          • ただしBlockするコードは書いてはいけない、
      • リアルタイムに届くまでの流れ
        • Talk Server -> Event Receiver -> Kafka -> Event Procerssor -> Redis Cluster(PubSub) -> SSE -> ブラウザ
    • もとめられる要素 その2
      • メッセージ送信、過去メッセージなどの検索
      • Spring mvc でRest APIを構成
      • Why
        • JDBCを使用しなければいけなかったため
        • いきなりWebFluxに置き換えるのはリスクが大きい
    • もとめられる要素 その3
      • Lineユーザの画像動画音声の取得
      • 認証等の理由でProxyでアクセスする必要があった
      • ここはweb flux
    • 振り返り
      • 運用して1年経過した。
      • 障害なく運用できたため、技術選定は成功
      • Webfluxになれてきた今としてはRestful APIサーバをWebfluxで構成すればよかった
    • まとめ
      • コンポーネントの役割に応じてwebflux, mvc を使い分けている
      • Web flux
        • SSEサーバ
        • Event ReceiverContent Proxy
      • Mvc
        • 従来のビジネスロジックAPI
    • 困った話1
      • Netty OutOfMemory
        • ReadTimeExceptionがSingltonだった
        • Throwableが肥大してOOMに
        • 現在は修正済み
    • 困った話2
      • Blocking DNS Resolver
      • 2ヶ月に1回、threadがhangしてしまう現象があった
    • Tips: BlcockHound

スライド

実践 Spring Boot Actuator + Micrometer

Acroquest Technology株式会社 進藤さん -> Tommy Ludwig

内容

  • Micrometer
    • Micrometer.io
  • Actuator
    • ライブラリを入れるだけで、SpringBootのmetricsや運用に必要な情報を提供してくれる
    • 環境変数の切り分けで有効無効が選択できる
  • Why metrics
    • Alert は基本的にmetricsをもとに出している
    • Analytics
      • Alertを分析
    • Lower Storage Cost
  • Meter types
    • Gauge (ゲージ)
      • 減るかもしれないし、増えるかもしれない値
      • CPU使用率…
    • Counter (カウンター)
      • 減ることのない数値
      • リクエスト数,
      • ※常にカウンターできるのであればゲージにする必要はない
    • Timer
      • かかった時間などをカウントする
      • リクエストかかった時間
    • Distribution summary
  • SpringBoot And Micrometer
    • Auto Configuration
      • なにもしなくても主要なmetricsを自動集計
    • Custom Metrics
      • ビジネスロジックなどのカウント、ゲージ、タイマーしたい値を簡単に追加できる

スライド

Spring と GraalVM Native Image - 2019/12時点

NTTソフトウェアイノベーションセンター 岩塚 卓弥さん

※2019/12時点のものであり、変更される可能性があります

内容

  • GraalVM Native概要
    • Javaで書いたアプリケーションを使わずに実行可能
    • JVMを使わず に実行できる!
    • AOTコンパイルが使われている
      • JIT (Just in time) コンパイル
      • AOT (Ahead of Time) コンパイル
    • 共有ライブラリーを作れる
      • JavaライブラリをCから実行できる
    • Native Imageは高速??
      • 起動は早い が、 実行が早い わけではない
        • JDK: 30秒
        • Graal: 40秒
    • コンパイル時間がものすごくかかる
      • Hello world が 1分、SpringBootアプリは1時間
    • CE(Comunity Edition)とEE (Enterprise Edition)で実行時間に差がある
  • コンパイルプロセス
    • 実行可能Native Image生成の流れ
      • セットアップ -> 静的解析 -> コンパイル -> リンク -> クリーンアップ
  • Spring と Native image
    • Springではリフレクションが多用されている
    • ダイナミックプロキシが活用されている
    • Spring Feature
      • SpringアプリをNative Imageでビルドするときに必要な設定郡
        • Reflection Handler: 内部で利用するリフレクションの設定を扱える
        • Dynamic Ploxy Handler: 内部で利用するダイナミックプロキシの設定を扱う
        • Initialization Handler: クラス初期化タイミングの設定を扱う
        • Resource Handler: 内部的に利用するリソースの設定を扱う

スライド

RSocket徹底入門 ~Spring 5.2の目玉機能であるRSocket対応とは~

株式会社Pivotal 槙 俊明さん

内容

  • RSocketとは?
    • Duplex 双方向でMultiplexなバイナリプロトコル
    • reactive.foundation
    • 4つのInteration model
      • Request Response
        • 1 メッセージ送信、1メッセージを受信
      • Request Stream
      • Request Chanel
        • メッセージのストリームを送信、メッセージのストリームを受信
      • Fire and forget
        • 1メッセージを送信、受信なし
    • Duplex
      • 双方向通信
    • Reactive Streams
      • 非同期ストリーム
      • Nを指定してN分リクエストをコントロールできる(処理する分だけ)
      • WebfluxのReactorの違いは、JVM外の外のネットワークでリアクターになった点
    • Session Resumption
      • 送信中にネットワークエラーになった際に、途中のデータから送信を送ってくれる
    • Leasing
      • ResponderがRequesterに対してリクエストを制限する
      • RequesterがResponderを圧倒しないようにする機構
    • 多言語対応
      • RSocketはJava, JS, Kotlin, go, Python, C+…etc
    • CLI
    • Demo
public interface RSocket extends Availability, Closeable {
  Mono<Payload> requestResponse(Payload payload);
  Flux<Payload> requestStream(Payload payload);
  Flux<Payload> requestChannel(Publisher<Payload> payloads);
  Mono<Void> fireAndForget(Payload payload);
  Mono<Void> metadataPush(Payload payload);
}

  • Spring FrameworkのRSocketサポート
    • spring-messagingの@MessageMappingを使ったMessaging StyleのRSocketプログラミングモデルを提供
    • Spring Boot Starter RSocket + WebFlux
      • 同じポートの中にHttpとWebSocketのエンドポイントを構成できる
@Controller
public class HelloController {
    @MessageMapping("hello") // Routing Metadata をサポート
    public Mono<String> hello() {
        return Mono.just("Hello World!");
    }
    @MessageMapping("hello.many")
    public Flux<String> helloMany() {
        return Flux.just("Hello!", "Hello!", "Hello!");
    }
}
  • RSocketの事例
    • FaceBook
      • GraphQL Live Queries
    • Prometheus RSocket Proxy
    • Kubenetes(k3s)
      • RSocket Proxy
      • Leasingを使用して途切れたデータを再送信することができる
  • まとめ
    • 多くのサポートはされているが、まだまだ資料が少ないので路頭に迷う可能性大
    • Springがサポートしているのが心強い

スライド

Spring Social でソーシャルログインを実装する

株式会社Rakuten 田中 竜介さん

内容

  • 前段
    • 楽天ペイ(オンライン)の技術要素
      • 言語
        • Java11
      • ライブラリ
        • Spring boot
        • Spring secury
        • MyBatis
      • インフラ
        • Azure
        • Kubenetes
        • Docker
    • 大事なお知らせ
      • Spring Socialは EOL を迎えている
      • 終了してしまった
      • Spring Securiy OAuth2を使用するようにアナウンスが出ている
  • デモ
  • OAuth2 / Open Id Connect
    • 背景
      • 様々なサービスが公開されてきた
      • 新しい価値を提供するため1つのサービスに統合させる必要が出てきた
    • Spring Security Oauth2 Client
      • 複雑なクライアント実装が不要
    • Spring Security Core
      • 具体的な認証は処理をClientに移譲
  • 最後に
    • Spring OAuth2, Spring Boot Auto-configurationを利用することで実装コストをかけずに導入する
    • EOFきをつける

スライド、参考資料

19
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
9