ストリーム処理でAkka Schedulerを活用してみた話

08a574558ea4b7bea8e53a331f6288ab?s=47 mattsu
March 17, 2018

ストリーム処理でAkka Schedulerを活用してみた話

下記で発表した資料です (LT枠)
第5回Reactive System Meetup in 西新宿 https://reactive-shinjuku.connpass.com/event/79769/?utm_campaign=&utm_source=notifications&utm_medium=email&utm_content=title_link #reactive_shinjuku

08a574558ea4b7bea8e53a331f6288ab?s=128

mattsu

March 17, 2018
Tweet

Transcript

  1. 2.

    自己紹介 • 社会人もうすぐ3年目 • インターネット広告の配信システムを作ってます ◦ いわゆるアドテクという業界 • 主にScalaを書いてます ◦

    1.5年くらい • 会社ではスクラムマスターという 役割を担っています. • たまにQiitaに記事を書いてます ◦ https://qiita.com/mattsu6 • 最近はSparkを使ってます 2
  2. 5.

    背景 • とあるお仕事が舞い込んできた • 「色んなサイトのアクセスログをリアルタイムに分析したい!」 • アクセスログは大量に発生するのでパフォーマンス要件はシビア ◦ 数万QPSが要求される... (ºДº)マジカッ!!

    • アクセスログには色んな付加情報が必要 ◦ 様々なデータベースとやり取りする必要がある 色々検討した結果Spark Streamingによるストリーム処理を採用 しかしデータベースとのやり取りがボトルネックに... 5
  3. 6.
  4. 7.

    全部メモリに載せちゃえ • 予め必要なデータを全部メモリに載せる • Sparkでは起動時に値をブロードキャストする機能がある • しかしデータベースの値は時々刻々と変化するため更新したい! ドライバ エグゼキュータ エグゼキュータ

    エグゼキュータ データベース アクセス ログ アクセス ログ アクセス ログ アクセス ログ 出力 1. 起動時に ロード 2. 各エグゼキュータに ブロードキャスト 値の更新はどうやってやるか? 7
  5. 9.

    Akka Schedulerを使ってみる(2/2) • 値の更新時に整合性を保つために古いデータは残す必要があるが いらなくなったタイミングで消してあげる ドライバ エグゼキュータ エグゼキュータ エグゼキュータ データベース

    ActorSystem 更新 アクター Scheduler 削除 アクター エグゼキュータが参照しな くなった古いデータを削除 するアクターを追加 古いデータを 削除 9