Spring Fest '19講演メモ「Reactive Spring」by Josh Long
springfest2019.springframework.jp
Josh Longさんの3時間コースのメモ。
とてもおもしろいセッション。
「美しい」と感じるライブコーディングを生で見たのは、はじめてかもしれない。
もう一度見たい内容。
ちなみに、英語で日本人を笑わせていているのすごい。
It's Beautiful Demo!#jsug #sf_4HW pic.twitter.com/c4GeVtBOiO
— こばせ🥴 (@kobase555) 2019年12月18日
タイムテーブルから講演者のプロフィールを引用
Josh (@starbuxman) is the Spring Developer Advocate at Pivotal and a Java Champion.
He's host of "A Bootiful Podcast" (https://soundcloud.com/a-bootiful-podcast),
host of the "Spring Tips Videos" (http://bit.ly/spring-tips-playlist),
co-author of 6+ books (http://joshlong.com/books.html),
and instructor on 8+ Livelessons Training Videos (http://joshlong.com/livelessons.html).
メモ
- APIリクエストが増えてきた時に、どう対応するか?
- 需要が増えてきている
- 簡単にやるには、今までは水平スケールアウト
- 他にもオプションがある
- CPUアイドル状態のアクティビティ多い
- Input/Outputの待ち時間が多い
- 本当はもっとコンピューティングできるはず
- スレッドをたくさん使ってしまっていて、待ち状態になってしまっている
- スレッドが問題
- 持っているスレッドを効率よく使うという考え方。
- Reactiveプログラミングはコンピューティングマルチスレッド
- スレッドがデータを待っている状態に、他の人が待たなくていい
- これが理想的
- nioはjava 1.4 出てから18年経っている
- 何故これを使わないのか?
- ひとつは、使いにくい
- Netty使っている方はいますか?
- ここでやろうとしているのはリソースの効率化
- そうなると、ロードバランサを使う
- JDK9以降にReactiveStream入っている
- Hibernate Entityがある
- 1対多の場合、util.collectonを嫌っている
- java.util.Setを使うと例外をthrowして、カーネルエラーになってしまう
- そうなると、別のものを使っていく
- これから改善する
- ReactiveStreamが全てのものに対応する
- ReactiveTimeが入っている
- E2Eのサポートが入っている
- jar or war
- パッケージの選択肢わからない?
- もしあなたが過去に急に飛んでしまったとしましょう。
- その時は、warを利用してください。
- そうではなく、2019年を生きているならjarを選んでください
- 私にとっては大事な哲学 jar for all
- Javaバージョン
- 13,11,8 この中で正しいのは2つ
- 私は答えを言いません。ヒントだけ言います。みなさん考えてくださいね。
- (ここで画面拡大芸)
- どれが正しくないJavaのバージョンか?
- 正しくないのは8ですね
- 8は安定しているが、よくないバージョン
- あなたが意気地無しなら、Java11を
- ベストな回答は、Java13
- 最新版は、高速になってよりセキュア
- 道徳的に倫理的に優れたバージョン
- 子供に「Java8を使っている」と言えますか?
- 言えないですよね
- 恥だと思ってください
- 13を使ってください
子供に「Java8を使っている」と言えますか?
— こばせ🥴 (@kobase555) 2019年12月18日
言えないですよね
恥だと思ってください
13を使ってください
#jsug
- R2JDBC
- Mongo
- Mono
- ReactiveStreamではなくReactiveからきている
- フローコントールでは、バックプレッシャーとも言われる
- マーケティングから言葉が出てきたんだと思う
- 出すのは、Complete futureと同じ
- 0 or 1
- Flux
- 0〜無限まで
- Infinity Streamにも対応
- Fluxのコードは9899行ある。
- これを自分で書くのは大変ですよね?
- 使った方がいい。
- “Maki-san”
- 「これはデモだからです。デモは常にうまくいきます」
- 深刻なバグ
- アートワークの無効化は誰も期待していない
Disabled by order of Josh Long#jsug #sf_4HW pic.twitter.com/kF9MQXsIc2
— こばせ🥴 (@kobase555) 2019年12月18日
- Netty
- 効率的な非同期のアプリ
- RouterFunction
- 例えば、株価は情報をすぐ知りたい
- ユーザ数には限度がある
- ソケット
- Subscribe
- スレッドスケジューラ
- スレッドプール
- CPUに負荷がかかる
- 特にSlack
- デフォルトでノンブロッキング
- どこでブロッキングしているか知りたいのか
- Reactor/BlockHound
- CPUのスレッドをブロックしているものを見つけたら、例外にする
- ブロックを検出してくれるので便利
- Reactor/BlockHound
- WebSocket
- 3つオブジェクト
- Websocketはバイナリプロトコル
- konichiwa
- sweet♪
- (固定マイクから無線マイクに変更)
- 私はこれからやらないといけないことがあります
- みなさん、いい人なので失礼かなと思っている
- 「JavaScriptを書きます」
空と同じ
海と同じ
星と同じ
皆さんとコードと同じでバグと同じ
無限に続く
宇宙の終わりまで続く
ここまで前半
- セルフィーとっていいですか?
- 15歳の娘がいる
- 娘に「彼らは私の話聞いてくれる。あなたは私の話聞かないけど」と言いたい
- エッジサービスの場合
- 共通的なサービス
- Api Gateway
- RouteLocator
- プロキシを作る
- Host Filterでアクセスコントロールかける
- RequestRateLimiter
- Principal Name Key Resolver
- パスワードのエンコーディング
- BCrypeがデフォルト
- MapReacitiveUseDetailServie
- 私がこれをやる時、SpringSecurityの統括者は
- @rob_winch becomes sad :-(
- ハードコードされたユーザネームパスワードを使わないでください
- (デモでパスワードをハードコーディング)
- X-Rヘッダ
- 429 Too many Request
- 429 429 429
- これまでは、ThreadLocalに依存していた
- ReactiveTransactionManager
- R2dbcTransactionManager
- TrancationaOperator
- 皆さんが、誰も見ていないところでも絶対やっちゃいけないことをします。
- コピペです。
- LBへのコール
- 有効でなかったら onError
- EEEK!
- retryBackoff
- ハロウィンはアメリカの祝日です
- サーキットブレイカー
- 使えるサービスがない場合、そこで止めるといい
- 継続的にリトライするか、そこで諦めるか選べる
- 4つくらいある
- Resilience4j
- Hystrix
- Alibaba
- Reactive Circuit Breaker
- “I hedged my bet.I put some money on red and some on black in the casino.”
- Flux first( host1, host2, host3)
- 3つすべてにリクエスト送って、レスポンスが早いものからとる。他はキャンセルする。これは、副作用がないサービスに限る
- 副作用がないサービスに限る。
-
- Http1 テキスト
- Http2が解決した
- RSocket
- Aribaba
- 組織全部がSpringベース
- 10年以上そんな感じ
- 24時間で300億ドル儲けた
- 6年前に「SpringBoot」
- 次に「SpringCloud」
- 一年前に「RSocket」の話した
- 今多くのサービスがRSocketを使っている
- ここにクレイジーなチャンスがあると捉えてください
- KotlinにはCoroutineがある
- 同期的書けるのに非同期
- strong.io にYouTube動画がある。70本くらい・
- It’s OK
- Fun!