Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Akka-Streams in Production

1,835 views

Published on

Scala関西2015発表資料

Published in: Technology

Akka-Streams in Production

  1. 1. Akka-Streams in Production 1
  2. 2. 自己紹介 • 会社:株式会社サイバーエージェント • 名前:來田一宣 • 仕事:アドテクスタジオ->Smalgo->サーバサ イドエンジニア • 言語:Java(5年), Scala(1年半), 他細々と 2
  3. 3. アドテクスタジオとは • 色々な広告プロダクトの開発がされている部 署 3
  4. 4. Smalgo(DSP)とは • 成果報酬型DSP(Demand-Side Platform) • 最大秒間6万req/secのやりとり • 分析データ量はよくわからないくらい多い量 4
  5. 5. ここから本題
  6. 6. Akka-Streamsを さわったことある人?
  7. 7. Akka-Streamsとは? • Reactive-StreamsのAkka実装 7
  8. 8. Reactive-Streamsとは? • JVM上のnon-blockingでback-pressureな非同 期ストリーム処理の標準仕様 8
  9. 9. Back Pressureとは • Subscriberが自分が処理できる量をPublisher にリクエストを送ることで無駄なく Subscriberが処理できる量を処理する仕組み がBack pressure 9
  10. 10. publisher
 1op/s subscriber 100op/s 問題なし publisher
 100op/s subscriber 1op/s 問題あり 10
  11. 11. publisher
 100op/s subscriber 1op/s ①1reqいけるよ ②じゃあ1reqするね
  12. 12. コードで見るAkka-Streams
  13. 13. 簡単な例① 13
  14. 14. 簡単な例② 14
  15. 15. 簡単な例③ 15
  16. 16. どのようにProductionで使用 したのか
  17. 17. 実現したいこと • キューに入ったユーザのマークデータを使っ てほぼリアルタイムにIDを生成しそれをRedis に詰める 17
  18. 18. 掻い摘むと • キューからマークデータを取得 • マークデータからIDを生成 • IDデータをRedisに詰める • おまけ:結果をロギング 18
  19. 19. 普通にAkkaでやろうとすると • キューを監視するActor • 独自ロジックでIDをつけるActor • Redisに詰めるActor 19
  20. 20. もしキューを監視するActorが 遅かったら? • 問題なし(台数を増やせばいい) 20
  21. 21. もしIDを生成するActorが 遅かったら? • キューを監視するActorはそんな事お構いなし にIDを生成するActorに送りつづける • 問題あり(メモリは有限バッファーのサイズ には限りがある) 21
  22. 22. もしRedisに詰めるActorが 遅かったら? • IDを生成するActorはそんな事お構いなしに Redisに詰めるActorに送りつづける • 問題あり(メモリは有限バッファーのサイズ には限りがある) 22
  23. 23. 背圧制御を自分で実装するの は結構面倒
  24. 24. そうだAkka-Streams を使おう
  25. 25. Akka-Streams選定理由 • Akkaでやりたかった • パフォーマンスを追求したかった • 複雑にならずにシンプルにしたかった • 技術的挑戦をしたかった 26
  26. 26. 実装例
  27. 27. キューからデータを取得 28
  28. 28. IDを生成 29
  29. 29. IDをRedisにつめる 30
  30. 30. 結果をlogging 31
  31. 31. これらの処理群を結合し実行 32
  32. 32. Fault Tolerance について • 1.0-M4バージョンからAkka-StreamsのStream 内で例外が起きた場合に全体を再起動するな どの設定が可能(Akka Streams内のActorを管 理しているSupervisorのカスタマイズが可能) 33
  33. 33. メリット • 簡単に背圧制御を実現することが可能 • メンテナンス性が高い(見通しが良いコード • テストが書きやすい • パフォーマンスが高い 34
  34. 34. デメリット • まだ実験的なライブラリである • 初期の学習コストが高い(Akkaの知識、 Akka-Streamsの知識が必要) • 複数台のサーバにまたがって処理できない(今 後実装されるかも) 35
  35. 35. まとめ • 今回紹介した機能以外も色々なことが可能な のでこの発表を聞いて少しでも興味が出たか たがいたら幸いです 36
  36. 36. サイバーエージェントのアドテクスタジオでは Scalaプログラマを絶賛募集中です
  37. 37. ご清聴ありがとうございました

×