Slide 1

Slide 1 text

Server Push Middleware “Plasma” @stormcat24 2017.04.29 そうだ Go、京都。

Slide 2

Slide 2 text

‣ CyberAgent, Inc. ‣ FRESH! https://freshlive.tv ‣ FRESH!はmackerelを利用しています(これ大事) ‣ http://blog.stormcat.io ‣ ワタシGoチョットデキル ‣ 最近の興味はRustとKotlin stormcat24

Slide 3

Slide 3 text

天皇賞のついでに喋りに来ました

Slide 4

Slide 4 text

突然ですがポーリングしてますか

Slide 5

Slide 5 text

ポーリングのシーン・・・ ‣ アプリケーションの状態変化の検知 ‣ 通知を疑似的にServer Pushぽく見せたり ‣ Job Queueのロングポーリング

Slide 6

Slide 6 text

あまりにも多くの HTTPリクエストが討ち死にしてきた ほぼ同じレスポンスだというのに・・・ ※応仁の乱

Slide 7

Slide 7 text

世の中のポーリングを撲滅したい

Slide 8

Slide 8 text

https://github.com/openfresh/plasma

Slide 9

Slide 9 text

Plasma is ‣ Go製の汎用的なServer Push型ミドルウェア ‣ gRPC StreamとServer-Sent Event(SSE)に対応 ‣ Web/iOS/Android/Serverから状態変化検知を撲滅したくて構想 ‣ 実装はインターン生(@upamune)がほぼ一人でやった

Slide 10

Slide 10 text

クライアントは必要なイベントタイプを指定し、 subscribeするだけでデータが降ってくる

Slide 11

Slide 11 text

Plasmaへの接続 ‣ gRPC Streamの場合 ‣ proto定義がPlasmaのリポジトリにあるので、protogenでstubを作る ‣ SSEの場合 ‣ polyfillあります https://github.com/Yaffle/EventSource ‣ サーバから一定期間データが来ないと接続が切れるブラウザがあるの で、Plasmaは切れないようにHeartbeatする

Slide 12

Slide 12 text

ユースケース ‣ 状態変化の監視のためポーリングをサーバプッシュに置き換える ‣ Microservices間で別のサービスで起きたイベントを受け取る ‣ Microservicesを跨いだキャッシュの伝搬(試験運用中!)

Slide 13

Slide 13 text

Server Pushはいいぞ

Slide 14

Slide 14 text

さあ、ポーリングの屍を乗り越えて行こう ※現在進捗10%

Slide 15

Slide 15 text

Thanks!