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

Go x プッシュ通知 1.4 億通 per day

Go x プッシュ通知 1.4 億通 per day

Eido NABESHIMA

March 27, 2019
Tweet

Other Decks in Technology

Transcript

  1. • 鍋島永道 (closer) • Repro 創業初期からのメンバー • Rails, Go •

    Webデザイン(HTML,CSS)をしつつ ActionScript(Flash), JavaScript, PHP を経て Rails プログラマへ • 現在はほとんど Go ⾃⼰紹介
  2. • 代えのきかない唯⼀のマーケティングプラットフォーム • 2014: アプリの画⾯録画を使った定性分析ツール • 2015: ユーザーの⾏動データをもとにした定量分析ツール • 2016:

    分析データをもとにしたマーケティングツール • 2018: アプリにとどまらず、ウェブ領域にも進出 • 2019: 先⽇、動画機能を完全に廃⽌した Repro の紹介
  3. • Repro はアプリケーション部分はモノリシックな Rails プロジェクト • フロントエンド JS からバックエンドのバッチまで •

    唯⼀分離されているのが、プッシュ通知の配信基盤 (Pusher) • ユーザーのセグメンテーションは Rails で⾏う • Presto (Hive/Cassandra/MySQL) • ここら辺詳しくはこちら • https://speakerdeck.com/joker1007/architecture-evolution-in-repro Repro で Go をどのように使っているか
  4. • Rails でのセグメンテーション結果をもとに、デバイスへの送信を⾏う 部分(Pusher)を Go で書いている • また、送信の状況をリアルタイムで監視する社内ツール(Watcher)も Go で作成

    • 将来的にはモノリシックな rails を分割し、部分的には Go に置き換え たりする Repro で Go をどのように使っているか
  5. • 発射予定時刻前に、Rails でセグメンテーションした結果を redis に詰める • 発射予定時刻になったら Pusher へキューを送る •

    Pusher はキューをもとに、 redis から送信対象データを取り出して⼀気に 送信する • 送信後、結果を fluentd 経由で BigQuery に送信する • 送信結果をもとに開封率やコンバージョンなどの分析を⾏う 設計について
  6. • ⼀番最初の実装は C++ だった • 最初に Go で書いた後も、2回ほど⼤きく書き換えている • redis

    を経由したデータのやり取りはいずれ破綻するので、別の⽅法を 検討中 設計について
  7. • コンテナ化して AWS ECS で動かしている • バイナリオンリーのイメージ (FROM scratch) を作れるので、数メガバ

    イトで済む。 • UPX(実⾏バイナリを実⾏形式のまま圧縮する技術) で圧縮かけたり している • 現状、7台体制 運⽤について
  8. • 弊社 API を利⽤し、クライアントからの要求により個別の送信 • 常にプッシュが実⾏されている状態 • 常時稼働サーバと AWS Lambda

    の平⾏運⽤ • 毎回 Lambda を⽴てるより常に稼働させた⽅が効率が良い 2018 常時稼働サーバの運⽤
  9. • Rails と Go が書ける⼈、 Rails をやっているが Go に興味がある⼈、是⾮うちに 来て

    • https://repro.io/jp/company/careers/ • https://www.wantedly.com/projects/13022 これからの Repro と Go