Slide 1

Slide 1 text

TV連動サービスの リアルタイム通知を支える技術 2014/01/14 テレビ連動サーバ勉強会vol1 Tsuyoshi Torii (@toritori0318) Bascule Inc.

Slide 2

Slide 2 text

自己紹介 • 鳥居 剛司 @toritori0318 • 株式会社バスキュール • TV連動プラットフォームサーバ開発/運用 • Lua / Python / Golang / Node.js / Perl / Ruby • 二児の父

Slide 3

Slide 3 text

アジェンダ • MIESについて • Sonicshooter基本機能/事例紹介 • Sonicshooter詳細構成/特徴 • お試し構成デモ • まとめ

Slide 4

Slide 4 text

アジェンダ • MIESについて • Sonicshooter基本機能/事例紹介 • Sonicshooter詳細構成/特徴 • お試し構成デモ • まとめ

Slide 5

Slide 5 text

MIES

Slide 6

Slide 6 text

MIES

Slide 7

Slide 7 text

アジェンダ • MIESのご紹介 • Sonicshooter基本機能/事例紹介 • Sonicshooter詳細構成/特徴 • お試し構成デモ • まとめ

Slide 8

Slide 8 text

SonicShooter機能 • ユーザ管理/認証 • Push機能 • フレンド配信 • ブロードキャスト配信 • Sync機能(New!) • P2Pっぽく、特定デバイスとの同期をリアルタイムに行う • Pull機能 • フレンドタイムライン • パブリックタイムライン • ブロードキャストデータ

Slide 9

Slide 9 text

SonicShooter機能 • ユーザ管理/認証 • Push機能 • フレンド配信 • ブロードキャスト配信 • Sync機能(New!) • P2Pっぽく、特定デバイスとの同期をリアルタイムに行う • Pull機能 • フレンドタイムライン • パブリックタイムライン • ブロードキャストデータ

Slide 10

Slide 10 text

すごいTwitter っぽい

Slide 11

Slide 11 text

番組事例

Slide 12

Slide 12 text

事例: BloodyTube

Slide 13

Slide 13 text

紹介ムービー

Slide 14

Slide 14 text

プロジェクト構成概要

Slide 15

Slide 15 text

アジェンダ • MIESについて • Sonicshooter基本機能/事例紹介 • Sonicshooter詳細構成/特徴 • お試し構成デモ • まとめ

Slide 16

Slide 16 text

Elastic Socket.ioクラスタ

Slide 17

Slide 17 text

S2構成

Slide 18

Slide 18 text

S2構成

Slide 19

Slide 19 text

特徴 • 同時数百万接続 • HTTPS対応 • 特定ユーザ(グループ)に対して通知 • 動的にノード追加可能 • Weighted load balancing • 複数インスタンスタイプ対応

Slide 20

Slide 20 text

特定ユーザへ通知

Slide 21

Slide 21 text

動的にノード追加

Slide 22

Slide 22 text

ノード取得

Slide 23

Slide 23 text

Weighted load balancing

Slide 24

Slide 24 text

複数インスタンスタイプ対応

Slide 25

Slide 25 text

その他工夫しているところ • クライアントのフォールバックの仕組み • ハートビートが切れたら生きているノードを探しに行く • 別ノードへ再接続 • ソケットが切れている最中は、ポーリング間隔を短くする

Slide 26

Slide 26 text

アジェンダ • MIESについて • Sonicshooter基本機能/事例紹介 • Sonicshooter詳細構成/特徴 • お試し構成デモ • まとめ

Slide 27

Slide 27 text

Docker+socket.ioデモ • Socket.ioも気軽にスケール出来たらいいよね • Socket.ioをDockerコンテナ化して、ポコポコ増やしてみる • スケールアウト/スケールインしたときに問題なく接続/再接続さ れる仕組み 昨日、さくっとプロトタイプ作ってみた

Slide 28

Slide 28 text

Docker+socket.ioデモ • Socket.io ロードバランサ問題 • ハンドシェイク > アップグレード の2回アクセス問題 • 公式はIP Hashで実現しているが、Sticky Sessionでやりたい • ※もっというと、コネクション数見ながら自前で制御したい • Openresty + Luaでコード書いてみた • Nginxのupstream更新はconsul-template + Registrator • Consul: クラスタされたサービス検出と設定のためのソリューション • consul-template: Consulイベントと連動してテンプレートを更新 • Registrator: Dockerコンテナ情報をconsul/etcdなどに適用 • 全体へのbroadcastはsocketio-redis adapter を使用

Slide 29

Slide 29 text

補足:sio-clientのsticky session

Slide 30

Slide 30 text

補足:Lua – sioノード決定コード

Slide 31

Slide 31 text

デモ構成

Slide 32

Slide 32 text

デモムービー

Slide 33

Slide 33 text

アジェンダ • MIESについて • Sonicshooter基本機能/事例紹介 • Sonicshooter詳細構成/特徴 • お試し構成デモ • まとめ

Slide 34

Slide 34 text

まとめ • TV連動のリアルタイム通知を行うサービス/実装 /実例の紹介 • バージョンアップに向けてのデモンストレーション • まだまだ改善したいところたくさんある

Slide 35

Slide 35 text

ポエム • TV連動企画、人事ではない • 基本的には同じような企画が多いし、知見共有出来るところはたく さんあるはず • もっとこういう機会をふやしてこの業界全体の底上げしていきたい • もし次回があるなら聞きたい〜 • サーバ運用 • チート対策 • 集計 • 対談

Slide 36

Slide 36 text

宣伝その1

Slide 37

Slide 37 text

エンジニアサポート CROSS 2015 に登壇します! はやぶさ2開発者に聞く ~一度きりのテスト対策~

Slide 38

Slide 38 text

宣伝その2

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

ご清聴ありがとうございました