2019年春节总结

2019年春节

    • Spring Festの公演をメモレベルでまとめます。

公式: https://springfest2019.springframework.jp/

各Session

https://springfest2019.springframework.jp/#session

章节列表

    • 基調講演

 

    • Spring Boot 爆速開発超絶技工

 

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

 

    • 実践 Spring Boot Actuator + Micrometer

 

    • Spring と GraalVM Native Image – 2019/12時点

 

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

 

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

主題演講

斯蒂芬先生 (Sī dì

    • 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

作成したSpringBootアプリケーションから自動的にDockerimageを作成してくれる
Pack CLI
https://github.com/buildpacks/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 -> ブラウザ

※Kafka

もとめられる要素 その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

https://github.com/reactor/BlockHound
依存関係に入れる
Testで Blockhound.install() を入れるとBlocking Codeを検出してくれる

滑动

对于实践,使用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彻底入门~RSocket的支持是Spring 5.2的重要功能~

Pivotal公司的槙俊明先生

The content. (内容)

    • 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

https://github.com/rsocket/rsocket-cli
https://github.com/making/rsc

Demo

https://github.com/making/demo-rsocket-jsug

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来实现社交登录。

拉克天股份有限公司,田中竜介先生

内容

    • 前段

楽天ペイ(オンライン)の技術要素

言語

Java11

ライブラリ

Spring boot
Spring secury
MyBatis

インフラ

Azure
Kubenetes
Docker

大事なお知らせ

Spring Socialは EOL を迎えている
終了してしまった
Spring Securiy OAuth2を使用するようにアナウンスが出ている

デモ

https://github.com/jack-berkut/spring-security-oauth-demo

OAuth2 / Open Id Connect

背景

様々なサービスが公開されてきた
新しい価値を提供するため1つのサービスに統合させる必要が出てきた

Spring Security Oauth2 Client

複雑なクライアント実装が不要

Spring Security Core

具体的な認証は処理をClientに移譲

最後に

Spring OAuth2, Spring Boot Auto-configurationを利用することで実装コストをかけずに導入する
EOFきをつける

幻灯片,参考资料

广告
将在 10 秒后关闭
bannerAds