SlideShare a Scribd company logo
Konrad 'ktoso' Malawski
GeeCON 2014 @ Kraków, PL
Konrad `@ktosopl` Malawski @ Reactive Systems Meetup
streams
How reactive streams
change the JVM Ecosystem
&
reative streams と akka streams が
JVMエコシステムをどのように変えるか
Konrad `ktoso` Malawski
(we’re renaming soon!)
Akka Team,
Reactive Streams TCK,
Maintaining Akka Http
TypesafeのKonrad `ktoso` Malawskiです。
(Typesafeもうすぐ会社名を変更します)
Konrad `@ktosopl` Malawski
akka.io
typesafe.com
geecon.org
Java.pl / KrakowScala.pl
sckrk.com / meetup.com/Paper-Cup @ London
GDGKrakow.pl
lambdakrk.pl
(we’re renaming soon!)
Nice to meet you!
Who are you guys?
はじめまして!
Agenda for today:
• Story & landscape
• The Reactive Streams Protocol
• Akka Streams / Demo
• Akka Http / Demo
• Q/A?
本日のアジェンダです。経緯と展望、Reacive Streams プロ
トコル、Akka Streamsとデモ、Akka Http とデモ、Q/A
Reactive Streams - story: early FRP
http://blogs.msdn.com/b/rxteam/archive/2009/11/17/announcing-reactive-extensions-rx-for-net-silverlight.aspx
http://infoscience.epfl.ch/record/176887/files/DeprecatingObservers2012.pdf - Ingo Maier, Martin Odersky
https://github.com/ReactiveX/RxJava/graphs/contributors
https://github.com/reactor/reactor/graphs/contributors
https://medium.com/@viktorklang/reactive-streams-1-0-0-interview-faaca2c00bec#.69st3rndy
- .NETs’ Reactive Extensions
.NET 3.5
Reactive Streams のストーリー: 初期のFRP
.NET の Reactive Extensions がリリースされました。
Reactive Streams - story: 2013’s impls
~2013:
Reactive Programming
becoming widely adopted on JVM.
- Play introduced “Iteratees”
- Akka (2009) had Akka-IO (TCP etc.)
- Ben starts work on RxJava
http://blogs.msdn.com/b/rxteam/archive/2009/11/17/announcing-reactive-extensions-rx-for-net-silverlight.aspx
http://infoscience.epfl.ch/record/176887/files/DeprecatingObservers2012.pdf - Ingo Maier, Martin Odersky
https://github.com/ReactiveX/RxJava/graphs/contributors
https://github.com/reactor/reactor/graphs/contributors
https://medium.com/@viktorklang/reactive-streams-1-0-0-interview-faaca2c00bec#.69st3rndy
Teams discuss need for back-pressure
in simple user API.
Play’s Iteratee / Akka’s NACK in IO.
}
2013年には Reactive Programming が JVM 上で広く採用されるようになりました。
Play,Akkaのチームは簡潔なユーザAPIによる背圧制御の必要性を議論していました。
Reactive Streams - story: 2013’s impls
Play Iteratees – pull back-pressure, difficult API
http://blogs.msdn.com/b/rxteam/archive/2009/11/17/announcing-reactive-extensions-rx-for-net-silverlight.aspx
http://infoscience.epfl.ch/record/176887/files/DeprecatingObservers2012.pdf - Ingo Maier, Martin Odersky
https://github.com/ReactiveX/RxJava/graphs/contributors
https://github.com/reactor/reactor/graphs/contributors
https://medium.com/@viktorklang/reactive-streams-1-0-0-interview-faaca2c00bec#.69st3rndy
Akka-IO – NACK back-pressure; low-level IO (Bytes); messaging API
RxJava – no back-pressure, nice API
Play の Iteratee は pull 型の背圧制御でAPIが難しく、Akka-IO は NACK 背圧制御で
低レベルI/OとメッセージングAPI, RxJava は背圧制御はないが優れたAPIでした。
Reactive Streams - Play’s Iteratees
def fold[B](
done: (A, Input[E]) => Promise[B],
cont: (Input[E] => Iteratee[E, A]) => Promise[B],
error: (String, Input[E]) => Promise[B]
): Promise[B]
// an iteratee that consumes chunkes of String and produces an Int
Iteratee[String,Int]
https://www.playframework.com/documentation/2.0/Iteratees
Feb 2013
Iteratees solved the back-pressure problem,
but were hard to use.
Iteratee & Enumeratee – Haskell inspired.
Play / Akka teams looking for common concept.
2013年2月, Play の Iteratee は背圧制御の問題を解決しましたが使いづらく、
Play/Akkaのチームは共通のコンセプトを探していました。
Reactive Streams - expert group founded
October 2013
Roland Kuhn (Akka) and Erik Meijer (Rx .NET) meet in Lausanne,
while recording “Principles of Reactive Programming” Coursera Course.
Viktor Klang (Akka), Erik Meijer, Ben Christensen (RxJava)
and Marius Eriksen (Twitter) meet at Twitter HQ.
The term “reactive non-blocking asynchronous back-pressure” gets coined.
2013年10月, Roland Kuhn(Akka)、Erik Meijer (Rx .NET) らにより"リアクティブ
ノンブロッキング非同期背圧制御"という言葉が造り出されました。
Reactive Streams - expert group founded
October 2013
Roland Kuhn (Akka) and Erik Meijer (Rx .NET) meet in Lausanne,
while recording “Principles of Reactive Programming” Coursera Course.
Viktor Klang (Akka), Erik Meijer, Ben Christensen (RxJava)
and Marius Eriksen (Twitter) meet at Twitter HQ.
The term “reactive non-blocking asynchronous back-pressure” gets coined.
Goals:
- asynchronous
- never block (waste)
- safe (back-threads pressured)
- purely local abstraction
- allow synchronous impls.
Also, for our examples today:
- compatible with TCP
非同期、ブロックしない、安全、純粋にローカルのような抽象化、同期の実装も許すこ
とをゴールとしました。また、今日の前例にならいTCPとの互換性も目指しました。
Reactive Streams - expert group founded
October 2013
Roland Kuhn (Akka) and Erik Meijer (Rx .NET) meet in Lausanne,
while recording “Principles of Reactive Programming” Coursera Course.
Viktor Klang (Akka), Erik Meijer, Ben Christensen (RxJava)
and Marius Eriksen (Twitter) meet at Twitter HQ.
The term “reactive non-blocking asynchronous back-pressure” gets coined.
December 2013
Stephane Maldini & Jon Brisbin (Pivotal Reactor) contacted by Viktor.
Sephane Maldini と Jon Brisbin (Pival Reactor) がViktor にコン
タクトしました。
Reactive Streams - expert group founded
October 2013
Roland Kuhn (Akka) and Erik Meijer (Rx .NET) meet in Lausanne,
while recording “Principles of Reactive Programming” Coursera Course.
Viktor Klang (Akka), Erik Meijer, Ben Christensen (RxJava)
and Marius Eriksen (Twitter) meet at Twitter HQ.
The term “reactive non-blocking asynchronous back-pressure” gets coined.
December 2013
Stephane Maldini & Jon Brisbin (Pivotal Reactor) contacted by Viktor.
Soon after, the “Reactive Streams” expert group is formed.
Also joining the efforts: Doug Lea (Oracle), EndreVarga (Akka), Johannes Rudolph & 

Mathias Doenitz (Spray), and many others, including myself join the effort soon after.
まもなく "Reactive Streams" エキスパートグループが創設されました。
Doug Lea(Oracle)や、私自身も含めた多くの人々が参画しました。
October 2013
Roland Kuhn (Akka) and Erik Meijer (Rx .NET) meet in Lausanne,
while recording “Principles of Reactive Programming” Coursera Course.
Viktor Klang (Akka), Erik Meijer, Ben Christensen (RxJava)
and Marius Eriksen (Twitter) meet at Twitter HQ.
The term “reactive non-blocking asynchronous back-pressure” gets coined.
December 2013
Stephane Maldini & Jon Brisbin (Pivotal Reactor) contacted by Viktor.
Soon after, the “Reactive Streams” expert group is formed.
Also joining the efforts: Doug Lea (Oracle), EndreVarga (Akka), Johannes Rudolph & 

Mathias Doenitz (Spray), and many others, including myself join the effort soon after.
Reactive Streams - expert group founded
I ended up implementing much of the TCK.
Please use it, let me know if it needs improvements :-)
私はTCK(Technology Compatibility Kit) の大部分の実装を終えました。
ぜひ使ってみて、もし改良が必要なら教えてください :-)
Reactive Streams - story: 2013’s impls
2014–2015:
Reactive Streams Spec & TCK
development, and implementations.
1.0 released on April 28th 2015,
with 5+ accompanying implementations.
2015
Proposed to be included with JDK9 by Doug Lea
via JEP-266 “More Concurrency Updates”
http://hg.openjdk.java.net/jdk9/jdk9/jdk/file/6e50b992bef4/src/java.base/share/classes/java/util/concurrent/Flow.java
2014-2015に Reactive Streams の仕様とTCKが開発・実装され、
2015年4月28日に 1.0 が5つ以上の実装と共にリリースされました。
2014–2015:
Reactive Streams Spec & TCK
development, and implementations.
1.0 released on April 28th 2015,
with 5+ accompanying implementations.
2015
Proposed to be included with JDK9 by Doug Lea
via JEP-266 “More Concurrency Updates”
http://hg.openjdk.java.net/jdk9/jdk9/jdk/file/6e50b992bef4/src/java.base/share/classes/java/util/concurrent/Flow.java
Reactive Streams - story: 2013’s impls
Doug Lea により、これを JDK9 に含めることが
JEP-266 "More Concurrency Updates" を通じて提案されました。
in a few words:
• Toolkit for building scalable distributed / concurrent apps.
• High Performance Actor Model implementation
• “share nothing” – messaging instead of sharing state
• millions of msgs, per actor, per second
• Supervision trees – built-in and mandatory
• Clustering and Http built-in
A
B
BarFoo
C
B
E
A
D
C
/Foo
/Foo/A
/Foo/A/B
/Foo/A/D
Guardian System Actor
Name resolution—like a file-system
akka はスケーラブルな分散/並行アプリを構築するためのツールキットです。高性能な
Actorモデルの実装で、Supervisionツリー、クラスタリング/Httpを組込んでいます。
Why back-pressure?
?
なぜ背圧制御なのでしょうか?
Why back-pressure?
So you’ve built your app and it’s awesome.
皆さんはアプリを構築してきました、
それは素晴らしいことです。
Why back-pressure?
Let’s not smash it horribly under load.
負荷をかけすぎて、壊さないようにしましょう。
What is back-pressure?
?
背圧制御(back pressure) とは何でしょうか?
What is back-pressure?
背中(back)が痛くて死にそうだ!
No no no…!
Not THAT Back-pressure!
No no no…!
Not THAT Back-pressure!
What is back-pressure?
いやいやいや...! その back pressure ではありません!
Publisher[T] Subscriber[T]
Back-pressure explained
背圧制御の説明
Fast Publisher Slow Subscriber
What if…?
もしも、1秒間に100の命令を処理する高速なPublisherと、
1秒間に1つの命令しか処理しない低速なSuscriberだったら?
Push + NACK model
Push と NACK モデル
Push + NACK model
Subscriber usually has some kind of buffer.
Subscriber は普通ある種のバッファを持っています。
Push + NACK model
Push + NACK model
What if the buffer overflows?
Push + NACK model
もしバッファがオーバーフローしたら何が起こるでしょう?
Use bounded buffer,
drop messages + require re-sending
Push + NACK model
大きさが限られたバッファを使い、
メッセージを廃棄し、再送を要求します。
Kernel does this!
Routers do this!
(TCP)
Use bounded buffer,
drop messages + require re-sending
Push + NACK model
カーネルがこれを行います! ルーターがこれを行います! (TCP)
Increase buffer size…
Well, while you have memory available!
Push + NACK model
バッファサイズを増やしてみましょう...
そう、使用できるメモリがある限りは!
Push + NACK model
メモリ不足
Negative ACKnowledgement
NACKing
Buffer overflow is imminent!
バッファオーバーフローが今にも起こりそうです!
Telling the Publisher to slow down / stop sending…
NACKing
Publisher にスローダウンするか、送信を止めるよう知らせます...
NACK did not make it in time,
because M was in-flight!
NACKing
NACK は間に合いませんでした、
メッセージが飛んできている最中だったからです!
What if…
We don’t need to back-pressure, because:
speed(publisher) < speed(subscriber)
We need low-overhead for “happy case”
もしも、publisher のスピード < subscrber のスピードであれば、
背圧制御は必要ありません。
No problem!
Fast Subscriber => no problem
高速な Subscriber であれば、問題ありません!
Back-pressure?
Reactive-Streams
=
“Dynamic Push/Pull”
Fast Subscriber => no problem
背圧制御? Reactive Streams = "動的な Push/Pull"
Just push – not safe when Slow Subscriber
Just pull – too slow when Fast Subscriber
Reactive Streams: “dynamic push/pull”
push だけだと、Subscriberが低速な時には、安全ではありません。
pull だけだと、Subscriberが高速な時には、遅すぎます。
Solution:
Dynamic adjustment
Just push – not safe when Slow Subscriber
Just pull – too slow when Fast Subscriber
Reactive Streams: “dynamic push/pull”
解決策は、動的な調整です。
Slow Subscriber sees it’s buffer can take 3 elements.
Publisher will never blow up its buffer.
Reactive Streams: “dynamic push/pull”
低速なSubscriberはバッファに3要素入れられることがわかります。
Publsherはバッファをあふれさせることは決してありません。
Fast Publisher will send at-most 3 elements.
This is pull-based-backpressure.
Reactive Streams: “dynamic push/pull”
高速なPublisherは、高々3つの要素を送ります。
これがpullベースの背圧制御です。
Fast Subscriber can issue more Request(n),
before more data arrives!
Reactive Streams: “dynamic push/pull”
高速なSubscriberは、データが到着する前に、
より多くのリクエストを発行することができます!
Fast Subscriber can issue more Request(n),
before more data arrives.
Publisher can accumulate demand.
Reactive Streams: “dynamic push/pull”
高速なSubscriberは、需要を蓄積することができます。
Publisher accumulates total demand per subscriber.
Reactive Streams: accumulate demand
Publisherはsubscriberごとに需要の合計を蓄積します。
Total demand of elements is safe to publish.
Subscriber’s buffer will not overflow.
Reactive Streams: accumulate demand
需要の合計分の要素をpublishしても安全です。
Subscriberのバッファはオーバーフローしないでしょう。
http://reactive-streams.org
We want to make different implementations
co-operate with each other.
Reactive Streams: Inter Op
私たちは、異なる実装がお互いに協力できるようにしたいのです。
http://reactive-streams.org
We want to make different implementations
co-operate with each other.
Reactive Streams: Inter Op
私たちは、異なる実装がお互いに協力できるようにしたいのです。
RS is NOT a “daily use”, “end-user” API.
It’s an SPI - Service Provider Interface.
Reactive Streams: Inter-Op
https://en.wikipedia.org/wiki/Service_provider_interface
Service Provider Interface (SPI) is an API intended to be
implemented or extended by a third party.
RS は "毎日使用する", "エンドユーザ向けの" API ではなく、サードパーティにより
実装される、または拡張される SPI (Service Provider Interface) です。
EmbeddedApp.fromHandler(new Handler {
override def handle(ctx: Context): Unit = {
// RxJava Observable
val intObs = Observable.from((1 to 10).asJava)
// Reactive Streams Publisher
val intPub = RxReactiveStreams.toPublisher(intObs)
// Akka Streams Source
val stringSource = Source(intPub).map(_.toString)
// Reactive Streams Publisher
val stringPub = stringSource.runWith(Sink.fanoutPublisher(1, 1))
// Reactor Stream
val linesStream = Streams.create(stringPub).map[String](
new reactor.function.Function[String, String] {
override def apply(in: String) = in + "n"
})
// and now render the HTTP response (RatPack)
ctx.render(ResponseChunks.stringChunks(linesStream))
}
}).test(new Consumer[TestHttpClient] {
Reactive Streams: Inter-Op
https://en.wikipedia.org/wiki/Service_provider_interface
EmbeddedApp.fromHandler(new Handler {
override def handle(ctx: Context): Unit = {
// RxJava Observable
val intObs = Observable.from((1 to 10).asJava)
// Reactive Streams Publisher
val intPub = RxReactiveStreams.toPublisher(intObs)
// Akka Streams Source
val stringSource = Source(intPub).map(_.toString)
// Reactive Streams Publisher
val stringPub = stringSource.runWith(Sink.fanoutPublisher(1, 1))
// Reactor Stream
val linesStream = Streams.create(stringPub).map[String](
new reactor.function.Function[String, String] {
override def apply(in: String) = in + "n"
})
// and now render the HTTP response (RatPack)
ctx.render(ResponseChunks.stringChunks(linesStream))
}
}).test(new Consumer[TestHttpClient] {
Reactive Streams: Inter-Op
https://en.wikipedia.org/wiki/Service_provider_interface
Akka Streams
streams
Akka Streams & HTTP
streams
& HTTP
Akka Streams in 20 seconds:
// types:
Source[Out, Mat]
Flow[In, Out, Mat]
Sink[In, Mat]
// generally speaking, it's always:
val ready = Source(???).via(flow).map(_ * 2).to(sink)
val mat: Mat = ready.run()
// the usual example:
val f: Future[String] =
Source.single(1).map(_.toString).runWith(Sink.head)
Proper static typing!
Akka Streams を 20秒で説明します。
Source, Flow, Sink に適切な静的型付けをします。
Akka Streams in 20 seconds:
// types: _
Source[Int, akka.NotUsed]
Flow[Int, String, akka.NotUsed]
Sink[String, Future[String]]
Source.single(1).map(_.toString).runWith(Sink.head)
Akka Streams in 20 seconds:
// types: _
Source[Int, Unit]
Flow[Int, String, Unit]
Sink[String, Future[String]]
Source.single(1).map(_.toString).runWith(Sink.head)
Akka HTTP
Joint effort of Spray and Akka teams.
Complete HTTP Server/Client implementation.
Soon prod ready, developed ~1.5 years.
Learns from Spray’s 3-4 years history.
Since the beginning with
streaming as first class citizen.
Akka HTTP は、SprayとAkkaチームが協力して開発した、完全なHTTPサーバ/クライアント
実装です。1年半かけて開発されており、間もなく業務に耐えうるレベルになるでしょう。
It’s turtles buffers all the way down!
親亀の上に子亀、子亀の上に孫亀がのるかのように、バッファの
次にバッファ、その次にまたバッファ... と無数につらなります!
Streaming from Akka HTTP
Akka HTTP からのストリーミング
Streaming from Akka HTTP
Akka HTTP からのストリーミング
Streaming from Akka HTTP
Streaming from Akka HTTP
Streaming from Akka HTTP
No demand from TCP
=
No demand upstream
=
Source won’t generate tweets
TCPからの要求がない = 上流の要求がない
= Source はツイートを生成しません
Streaming from Akka HTTP
No demand from TCP
=
No demand upstream
=
Source won’t generate tweets
=>
TCPからの要求がない = 上流の要求がない
= Source はツイートを生成しません
Streaming from Akka HTTP
No demand from TCP
=
No demand upstream
=
Source won’t generate tweets
=>
Bounded memory
stream processing!
=>大きさが制限されたメモリーでのストリーム処理!
Client / Server “JSON Streaming” demo
Demo time
クライアント/サーバの "JSONストリーミング" デモ
Akka Streams
Hidden powers:
Parallelism
&&
Pipelining
Akka Streams の隠されたパワー:
並列処理(Parallelism)とパイプライン
Pipelining Pancakes
http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0/scala/stream-parallelism.html
Pipelining
Pipelining
Pipelining
// Takes a scoop of batter and creates a pancake with one side cooked
val fryingPan1: Flow[ScoopOfBatter, HalfCookedPancake, Unit] =
Flow[ScoopOfBatter].map { batter => HalfCookedPancake() }
// Finishes a half-cooked pancake
val fryingPan2: Flow[HalfCookedPancake, Pancake, Unit] =
Flow[HalfCookedPancake].map { halfCooked => Pancake() }
// With the two frying pans we can fully cook pancakes
val pancakeChef: Flow[ScoopOfBatter, Pancake, Unit] =
Flow[ScoopOfBatter].via(fryingPan1).via(fryingPan2)
Parallelism
???
Parallelism
Parallelism
val fryingPan: Flow[ScoopOfBatter, Pancake, Unit] =
Flow[ScoopOfBatter].map { batter => Pancake() }
val pancakeChef: Flow[ScoopOfBatter, Pancake, Unit] = Flow() {
implicit builder =>
val dispatchBatter = builder.add(Balance[ScoopOfBatter](2))
val mergePancakes = builder.add(Merge[Pancake](2))
dispatchBatter.out(0) ~> fryingPan ~> mergePancakes.in(0)
dispatchBatter.out(1) ~> fryingPan ~> mergePancakes.in(1)
(dispatchBatter.in, mergePancakes.out)
}
Parallelism
val fryingPan: Flow[ScoopOfBatter, Pancake, Unit] =
Flow[ScoopOfBatter].map { batter => Pancake() }
val pancakeChef: Flow[ScoopOfBatter, Pancake, Unit] = Flow() {
implicit builder =>
val dispatchBatter = builder.add(Balance[ScoopOfBatter](2))
val mergePancakes = builder.add(Merge[Pancake](2))
dispatchBatter.out(0) ~> fryingPan ~> mergePancakes.in(0)
dispatchBatter.out(1) ~> fryingPan ~> mergePancakes.in(1)
(dispatchBatter.in, mergePancakes.out)
}
Parallelism
val fryingPanFun: ScoopOfBatter ⇒ Future[Pancake] =
batter ⇒ Future.successful(Pancake())
val pancakeChef: Flow[ScoopOfBatter, Pancake, Unit] =
Flow[ScoopOfBatter].mapAsync(parallelism = 2)(fryingPanFun)
Or simply “mapAsync”:
Pipelining && Parallelism
Parallelism
&&
Pipelining
do the heavy-work for you.
並列処理とパイプラインは、あなたのために
きつい作業をやってくれます。
10/26/2015 spray-can: add websockets support (client & server) · Issue #134 · spray/spray
Pull requests Issues GistThis repository Search
2,092 496197Watch Star Forkspray / spray
and others
Labels
Milestone
 
akka-http
Assignee
No one assigned
111 participants
spray-can: add websockets support (client & server) #134
Closed sirthias opened this issue on Sep 4, 2012 · 129 comments
New issue
Feature
Notifications
You’re not receiving
notifications from this
thread.
Subscribe
Ownersirthias commented on Sep 4, 2012
No description provided.
analytically commented on Oct 23, 2012
+1
tommcp commented on Nov 1, 2012
+1
t3hnar commented on Nov 10, 2012
+1
alexbool commented on Nov 10, 2012
+1
olger commented on Nov 16, 2012
+1
pjean commented on Nov 29, 2012
+1
edgurgel commented on Nov 29, 2012
+1
zerni commented on Dec 10, 2012
+1
Bathtor commented on Dec 10, 2012
+1
WebSockets
A.K.A.
“Spray’s single most upvoted
feature request ever”
98 * “+1”
WebSockets は、"Spray のこれまでの機能リクエストのなかで、
単独で最も票を集めた機能" としても知られています。
Spray’s most requested feature ever:
WebSockets
path("ws") {
val handler: Flow[Message, Message] = ???
handleWebsocketMessages(handler)
}
Spray’s most requested feature ever:
WebSockets
path("ws") {
val handler: Flow[Message, Message] = ???
handleWebsocketMessages(handler)
}
Spray’s most requested feature ever:
WebSockets
path("ws") {
val handler = Flow.fromSinkAndSource(
Sink.ignore,
Source.single(TextMessage("Hello World!”)))
handleWebsocketMessages(handler)
}
Summing up…
Summing up…
要約...
buffers, buffers everywhere!
https://dev.twitter.com/streaming/overview/request-parameters#stallwarnings
あらゆるところにバッファが!
JEP-266 – soon…!
public final class Flow {
private Flow() {} // uninstantiable
@FunctionalInterface
public static interface Publisher<T> {
public void subscribe(Subscriber<? super T> subscriber);
}
public static interface Subscriber<T> {
public void onSubscribe(Subscription subscription);
public void onNext(T item);
public void onError(Throwable throwable);
public void onComplete();
}
public static interface Subscription {
public void request(long n);
public void cancel();
}
public static interface Processor<T,R> extends Subscriber<T>, Publisher<R> {
}
}
JEP-266 がまもなく...!
Back-pressure as a feature
特徴(目玉機能)としての背圧制御
Roadmap Update: Streams & HTTP
Already pretty mature and complete implementation.
WebSockets!
Play 2.5 (2.5+) uses Akka Streams.
(Scala || Java) DSL == same power.
Last phases of polishing up APIs and features.
2.4.2 release in coming weeks.
Akka 2.4 requires JDK8.
(that’s about time to do so!)
StreamsとHTTPの最新ロードマップ
既に十分成熟しており、実装が完了しました。
• Reactive Platform
• Remoting / Cluster: Docker networking support
• Cluster: Split Brain Resolver (beta)
• Akka Persistence: Cross-Scala-version snapshot deserializer
• Java 6: Extended LTS
• Akka 2.4.2 (released this month, binary compatible with 2.3)
• Akka Streams becomes non experimental in 2.4.2!
• Cluster Tools promoted to stable!
• Persistence promoted to stable!
• Persistence Queries (experimental)
• Akka Typed (experimental)
• Distributed Data (experimental)
Roadmap Update: Akka
Akka の最新ロードマップ
Links
• The projects:
• akka.io
• typesafe.com/products/typesafe-reactive-platform
• reactive-streams.org

• Viktor Klang’s interview with all RS founding members
• Akka HTTP in depth with Mathias and Johannes @ Scala.World
• Akka User - mailing list:
• https://groups.google.com/group/akka-user
• Community chat:
• http://gitter.im/akka/akka
Thanks!
onNext(Q/A)
(Now’s the time to ask things!)
ktoso @ typesafe.com
twitter: ktosopl
github: ktoso
team blog: letitcrash.com
home: akka.io
©Typesafe 2015 – All Rights Reserved

More Related Content

What's hot

Reactive Streams: Handling Data-Flow the Reactive Way
Reactive Streams: Handling Data-Flow the Reactive WayReactive Streams: Handling Data-Flow the Reactive Way
Reactive Streams: Handling Data-Flow the Reactive Way
Roland Kuhn
 
[Tokyo Scala User Group] Akka Streams & Reactive Streams (0.7)
[Tokyo Scala User Group] Akka Streams & Reactive Streams (0.7)[Tokyo Scala User Group] Akka Streams & Reactive Streams (0.7)
[Tokyo Scala User Group] Akka Streams & Reactive Streams (0.7)
Konrad Malawski
 
2014 akka-streams-tokyo-japanese
2014 akka-streams-tokyo-japanese2014 akka-streams-tokyo-japanese
2014 akka-streams-tokyo-japanese
Konrad Malawski
 
Reactive Stream Processing with Akka Streams
Reactive Stream Processing with Akka StreamsReactive Stream Processing with Akka Streams
Reactive Stream Processing with Akka StreamsKonrad Malawski
 
Reactive Streams 1.0 and Akka Streams
Reactive Streams 1.0 and Akka StreamsReactive Streams 1.0 and Akka Streams
Reactive Streams 1.0 and Akka Streams
Dean Wampler
 
Understanding Akka Streams, Back Pressure, and Asynchronous Architectures
Understanding Akka Streams, Back Pressure, and Asynchronous ArchitecturesUnderstanding Akka Streams, Back Pressure, and Asynchronous Architectures
Understanding Akka Streams, Back Pressure, and Asynchronous Architectures
Lightbend
 
Asynchronous stream processing with Akka Streams
Asynchronous stream processing with Akka StreamsAsynchronous stream processing with Akka Streams
Asynchronous stream processing with Akka Streams
Johan Andrén
 
Akka A to Z: A Guide To The Industry’s Best Toolkit for Fast Data and Microse...
Akka A to Z: A Guide To The Industry’s Best Toolkit for Fast Data and Microse...Akka A to Z: A Guide To The Industry’s Best Toolkit for Fast Data and Microse...
Akka A to Z: A Guide To The Industry’s Best Toolkit for Fast Data and Microse...
Lightbend
 
Reactive Streams / Akka Streams - GeeCON Prague 2014
Reactive Streams / Akka Streams - GeeCON Prague 2014Reactive Streams / Akka Streams - GeeCON Prague 2014
Reactive Streams / Akka Streams - GeeCON Prague 2014
Konrad Malawski
 
Akka Revealed: A JVM Architect's Journey From Resilient Actors To Scalable Cl...
Akka Revealed: A JVM Architect's Journey From Resilient Actors To Scalable Cl...Akka Revealed: A JVM Architect's Journey From Resilient Actors To Scalable Cl...
Akka Revealed: A JVM Architect's Journey From Resilient Actors To Scalable Cl...
Lightbend
 
Putting the 'I' in IoT - Building Digital Twins with Akka Microservices
Putting the 'I' in IoT - Building Digital Twins with Akka MicroservicesPutting the 'I' in IoT - Building Digital Twins with Akka Microservices
Putting the 'I' in IoT - Building Digital Twins with Akka Microservices
Lightbend
 
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...
Lightbend
 
Akka Streams - From Zero to Kafka
Akka Streams - From Zero to KafkaAkka Streams - From Zero to Kafka
Akka Streams - From Zero to Kafka
Mark Harrison
 
VJUG24 - Reactive Integrations with Akka Streams
VJUG24  - Reactive Integrations with Akka StreamsVJUG24  - Reactive Integrations with Akka Streams
VJUG24 - Reactive Integrations with Akka Streams
Johan Andrén
 
Akka Actor presentation
Akka Actor presentationAkka Actor presentation
Akka Actor presentation
Gene Chang
 
Introduction to akka actors with java 8
Introduction to akka actors with java 8Introduction to akka actors with java 8
Introduction to akka actors with java 8
Johan Andrén
 
Journey into Reactive Streams and Akka Streams
Journey into Reactive Streams and Akka StreamsJourney into Reactive Streams and Akka Streams
Journey into Reactive Streams and Akka Streams
Kevin Webber
 
Reactive Jersey Client
Reactive Jersey ClientReactive Jersey Client
Reactive Jersey Client
Michal Gajdos
 
Akka Streams and HTTP
Akka Streams and HTTPAkka Streams and HTTP
Akka Streams and HTTP
Roland Kuhn
 
Streaming Microservices With Akka Streams And Kafka Streams
Streaming Microservices With Akka Streams And Kafka StreamsStreaming Microservices With Akka Streams And Kafka Streams
Streaming Microservices With Akka Streams And Kafka Streams
Lightbend
 

What's hot (20)

Reactive Streams: Handling Data-Flow the Reactive Way
Reactive Streams: Handling Data-Flow the Reactive WayReactive Streams: Handling Data-Flow the Reactive Way
Reactive Streams: Handling Data-Flow the Reactive Way
 
[Tokyo Scala User Group] Akka Streams & Reactive Streams (0.7)
[Tokyo Scala User Group] Akka Streams & Reactive Streams (0.7)[Tokyo Scala User Group] Akka Streams & Reactive Streams (0.7)
[Tokyo Scala User Group] Akka Streams & Reactive Streams (0.7)
 
2014 akka-streams-tokyo-japanese
2014 akka-streams-tokyo-japanese2014 akka-streams-tokyo-japanese
2014 akka-streams-tokyo-japanese
 
Reactive Stream Processing with Akka Streams
Reactive Stream Processing with Akka StreamsReactive Stream Processing with Akka Streams
Reactive Stream Processing with Akka Streams
 
Reactive Streams 1.0 and Akka Streams
Reactive Streams 1.0 and Akka StreamsReactive Streams 1.0 and Akka Streams
Reactive Streams 1.0 and Akka Streams
 
Understanding Akka Streams, Back Pressure, and Asynchronous Architectures
Understanding Akka Streams, Back Pressure, and Asynchronous ArchitecturesUnderstanding Akka Streams, Back Pressure, and Asynchronous Architectures
Understanding Akka Streams, Back Pressure, and Asynchronous Architectures
 
Asynchronous stream processing with Akka Streams
Asynchronous stream processing with Akka StreamsAsynchronous stream processing with Akka Streams
Asynchronous stream processing with Akka Streams
 
Akka A to Z: A Guide To The Industry’s Best Toolkit for Fast Data and Microse...
Akka A to Z: A Guide To The Industry’s Best Toolkit for Fast Data and Microse...Akka A to Z: A Guide To The Industry’s Best Toolkit for Fast Data and Microse...
Akka A to Z: A Guide To The Industry’s Best Toolkit for Fast Data and Microse...
 
Reactive Streams / Akka Streams - GeeCON Prague 2014
Reactive Streams / Akka Streams - GeeCON Prague 2014Reactive Streams / Akka Streams - GeeCON Prague 2014
Reactive Streams / Akka Streams - GeeCON Prague 2014
 
Akka Revealed: A JVM Architect's Journey From Resilient Actors To Scalable Cl...
Akka Revealed: A JVM Architect's Journey From Resilient Actors To Scalable Cl...Akka Revealed: A JVM Architect's Journey From Resilient Actors To Scalable Cl...
Akka Revealed: A JVM Architect's Journey From Resilient Actors To Scalable Cl...
 
Putting the 'I' in IoT - Building Digital Twins with Akka Microservices
Putting the 'I' in IoT - Building Digital Twins with Akka MicroservicesPutting the 'I' in IoT - Building Digital Twins with Akka Microservices
Putting the 'I' in IoT - Building Digital Twins with Akka Microservices
 
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...
 
Akka Streams - From Zero to Kafka
Akka Streams - From Zero to KafkaAkka Streams - From Zero to Kafka
Akka Streams - From Zero to Kafka
 
VJUG24 - Reactive Integrations with Akka Streams
VJUG24  - Reactive Integrations with Akka StreamsVJUG24  - Reactive Integrations with Akka Streams
VJUG24 - Reactive Integrations with Akka Streams
 
Akka Actor presentation
Akka Actor presentationAkka Actor presentation
Akka Actor presentation
 
Introduction to akka actors with java 8
Introduction to akka actors with java 8Introduction to akka actors with java 8
Introduction to akka actors with java 8
 
Journey into Reactive Streams and Akka Streams
Journey into Reactive Streams and Akka StreamsJourney into Reactive Streams and Akka Streams
Journey into Reactive Streams and Akka Streams
 
Reactive Jersey Client
Reactive Jersey ClientReactive Jersey Client
Reactive Jersey Client
 
Akka Streams and HTTP
Akka Streams and HTTPAkka Streams and HTTP
Akka Streams and HTTP
 
Streaming Microservices With Akka Streams And Kafka Streams
Streaming Microservices With Akka Streams And Kafka StreamsStreaming Microservices With Akka Streams And Kafka Streams
Streaming Microservices With Akka Streams And Kafka Streams
 

Viewers also liked

100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK
100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK
100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK
Konrad Malawski
 
Fresh from the Oven (04.2015): Experimental Akka Typed and Akka Streams
Fresh from the Oven (04.2015): Experimental Akka Typed and Akka StreamsFresh from the Oven (04.2015): Experimental Akka Typed and Akka Streams
Fresh from the Oven (04.2015): Experimental Akka Typed and Akka StreamsKonrad Malawski
 
The things we don't see – stories of Software, Scala and Akka
The things we don't see – stories of Software, Scala and AkkaThe things we don't see – stories of Software, Scala and Akka
The things we don't see – stories of Software, Scala and Akka
Konrad Malawski
 
Krakow communities @ 2016
Krakow communities @ 2016Krakow communities @ 2016
Krakow communities @ 2016
Konrad Malawski
 
The Need for Async @ ScalaWorld
The Need for Async @ ScalaWorldThe Need for Async @ ScalaWorld
The Need for Async @ ScalaWorld
Konrad Malawski
 
DDDing Tools = Akka Persistence
DDDing Tools = Akka PersistenceDDDing Tools = Akka Persistence
DDDing Tools = Akka Persistence
Konrad Malawski
 
Distributed Consensus A.K.A. "What do we eat for lunch?"
Distributed Consensus A.K.A. "What do we eat for lunch?"Distributed Consensus A.K.A. "What do we eat for lunch?"
Distributed Consensus A.K.A. "What do we eat for lunch?"
Konrad Malawski
 
Akka persistence == event sourcing in 30 minutes
Akka persistence == event sourcing in 30 minutesAkka persistence == event sourcing in 30 minutes
Akka persistence == event sourcing in 30 minutes
Konrad Malawski
 
Streams processing with Storm
Streams processing with StormStreams processing with Storm
Streams processing with StormMariusz Gil
 
JavaOne 2013: Java 8 - The Good Parts
JavaOne 2013: Java 8 - The Good PartsJavaOne 2013: Java 8 - The Good Parts
JavaOne 2013: Java 8 - The Good Parts
Konrad Malawski
 
Open soucerers - jak zacząć swoją przygodę z open source
Open soucerers - jak zacząć swoją przygodę z open sourceOpen soucerers - jak zacząć swoją przygodę z open source
Open soucerers - jak zacząć swoją przygodę z open source
Konrad Malawski
 
ゴシッププロトコルによる冗長化と負荷分散の検証
ゴシッププロトコルによる冗長化と負荷分散の検証ゴシッププロトコルによる冗長化と負荷分散の検証
ゴシッププロトコルによる冗長化と負荷分散の検証Sugawara Genki
 
Janab e Zainab Ki Shakhsiyat (Hindi) - By: Syed ul Ulema Syed Ali Naqi Naqvi ...
Janab e Zainab Ki Shakhsiyat (Hindi) - By: Syed ul Ulema Syed Ali Naqi Naqvi ...Janab e Zainab Ki Shakhsiyat (Hindi) - By: Syed ul Ulema Syed Ali Naqi Naqvi ...
Janab e Zainab Ki Shakhsiyat (Hindi) - By: Syed ul Ulema Syed Ali Naqi Naqvi ...
Jamal Mirza
 
HBase RowKey design for Akka Persistence
HBase RowKey design for Akka PersistenceHBase RowKey design for Akka Persistence
HBase RowKey design for Akka Persistence
Konrad Malawski
 
Scalding - the not-so-basics @ ScalaDays 2014
Scalding - the not-so-basics @ ScalaDays 2014Scalding - the not-so-basics @ ScalaDays 2014
Scalding - the not-so-basics @ ScalaDays 2014
Konrad Malawski
 
Need for Async: Hot pursuit for scalable applications
Need for Async: Hot pursuit for scalable applicationsNeed for Async: Hot pursuit for scalable applications
Need for Async: Hot pursuit for scalable applications
Konrad Malawski
 
Ebay legacy-code-retreat
Ebay legacy-code-retreatEbay legacy-code-retreat
Ebay legacy-code-retreatKonrad Malawski
 

Viewers also liked (18)

100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK
100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK
100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK
 
Fresh from the Oven (04.2015): Experimental Akka Typed and Akka Streams
Fresh from the Oven (04.2015): Experimental Akka Typed and Akka StreamsFresh from the Oven (04.2015): Experimental Akka Typed and Akka Streams
Fresh from the Oven (04.2015): Experimental Akka Typed and Akka Streams
 
The things we don't see – stories of Software, Scala and Akka
The things we don't see – stories of Software, Scala and AkkaThe things we don't see – stories of Software, Scala and Akka
The things we don't see – stories of Software, Scala and Akka
 
Krakow communities @ 2016
Krakow communities @ 2016Krakow communities @ 2016
Krakow communities @ 2016
 
The Need for Async @ ScalaWorld
The Need for Async @ ScalaWorldThe Need for Async @ ScalaWorld
The Need for Async @ ScalaWorld
 
DDDing Tools = Akka Persistence
DDDing Tools = Akka PersistenceDDDing Tools = Akka Persistence
DDDing Tools = Akka Persistence
 
Distributed Consensus A.K.A. "What do we eat for lunch?"
Distributed Consensus A.K.A. "What do we eat for lunch?"Distributed Consensus A.K.A. "What do we eat for lunch?"
Distributed Consensus A.K.A. "What do we eat for lunch?"
 
Akka persistence == event sourcing in 30 minutes
Akka persistence == event sourcing in 30 minutesAkka persistence == event sourcing in 30 minutes
Akka persistence == event sourcing in 30 minutes
 
Streams processing with Storm
Streams processing with StormStreams processing with Storm
Streams processing with Storm
 
JavaOne 2013: Java 8 - The Good Parts
JavaOne 2013: Java 8 - The Good PartsJavaOne 2013: Java 8 - The Good Parts
JavaOne 2013: Java 8 - The Good Parts
 
Open soucerers - jak zacząć swoją przygodę z open source
Open soucerers - jak zacząć swoją przygodę z open sourceOpen soucerers - jak zacząć swoją przygodę z open source
Open soucerers - jak zacząć swoją przygodę z open source
 
ゴシッププロトコルによる冗長化と負荷分散の検証
ゴシッププロトコルによる冗長化と負荷分散の検証ゴシッププロトコルによる冗長化と負荷分散の検証
ゴシッププロトコルによる冗長化と負荷分散の検証
 
Janab e Zainab Ki Shakhsiyat (Hindi) - By: Syed ul Ulema Syed Ali Naqi Naqvi ...
Janab e Zainab Ki Shakhsiyat (Hindi) - By: Syed ul Ulema Syed Ali Naqi Naqvi ...Janab e Zainab Ki Shakhsiyat (Hindi) - By: Syed ul Ulema Syed Ali Naqi Naqvi ...
Janab e Zainab Ki Shakhsiyat (Hindi) - By: Syed ul Ulema Syed Ali Naqi Naqvi ...
 
HBase RowKey design for Akka Persistence
HBase RowKey design for Akka PersistenceHBase RowKey design for Akka Persistence
HBase RowKey design for Akka Persistence
 
Scalding - the not-so-basics @ ScalaDays 2014
Scalding - the not-so-basics @ ScalaDays 2014Scalding - the not-so-basics @ ScalaDays 2014
Scalding - the not-so-basics @ ScalaDays 2014
 
Need for Async: Hot pursuit for scalable applications
Need for Async: Hot pursuit for scalable applicationsNeed for Async: Hot pursuit for scalable applications
Need for Async: Hot pursuit for scalable applications
 
Ebay legacy-code-retreat
Ebay legacy-code-retreatEbay legacy-code-retreat
Ebay legacy-code-retreat
 
Android at-xsolve
Android at-xsolveAndroid at-xsolve
Android at-xsolve
 

Similar to [Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ Reactive Shinjuku

Reactive Streams, j.u.concurrent, & Beyond!
Reactive Streams, j.u.concurrent, & Beyond!Reactive Streams, j.u.concurrent, & Beyond!
Reactive Streams, j.u.concurrent, & Beyond!
C4Media
 
Not Only Streams for Akademia JLabs
Not Only Streams for Akademia JLabsNot Only Streams for Akademia JLabs
Not Only Streams for Akademia JLabs
Konrad Malawski
 
OpenStack - Pour un Cloud ouvert - Journées FedeRez 2014
OpenStack - Pour un Cloud ouvert - Journées FedeRez 2014OpenStack - Pour un Cloud ouvert - Journées FedeRez 2014
OpenStack - Pour un Cloud ouvert - Journées FedeRez 2014
Cédric Soulas
 
Devoxx
DevoxxDevoxx
OpenStack and Rackspace
OpenStack and RackspaceOpenStack and Rackspace
OpenStack and Rackspace
Everett Toews
 
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
Codemotion
 
LarKC Tutorial at ISWC 2009 - Introduction
LarKC Tutorial at ISWC 2009 - IntroductionLarKC Tutorial at ISWC 2009 - Introduction
LarKC Tutorial at ISWC 2009 - Introduction
LarKC
 
Selling Scala to your boss
Selling Scala to your bossSelling Scala to your boss
Selling Scala to your boss
João Bernardino
 
Assist software awesome scala
Assist software   awesome scalaAssist software   awesome scala
Assist software awesome scala
AssistSoftware
 
Take the Open Cloud for a Test Drive!
Take the Open Cloud for a Test Drive!Take the Open Cloud for a Test Drive!
Take the Open Cloud for a Test Drive!Rackspace
 
Openstack - An introduction/Installation - Presented at Dr Dobb's conference...
 Openstack - An introduction/Installation - Presented at Dr Dobb's conference... Openstack - An introduction/Installation - Presented at Dr Dobb's conference...
Openstack - An introduction/Installation - Presented at Dr Dobb's conference...
Rahul Krishna Upadhyaya
 
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
Codemotion
 
OpenStack - The History - The Community
OpenStack - The History - The Community OpenStack - The History - The Community
OpenStack - The History - The Community
Cédric Soulas
 
TOWARDS Hybrid OpenStack Clouds in the Real World
TOWARDS Hybrid OpenStack Clouds in the Real WorldTOWARDS Hybrid OpenStack Clouds in the Real World
TOWARDS Hybrid OpenStack Clouds in the Real World
Andrew Hickey
 
Cascalog at May Bay Area Hadoop User Group
Cascalog at May Bay Area Hadoop User GroupCascalog at May Bay Area Hadoop User Group
Cascalog at May Bay Area Hadoop User Group
nathanmarz
 
OpenStack Training | OpenStack Tutorial For Beginners | OpenStack Certificati...
OpenStack Training | OpenStack Tutorial For Beginners | OpenStack Certificati...OpenStack Training | OpenStack Tutorial For Beginners | OpenStack Certificati...
OpenStack Training | OpenStack Tutorial For Beginners | OpenStack Certificati...
Edureka!
 
Building a Reactive System with Akka - Workshop @ O'Reilly SAConf NYC
Building a Reactive System with Akka - Workshop @ O'Reilly SAConf NYCBuilding a Reactive System with Akka - Workshop @ O'Reilly SAConf NYC
Building a Reactive System with Akka - Workshop @ O'Reilly SAConf NYC
Konrad Malawski
 
OpenStack-101-Modular-Deck-1.pptx
OpenStack-101-Modular-Deck-1.pptxOpenStack-101-Modular-Deck-1.pptx
OpenStack-101-Modular-Deck-1.pptx
LarrySevilla3
 
Akka and Kubernetes, the beginning of a beautiful relationship
Akka and Kubernetes, the beginning of a beautiful relationshipAkka and Kubernetes, the beginning of a beautiful relationship
Akka and Kubernetes, the beginning of a beautiful relationship
Hugh McKee
 

Similar to [Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ Reactive Shinjuku (20)

Reactive Streams, j.u.concurrent, & Beyond!
Reactive Streams, j.u.concurrent, & Beyond!Reactive Streams, j.u.concurrent, & Beyond!
Reactive Streams, j.u.concurrent, & Beyond!
 
Not Only Streams for Akademia JLabs
Not Only Streams for Akademia JLabsNot Only Streams for Akademia JLabs
Not Only Streams for Akademia JLabs
 
OpenStack - Pour un Cloud ouvert - Journées FedeRez 2014
OpenStack - Pour un Cloud ouvert - Journées FedeRez 2014OpenStack - Pour un Cloud ouvert - Journées FedeRez 2014
OpenStack - Pour un Cloud ouvert - Journées FedeRez 2014
 
Devoxx
DevoxxDevoxx
Devoxx
 
OpenStack and Rackspace
OpenStack and RackspaceOpenStack and Rackspace
OpenStack and Rackspace
 
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
 
LarKC Tutorial at ISWC 2009 - Introduction
LarKC Tutorial at ISWC 2009 - IntroductionLarKC Tutorial at ISWC 2009 - Introduction
LarKC Tutorial at ISWC 2009 - Introduction
 
Selling Scala to your boss
Selling Scala to your bossSelling Scala to your boss
Selling Scala to your boss
 
Assist software awesome scala
Assist software   awesome scalaAssist software   awesome scala
Assist software awesome scala
 
Take the Open Cloud for a Test Drive!
Take the Open Cloud for a Test Drive!Take the Open Cloud for a Test Drive!
Take the Open Cloud for a Test Drive!
 
Openstack - An introduction/Installation - Presented at Dr Dobb's conference...
 Openstack - An introduction/Installation - Presented at Dr Dobb's conference... Openstack - An introduction/Installation - Presented at Dr Dobb's conference...
Openstack - An introduction/Installation - Presented at Dr Dobb's conference...
 
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
 
OpenStack - The History - The Community
OpenStack - The History - The Community OpenStack - The History - The Community
OpenStack - The History - The Community
 
TOWARDS Hybrid OpenStack Clouds in the Real World
TOWARDS Hybrid OpenStack Clouds in the Real WorldTOWARDS Hybrid OpenStack Clouds in the Real World
TOWARDS Hybrid OpenStack Clouds in the Real World
 
Play framework
Play frameworkPlay framework
Play framework
 
Cascalog at May Bay Area Hadoop User Group
Cascalog at May Bay Area Hadoop User GroupCascalog at May Bay Area Hadoop User Group
Cascalog at May Bay Area Hadoop User Group
 
OpenStack Training | OpenStack Tutorial For Beginners | OpenStack Certificati...
OpenStack Training | OpenStack Tutorial For Beginners | OpenStack Certificati...OpenStack Training | OpenStack Tutorial For Beginners | OpenStack Certificati...
OpenStack Training | OpenStack Tutorial For Beginners | OpenStack Certificati...
 
Building a Reactive System with Akka - Workshop @ O'Reilly SAConf NYC
Building a Reactive System with Akka - Workshop @ O'Reilly SAConf NYCBuilding a Reactive System with Akka - Workshop @ O'Reilly SAConf NYC
Building a Reactive System with Akka - Workshop @ O'Reilly SAConf NYC
 
OpenStack-101-Modular-Deck-1.pptx
OpenStack-101-Modular-Deck-1.pptxOpenStack-101-Modular-Deck-1.pptx
OpenStack-101-Modular-Deck-1.pptx
 
Akka and Kubernetes, the beginning of a beautiful relationship
Akka and Kubernetes, the beginning of a beautiful relationshipAkka and Kubernetes, the beginning of a beautiful relationship
Akka and Kubernetes, the beginning of a beautiful relationship
 

Recently uploaded

How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Jeffrey Haguewood
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 

Recently uploaded (20)

How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 

[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ Reactive Shinjuku

  • 1. Konrad 'ktoso' Malawski GeeCON 2014 @ Kraków, PL Konrad `@ktosopl` Malawski @ Reactive Systems Meetup streams How reactive streams change the JVM Ecosystem & reative streams と akka streams が JVMエコシステムをどのように変えるか
  • 2. Konrad `ktoso` Malawski (we’re renaming soon!) Akka Team, Reactive Streams TCK, Maintaining Akka Http TypesafeのKonrad `ktoso` Malawskiです。 (Typesafeもうすぐ会社名を変更します)
  • 3. Konrad `@ktosopl` Malawski akka.io typesafe.com geecon.org Java.pl / KrakowScala.pl sckrk.com / meetup.com/Paper-Cup @ London GDGKrakow.pl lambdakrk.pl (we’re renaming soon!)
  • 4.
  • 5. Nice to meet you! Who are you guys? はじめまして!
  • 6. Agenda for today: • Story & landscape • The Reactive Streams Protocol • Akka Streams / Demo • Akka Http / Demo • Q/A? 本日のアジェンダです。経緯と展望、Reacive Streams プロ トコル、Akka Streamsとデモ、Akka Http とデモ、Q/A
  • 7. Reactive Streams - story: early FRP http://blogs.msdn.com/b/rxteam/archive/2009/11/17/announcing-reactive-extensions-rx-for-net-silverlight.aspx http://infoscience.epfl.ch/record/176887/files/DeprecatingObservers2012.pdf - Ingo Maier, Martin Odersky https://github.com/ReactiveX/RxJava/graphs/contributors https://github.com/reactor/reactor/graphs/contributors https://medium.com/@viktorklang/reactive-streams-1-0-0-interview-faaca2c00bec#.69st3rndy - .NETs’ Reactive Extensions .NET 3.5 Reactive Streams のストーリー: 初期のFRP .NET の Reactive Extensions がリリースされました。
  • 8. Reactive Streams - story: 2013’s impls ~2013: Reactive Programming becoming widely adopted on JVM. - Play introduced “Iteratees” - Akka (2009) had Akka-IO (TCP etc.) - Ben starts work on RxJava http://blogs.msdn.com/b/rxteam/archive/2009/11/17/announcing-reactive-extensions-rx-for-net-silverlight.aspx http://infoscience.epfl.ch/record/176887/files/DeprecatingObservers2012.pdf - Ingo Maier, Martin Odersky https://github.com/ReactiveX/RxJava/graphs/contributors https://github.com/reactor/reactor/graphs/contributors https://medium.com/@viktorklang/reactive-streams-1-0-0-interview-faaca2c00bec#.69st3rndy Teams discuss need for back-pressure in simple user API. Play’s Iteratee / Akka’s NACK in IO. } 2013年には Reactive Programming が JVM 上で広く採用されるようになりました。 Play,Akkaのチームは簡潔なユーザAPIによる背圧制御の必要性を議論していました。
  • 9. Reactive Streams - story: 2013’s impls Play Iteratees – pull back-pressure, difficult API http://blogs.msdn.com/b/rxteam/archive/2009/11/17/announcing-reactive-extensions-rx-for-net-silverlight.aspx http://infoscience.epfl.ch/record/176887/files/DeprecatingObservers2012.pdf - Ingo Maier, Martin Odersky https://github.com/ReactiveX/RxJava/graphs/contributors https://github.com/reactor/reactor/graphs/contributors https://medium.com/@viktorklang/reactive-streams-1-0-0-interview-faaca2c00bec#.69st3rndy Akka-IO – NACK back-pressure; low-level IO (Bytes); messaging API RxJava – no back-pressure, nice API Play の Iteratee は pull 型の背圧制御でAPIが難しく、Akka-IO は NACK 背圧制御で 低レベルI/OとメッセージングAPI, RxJava は背圧制御はないが優れたAPIでした。
  • 10. Reactive Streams - Play’s Iteratees def fold[B]( done: (A, Input[E]) => Promise[B], cont: (Input[E] => Iteratee[E, A]) => Promise[B], error: (String, Input[E]) => Promise[B] ): Promise[B] // an iteratee that consumes chunkes of String and produces an Int Iteratee[String,Int] https://www.playframework.com/documentation/2.0/Iteratees Feb 2013 Iteratees solved the back-pressure problem, but were hard to use. Iteratee & Enumeratee – Haskell inspired. Play / Akka teams looking for common concept. 2013年2月, Play の Iteratee は背圧制御の問題を解決しましたが使いづらく、 Play/Akkaのチームは共通のコンセプトを探していました。
  • 11. Reactive Streams - expert group founded October 2013 Roland Kuhn (Akka) and Erik Meijer (Rx .NET) meet in Lausanne, while recording “Principles of Reactive Programming” Coursera Course. Viktor Klang (Akka), Erik Meijer, Ben Christensen (RxJava) and Marius Eriksen (Twitter) meet at Twitter HQ. The term “reactive non-blocking asynchronous back-pressure” gets coined. 2013年10月, Roland Kuhn(Akka)、Erik Meijer (Rx .NET) らにより"リアクティブ ノンブロッキング非同期背圧制御"という言葉が造り出されました。
  • 12. Reactive Streams - expert group founded October 2013 Roland Kuhn (Akka) and Erik Meijer (Rx .NET) meet in Lausanne, while recording “Principles of Reactive Programming” Coursera Course. Viktor Klang (Akka), Erik Meijer, Ben Christensen (RxJava) and Marius Eriksen (Twitter) meet at Twitter HQ. The term “reactive non-blocking asynchronous back-pressure” gets coined. Goals: - asynchronous - never block (waste) - safe (back-threads pressured) - purely local abstraction - allow synchronous impls. Also, for our examples today: - compatible with TCP 非同期、ブロックしない、安全、純粋にローカルのような抽象化、同期の実装も許すこ とをゴールとしました。また、今日の前例にならいTCPとの互換性も目指しました。
  • 13. Reactive Streams - expert group founded October 2013 Roland Kuhn (Akka) and Erik Meijer (Rx .NET) meet in Lausanne, while recording “Principles of Reactive Programming” Coursera Course. Viktor Klang (Akka), Erik Meijer, Ben Christensen (RxJava) and Marius Eriksen (Twitter) meet at Twitter HQ. The term “reactive non-blocking asynchronous back-pressure” gets coined. December 2013 Stephane Maldini & Jon Brisbin (Pivotal Reactor) contacted by Viktor. Sephane Maldini と Jon Brisbin (Pival Reactor) がViktor にコン タクトしました。
  • 14. Reactive Streams - expert group founded October 2013 Roland Kuhn (Akka) and Erik Meijer (Rx .NET) meet in Lausanne, while recording “Principles of Reactive Programming” Coursera Course. Viktor Klang (Akka), Erik Meijer, Ben Christensen (RxJava) and Marius Eriksen (Twitter) meet at Twitter HQ. The term “reactive non-blocking asynchronous back-pressure” gets coined. December 2013 Stephane Maldini & Jon Brisbin (Pivotal Reactor) contacted by Viktor. Soon after, the “Reactive Streams” expert group is formed. Also joining the efforts: Doug Lea (Oracle), EndreVarga (Akka), Johannes Rudolph & 
 Mathias Doenitz (Spray), and many others, including myself join the effort soon after. まもなく "Reactive Streams" エキスパートグループが創設されました。 Doug Lea(Oracle)や、私自身も含めた多くの人々が参画しました。
  • 15. October 2013 Roland Kuhn (Akka) and Erik Meijer (Rx .NET) meet in Lausanne, while recording “Principles of Reactive Programming” Coursera Course. Viktor Klang (Akka), Erik Meijer, Ben Christensen (RxJava) and Marius Eriksen (Twitter) meet at Twitter HQ. The term “reactive non-blocking asynchronous back-pressure” gets coined. December 2013 Stephane Maldini & Jon Brisbin (Pivotal Reactor) contacted by Viktor. Soon after, the “Reactive Streams” expert group is formed. Also joining the efforts: Doug Lea (Oracle), EndreVarga (Akka), Johannes Rudolph & 
 Mathias Doenitz (Spray), and many others, including myself join the effort soon after. Reactive Streams - expert group founded I ended up implementing much of the TCK. Please use it, let me know if it needs improvements :-) 私はTCK(Technology Compatibility Kit) の大部分の実装を終えました。 ぜひ使ってみて、もし改良が必要なら教えてください :-)
  • 16. Reactive Streams - story: 2013’s impls 2014–2015: Reactive Streams Spec & TCK development, and implementations. 1.0 released on April 28th 2015, with 5+ accompanying implementations. 2015 Proposed to be included with JDK9 by Doug Lea via JEP-266 “More Concurrency Updates” http://hg.openjdk.java.net/jdk9/jdk9/jdk/file/6e50b992bef4/src/java.base/share/classes/java/util/concurrent/Flow.java 2014-2015に Reactive Streams の仕様とTCKが開発・実装され、 2015年4月28日に 1.0 が5つ以上の実装と共にリリースされました。
  • 17. 2014–2015: Reactive Streams Spec & TCK development, and implementations. 1.0 released on April 28th 2015, with 5+ accompanying implementations. 2015 Proposed to be included with JDK9 by Doug Lea via JEP-266 “More Concurrency Updates” http://hg.openjdk.java.net/jdk9/jdk9/jdk/file/6e50b992bef4/src/java.base/share/classes/java/util/concurrent/Flow.java Reactive Streams - story: 2013’s impls Doug Lea により、これを JDK9 に含めることが JEP-266 "More Concurrency Updates" を通じて提案されました。
  • 18. in a few words: • Toolkit for building scalable distributed / concurrent apps. • High Performance Actor Model implementation • “share nothing” – messaging instead of sharing state • millions of msgs, per actor, per second • Supervision trees – built-in and mandatory • Clustering and Http built-in A B BarFoo C B E A D C /Foo /Foo/A /Foo/A/B /Foo/A/D Guardian System Actor Name resolution—like a file-system akka はスケーラブルな分散/並行アプリを構築するためのツールキットです。高性能な Actorモデルの実装で、Supervisionツリー、クラスタリング/Httpを組込んでいます。
  • 20. Why back-pressure? So you’ve built your app and it’s awesome. 皆さんはアプリを構築してきました、 それは素晴らしいことです。
  • 21. Why back-pressure? Let’s not smash it horribly under load. 負荷をかけすぎて、壊さないようにしましょう。
  • 22. What is back-pressure? ? 背圧制御(back pressure) とは何でしょうか?
  • 24. No no no…! Not THAT Back-pressure! No no no…! Not THAT Back-pressure! What is back-pressure? いやいやいや...! その back pressure ではありません!
  • 26. Fast Publisher Slow Subscriber What if…? もしも、1秒間に100の命令を処理する高速なPublisherと、 1秒間に1つの命令しか処理しない低速なSuscriberだったら?
  • 27. Push + NACK model Push と NACK モデル
  • 28. Push + NACK model Subscriber usually has some kind of buffer. Subscriber は普通ある種のバッファを持っています。
  • 29. Push + NACK model
  • 30. Push + NACK model
  • 31. What if the buffer overflows? Push + NACK model もしバッファがオーバーフローしたら何が起こるでしょう?
  • 32. Use bounded buffer, drop messages + require re-sending Push + NACK model 大きさが限られたバッファを使い、 メッセージを廃棄し、再送を要求します。
  • 33. Kernel does this! Routers do this! (TCP) Use bounded buffer, drop messages + require re-sending Push + NACK model カーネルがこれを行います! ルーターがこれを行います! (TCP)
  • 34. Increase buffer size… Well, while you have memory available! Push + NACK model バッファサイズを増やしてみましょう... そう、使用できるメモリがある限りは!
  • 35. Push + NACK model メモリ不足
  • 37. NACKing Buffer overflow is imminent! バッファオーバーフローが今にも起こりそうです!
  • 38. Telling the Publisher to slow down / stop sending… NACKing Publisher にスローダウンするか、送信を止めるよう知らせます...
  • 39. NACK did not make it in time, because M was in-flight! NACKing NACK は間に合いませんでした、 メッセージが飛んできている最中だったからです!
  • 40. What if… We don’t need to back-pressure, because: speed(publisher) < speed(subscriber) We need low-overhead for “happy case” もしも、publisher のスピード < subscrber のスピードであれば、 背圧制御は必要ありません。
  • 41. No problem! Fast Subscriber => no problem 高速な Subscriber であれば、問題ありません!
  • 42. Back-pressure? Reactive-Streams = “Dynamic Push/Pull” Fast Subscriber => no problem 背圧制御? Reactive Streams = "動的な Push/Pull"
  • 43. Just push – not safe when Slow Subscriber Just pull – too slow when Fast Subscriber Reactive Streams: “dynamic push/pull” push だけだと、Subscriberが低速な時には、安全ではありません。 pull だけだと、Subscriberが高速な時には、遅すぎます。
  • 44. Solution: Dynamic adjustment Just push – not safe when Slow Subscriber Just pull – too slow when Fast Subscriber Reactive Streams: “dynamic push/pull” 解決策は、動的な調整です。
  • 45. Slow Subscriber sees it’s buffer can take 3 elements. Publisher will never blow up its buffer. Reactive Streams: “dynamic push/pull” 低速なSubscriberはバッファに3要素入れられることがわかります。 Publsherはバッファをあふれさせることは決してありません。
  • 46. Fast Publisher will send at-most 3 elements. This is pull-based-backpressure. Reactive Streams: “dynamic push/pull” 高速なPublisherは、高々3つの要素を送ります。 これがpullベースの背圧制御です。
  • 47. Fast Subscriber can issue more Request(n), before more data arrives! Reactive Streams: “dynamic push/pull” 高速なSubscriberは、データが到着する前に、 より多くのリクエストを発行することができます!
  • 48. Fast Subscriber can issue more Request(n), before more data arrives. Publisher can accumulate demand. Reactive Streams: “dynamic push/pull” 高速なSubscriberは、需要を蓄積することができます。
  • 49. Publisher accumulates total demand per subscriber. Reactive Streams: accumulate demand Publisherはsubscriberごとに需要の合計を蓄積します。
  • 50. Total demand of elements is safe to publish. Subscriber’s buffer will not overflow. Reactive Streams: accumulate demand 需要の合計分の要素をpublishしても安全です。 Subscriberのバッファはオーバーフローしないでしょう。
  • 51. http://reactive-streams.org We want to make different implementations co-operate with each other. Reactive Streams: Inter Op 私たちは、異なる実装がお互いに協力できるようにしたいのです。
  • 52. http://reactive-streams.org We want to make different implementations co-operate with each other. Reactive Streams: Inter Op 私たちは、異なる実装がお互いに協力できるようにしたいのです。
  • 53. RS is NOT a “daily use”, “end-user” API. It’s an SPI - Service Provider Interface. Reactive Streams: Inter-Op https://en.wikipedia.org/wiki/Service_provider_interface Service Provider Interface (SPI) is an API intended to be implemented or extended by a third party. RS は "毎日使用する", "エンドユーザ向けの" API ではなく、サードパーティにより 実装される、または拡張される SPI (Service Provider Interface) です。
  • 54. EmbeddedApp.fromHandler(new Handler { override def handle(ctx: Context): Unit = { // RxJava Observable val intObs = Observable.from((1 to 10).asJava) // Reactive Streams Publisher val intPub = RxReactiveStreams.toPublisher(intObs) // Akka Streams Source val stringSource = Source(intPub).map(_.toString) // Reactive Streams Publisher val stringPub = stringSource.runWith(Sink.fanoutPublisher(1, 1)) // Reactor Stream val linesStream = Streams.create(stringPub).map[String]( new reactor.function.Function[String, String] { override def apply(in: String) = in + "n" }) // and now render the HTTP response (RatPack) ctx.render(ResponseChunks.stringChunks(linesStream)) } }).test(new Consumer[TestHttpClient] { Reactive Streams: Inter-Op https://en.wikipedia.org/wiki/Service_provider_interface
  • 55. EmbeddedApp.fromHandler(new Handler { override def handle(ctx: Context): Unit = { // RxJava Observable val intObs = Observable.from((1 to 10).asJava) // Reactive Streams Publisher val intPub = RxReactiveStreams.toPublisher(intObs) // Akka Streams Source val stringSource = Source(intPub).map(_.toString) // Reactive Streams Publisher val stringPub = stringSource.runWith(Sink.fanoutPublisher(1, 1)) // Reactor Stream val linesStream = Streams.create(stringPub).map[String]( new reactor.function.Function[String, String] { override def apply(in: String) = in + "n" }) // and now render the HTTP response (RatPack) ctx.render(ResponseChunks.stringChunks(linesStream)) } }).test(new Consumer[TestHttpClient] { Reactive Streams: Inter-Op https://en.wikipedia.org/wiki/Service_provider_interface
  • 57. Akka Streams & HTTP streams & HTTP
  • 58. Akka Streams in 20 seconds: // types: Source[Out, Mat] Flow[In, Out, Mat] Sink[In, Mat] // generally speaking, it's always: val ready = Source(???).via(flow).map(_ * 2).to(sink) val mat: Mat = ready.run() // the usual example: val f: Future[String] = Source.single(1).map(_.toString).runWith(Sink.head) Proper static typing! Akka Streams を 20秒で説明します。 Source, Flow, Sink に適切な静的型付けをします。
  • 59. Akka Streams in 20 seconds: // types: _ Source[Int, akka.NotUsed] Flow[Int, String, akka.NotUsed] Sink[String, Future[String]] Source.single(1).map(_.toString).runWith(Sink.head)
  • 60. Akka Streams in 20 seconds: // types: _ Source[Int, Unit] Flow[Int, String, Unit] Sink[String, Future[String]] Source.single(1).map(_.toString).runWith(Sink.head)
  • 61. Akka HTTP Joint effort of Spray and Akka teams. Complete HTTP Server/Client implementation. Soon prod ready, developed ~1.5 years. Learns from Spray’s 3-4 years history. Since the beginning with streaming as first class citizen. Akka HTTP は、SprayとAkkaチームが協力して開発した、完全なHTTPサーバ/クライアント 実装です。1年半かけて開発されており、間もなく業務に耐えうるレベルになるでしょう。
  • 62. It’s turtles buffers all the way down! 親亀の上に子亀、子亀の上に孫亀がのるかのように、バッファの 次にバッファ、その次にまたバッファ... と無数につらなります!
  • 63. Streaming from Akka HTTP Akka HTTP からのストリーミング
  • 64. Streaming from Akka HTTP Akka HTTP からのストリーミング
  • 67. Streaming from Akka HTTP No demand from TCP = No demand upstream = Source won’t generate tweets TCPからの要求がない = 上流の要求がない = Source はツイートを生成しません
  • 68. Streaming from Akka HTTP No demand from TCP = No demand upstream = Source won’t generate tweets => TCPからの要求がない = 上流の要求がない = Source はツイートを生成しません
  • 69. Streaming from Akka HTTP No demand from TCP = No demand upstream = Source won’t generate tweets => Bounded memory stream processing! =>大きさが制限されたメモリーでのストリーム処理!
  • 70. Client / Server “JSON Streaming” demo Demo time クライアント/サーバの "JSONストリーミング" デモ
  • 71. Akka Streams Hidden powers: Parallelism && Pipelining Akka Streams の隠されたパワー: 並列処理(Parallelism)とパイプライン
  • 75. Pipelining // Takes a scoop of batter and creates a pancake with one side cooked val fryingPan1: Flow[ScoopOfBatter, HalfCookedPancake, Unit] = Flow[ScoopOfBatter].map { batter => HalfCookedPancake() } // Finishes a half-cooked pancake val fryingPan2: Flow[HalfCookedPancake, Pancake, Unit] = Flow[HalfCookedPancake].map { halfCooked => Pancake() } // With the two frying pans we can fully cook pancakes val pancakeChef: Flow[ScoopOfBatter, Pancake, Unit] = Flow[ScoopOfBatter].via(fryingPan1).via(fryingPan2)
  • 78. Parallelism val fryingPan: Flow[ScoopOfBatter, Pancake, Unit] = Flow[ScoopOfBatter].map { batter => Pancake() } val pancakeChef: Flow[ScoopOfBatter, Pancake, Unit] = Flow() { implicit builder => val dispatchBatter = builder.add(Balance[ScoopOfBatter](2)) val mergePancakes = builder.add(Merge[Pancake](2)) dispatchBatter.out(0) ~> fryingPan ~> mergePancakes.in(0) dispatchBatter.out(1) ~> fryingPan ~> mergePancakes.in(1) (dispatchBatter.in, mergePancakes.out) }
  • 79. Parallelism val fryingPan: Flow[ScoopOfBatter, Pancake, Unit] = Flow[ScoopOfBatter].map { batter => Pancake() } val pancakeChef: Flow[ScoopOfBatter, Pancake, Unit] = Flow() { implicit builder => val dispatchBatter = builder.add(Balance[ScoopOfBatter](2)) val mergePancakes = builder.add(Merge[Pancake](2)) dispatchBatter.out(0) ~> fryingPan ~> mergePancakes.in(0) dispatchBatter.out(1) ~> fryingPan ~> mergePancakes.in(1) (dispatchBatter.in, mergePancakes.out) }
  • 80. Parallelism val fryingPanFun: ScoopOfBatter ⇒ Future[Pancake] = batter ⇒ Future.successful(Pancake()) val pancakeChef: Flow[ScoopOfBatter, Pancake, Unit] = Flow[ScoopOfBatter].mapAsync(parallelism = 2)(fryingPanFun) Or simply “mapAsync”:
  • 81. Pipelining && Parallelism Parallelism && Pipelining do the heavy-work for you. 並列処理とパイプラインは、あなたのために きつい作業をやってくれます。
  • 82. 10/26/2015 spray-can: add websockets support (client & server) · Issue #134 · spray/spray Pull requests Issues GistThis repository Search 2,092 496197Watch Star Forkspray / spray and others Labels Milestone   akka-http Assignee No one assigned 111 participants spray-can: add websockets support (client & server) #134 Closed sirthias opened this issue on Sep 4, 2012 · 129 comments New issue Feature Notifications You’re not receiving notifications from this thread. Subscribe Ownersirthias commented on Sep 4, 2012 No description provided. analytically commented on Oct 23, 2012 +1 tommcp commented on Nov 1, 2012 +1 t3hnar commented on Nov 10, 2012 +1 alexbool commented on Nov 10, 2012 +1 olger commented on Nov 16, 2012 +1 pjean commented on Nov 29, 2012 +1 edgurgel commented on Nov 29, 2012 +1 zerni commented on Dec 10, 2012 +1 Bathtor commented on Dec 10, 2012 +1 WebSockets A.K.A. “Spray’s single most upvoted feature request ever” 98 * “+1” WebSockets は、"Spray のこれまでの機能リクエストのなかで、 単独で最も票を集めた機能" としても知られています。
  • 83. Spray’s most requested feature ever: WebSockets path("ws") { val handler: Flow[Message, Message] = ??? handleWebsocketMessages(handler) }
  • 84. Spray’s most requested feature ever: WebSockets path("ws") { val handler: Flow[Message, Message] = ??? handleWebsocketMessages(handler) }
  • 85. Spray’s most requested feature ever: WebSockets path("ws") { val handler = Flow.fromSinkAndSource( Sink.ignore, Source.single(TextMessage("Hello World!”))) handleWebsocketMessages(handler) }
  • 88. JEP-266 – soon…! public final class Flow { private Flow() {} // uninstantiable @FunctionalInterface public static interface Publisher<T> { public void subscribe(Subscriber<? super T> subscriber); } public static interface Subscriber<T> { public void onSubscribe(Subscription subscription); public void onNext(T item); public void onError(Throwable throwable); public void onComplete(); } public static interface Subscription { public void request(long n); public void cancel(); } public static interface Processor<T,R> extends Subscriber<T>, Publisher<R> { } } JEP-266 がまもなく...!
  • 89. Back-pressure as a feature 特徴(目玉機能)としての背圧制御
  • 90. Roadmap Update: Streams & HTTP Already pretty mature and complete implementation. WebSockets! Play 2.5 (2.5+) uses Akka Streams. (Scala || Java) DSL == same power. Last phases of polishing up APIs and features. 2.4.2 release in coming weeks. Akka 2.4 requires JDK8. (that’s about time to do so!) StreamsとHTTPの最新ロードマップ 既に十分成熟しており、実装が完了しました。
  • 91. • Reactive Platform • Remoting / Cluster: Docker networking support • Cluster: Split Brain Resolver (beta) • Akka Persistence: Cross-Scala-version snapshot deserializer • Java 6: Extended LTS • Akka 2.4.2 (released this month, binary compatible with 2.3) • Akka Streams becomes non experimental in 2.4.2! • Cluster Tools promoted to stable! • Persistence promoted to stable! • Persistence Queries (experimental) • Akka Typed (experimental) • Distributed Data (experimental) Roadmap Update: Akka Akka の最新ロードマップ
  • 92. Links • The projects: • akka.io • typesafe.com/products/typesafe-reactive-platform • reactive-streams.org
 • Viktor Klang’s interview with all RS founding members • Akka HTTP in depth with Mathias and Johannes @ Scala.World • Akka User - mailing list: • https://groups.google.com/group/akka-user • Community chat: • http://gitter.im/akka/akka
  • 93. Thanks! onNext(Q/A) (Now’s the time to ask things!) ktoso @ typesafe.com twitter: ktosopl github: ktoso team blog: letitcrash.com home: akka.io
  • 94. ©Typesafe 2015 – All Rights Reserved