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の事例
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きをつける