Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Server Push Middleware "Plasma"

Server Push Middleware "Plasma"

stormcat24

April 29, 2017
Tweet

More Decks by stormcat24

Other Decks in Programming

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. https://github.com/openfresh/plasma

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  13. Server Pushはいいぞ

    View full-size slide

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

    View full-size slide