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.
い ま さ ら A K K A S T R E A M
C Y B E R Z Y U T O S U Z U K I
W H O ?
• Yuto Suzuki
• F.O.X Lead Engineer
D O Y O U K N O W A K K A ?
D O Y O U K N O W A K K A
S T R E A M ?
A K K A S T R E A M と は ?
Reactive StreamのAkka実装
– H T T P : / / W W W . R E A C T I V E - S T R E A M S . O R G /
“Reactive Stream is an initiative to provide a
standard ...
– H T T P : / / W W W . R E A C T I V E - S T R E A M S . O R G /
“Reactive Streamはノンブロッキングなバックプ
レッシャーの非同期ストリーム処理のための標準
を提...
聞 き 慣 れ な い 単 語 が 。
ノ ン ブ ロ ッ キ ン グ I / O
あるリソースを複数のスレッドが利用する際に
そのリソースを相互に排他的に保護して
無期限に実行を延期できるアルゴリズム
ノンブロッキングにできるのは
I/Oのみ
気になる人はI/Oの多重化とか調べてみ...
2
process
CPUtask
I/O
1
task
2
process
CPU
I/O
1
task
waiting
B A C K P R E S S U R E
受信側が送信制御を行う方式
sender receiver
タスクn個受けれる
n個流すわ
A K K A S T R E A M と は
“ノンブロッキングなバックプレッシャーの
非同期ストリーム処理のためのライブラリ”
U S E C A S E S
U S E C A S E S
• STREAM処理
• 流量制限が必要
• 処理が複雑(重いなど)
H O W T O I M P L E M E N T
送信側
受信側
途中処理
こ れ ら を つ な ぎ 合 わ せ る だ け !
def main(args: Array[String]): Unit = {
val source: Source[Int, NotUsed] = Source(1 to 100)
source.runForeach(println)
}
た...
def main(args: Array[String]): Unit = {
val source: Source[Int, NotUsed] = Source(1 to 100)
val flow: source.Repr[Int] = s...
def main(args: Array[String]): Unit = {
val source: Source[Int, NotUsed] = Source(1 to 100)
val flow: source.Repr[Int] = s...
def main(args: Array[String]): Unit = {
val source: Source[Int, NotUsed] = Source(1 to 100)
val flow: source.Repr[Int] = s...
デ モ
T H A N K Y O U F O R L I S T E N I N G !
Upcoming SlideShare
Loading in …5
×

いまさらAkkaStream

463 views

Published on

Akka Streamに関して、いまさら発表しました。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

いまさらAkkaStream

  1. 1. い ま さ ら A K K A S T R E A M C Y B E R Z Y U T O S U Z U K I
  2. 2. W H O ? • Yuto Suzuki • F.O.X Lead Engineer
  3. 3. D O Y O U K N O W A K K A ?
  4. 4. D O Y O U K N O W A K K A S T R E A M ?
  5. 5. A K K A S T R E A M と は ? Reactive StreamのAkka実装
  6. 6. – H T T P : / / W W W . R E A C T I V E - S T R E A M S . O R G / “Reactive Stream is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure.”
  7. 7. – H T T P : / / W W W . R E A C T I V E - S T R E A M S . O R G / “Reactive Streamはノンブロッキングなバックプ レッシャーの非同期ストリーム処理のための標準 を提供するための第一歩”
  8. 8. 聞 き 慣 れ な い 単 語 が 。
  9. 9. ノ ン ブ ロ ッ キ ン グ I / O あるリソースを複数のスレッドが利用する際に そのリソースを相互に排他的に保護して 無期限に実行を延期できるアルゴリズム ノンブロッキングにできるのは I/Oのみ 気になる人はI/Oの多重化とか調べてみると
  10. 10. 2 process CPUtask I/O 1 task
  11. 11. 2 process CPU I/O 1 task waiting
  12. 12. B A C K P R E S S U R E 受信側が送信制御を行う方式
  13. 13. sender receiver タスクn個受けれる n個流すわ
  14. 14. A K K A S T R E A M と は “ノンブロッキングなバックプレッシャーの 非同期ストリーム処理のためのライブラリ”
  15. 15. U S E C A S E S
  16. 16. U S E C A S E S • STREAM処理 • 流量制限が必要 • 処理が複雑(重いなど)
  17. 17. H O W T O I M P L E M E N T
  18. 18. 送信側 受信側 途中処理
  19. 19. こ れ ら を つ な ぎ 合 わ せ る だ け !
  20. 20. def main(args: Array[String]): Unit = { val source: Source[Int, NotUsed] = Source(1 to 100) source.runForeach(println) } ただ単に1 ~ 100を吐くだけ
  21. 21. def main(args: Array[String]): Unit = { val source: Source[Int, NotUsed] = Source(1 to 100) val flow: source.Repr[Int] = source .throttle(1, 1.second, 0, ThrottleMode.shaping) flow.runForeach(println) } 1秒の流量制限を入れる
  22. 22. def main(args: Array[String]): Unit = { val source: Source[Int, NotUsed] = Source(1 to 100) val flow: source.Repr[Int] = source .buffer(10, OverflowStrategy.dropHead) flow.runForeach(println) } bufferに10以上溜まったら捨てる
  23. 23. def main(args: Array[String]): Unit = { val source: Source[Int, NotUsed] = Source(1 to 100) val flow: source.Repr[Int] = source .mapAsync(2)(f => Future { Thread.sleep(1000); f + 1 } ) flow.runForeach(println) } 処理を2スレッドで実行する
  24. 24. デ モ
  25. 25. T H A N K Y O U F O R L I S T E N I N G !

×