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 2.4.x
and
Commercial Features
1 September 2015
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Konrad `ktoso` Malawski
Akka Team,
Reactive Streams TCK
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Reactive Platform: Akka
• Reactive Platform: Versioning explained
• Remoting / Cluster: Docker networking support
• Cluste...
Reactive Platform
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Reactive Platform
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
https://together.typesafe.com/produc...
Reactive Platform Versioning
15v05p01
year
month
patch
=
Scala 2.10.x
Akka 2.3.x
…
Akka 2.4 and RP commercial features
wit...
Reactive Platform Versioning
https://together.typesafe.com/products/reactivePlatform
15v05p01
year
month
patch
=
Scala 2.1...
Reactive Platform Versioning
https://together.typesafe.com/products/reactivePlatform
How does this help?
• Huge integratio...
NAT Support
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
support
(NAT support)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
support
(NAT support)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Available in:
RP 15v01p## (Akka ...
Docker / NAT support
docker run -d -p 8000:2551 akka-app
Akka App
172.17.0.11:2551
Outside world
example.com:8000
doc.akka...
Docker / NAT support
akka.remote {
netty.tcp {
hostname = example.com # external (logical) hostname
port = 8000 # external...
Split Brain Resolver
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Split Brain Resolver (customer beta)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Installing the Re...
Split Brain Resolver
• Fundamental Problem in all distributed systems
• SBR helps to make decisions, is not a magic wand
•...
Split Brain Resolver
• The default behaviour of Akka Cluster is “Manual Downing”:
• A node needs to issue cluster.down(add...
Heartbeats
A
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Heartbeats
A
everyone is down!
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Heartbeats
A
`n-1` is down!
I’ll take over `A`!
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Heartbeats
A
`n-1` is down!
I’ll take over `A`!
A
good if: n-1 really is down.
bad: if n-1 is just very unresponsive
Funda...
Static Quorum (3 (> (n/2 +1))
A
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Static Quorum (3 (> (n/2 +1))
we need to down
ourselves
A
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malaw...
Keep Majority (aka. dynamic quorum)
A
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Keep Majority (aka. dynamic quorum)
A
we need to down
ourselves
Akka 2.4 and RP commercial features
with Konrad `@ktosopl`...
referee node
Keep Referee
A
down-all-if-less-than-nodes
referee node
Keep Referee
A
can’t see referee node!
down-all-if-less-than-nodes
oldest node
Keep Oldest
A
can’t see oldest node!
down-if-alone
oldest node can change,
if “up until now oldest node” leave...
Persistence
Cross-scala-version
compatibility for snapshots
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Mal...
Persistence: Cross-scala-version compat
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Enhanced compa...
Persistence: Cross-scala-version compat
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Enhanced compa...
Persistence: Cross-scala-version compat
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Enhanced compa...
Persistence: Cross-scala-version compat
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
saveSnapshot( ...
Persistence: Cross-scala-version compat
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
saveSnapshot( ...
Java 6
Extended LTS
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Java 6: Extended LTS
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
• Existing RP releases keep Java ...
Java 6: Extended LTS
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
• Existing RP releases keep Java ...
Java 6: Extended LTS
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
• Existing RP releases keep Java ...
Akka 2.4
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
• 2.3 => 2.4 is a major update
• additional e...
Cluster Tools
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Now Stable!
Akka 2.4 Cluster Tools (Now Stable!)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
• Distributed Pub...
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-pub-...
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
class Publisher extends Actor {
import DistributedPubS...
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
A
B
C D
http://doc.akka.io/docs/akka/2.4.0-RC1/scala/c...
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
A
B
C
D
role: backend-2 role: backend-2
http://doc.akk...
Akka 2.4 Cluster Tools - Sharding (Now Stable!)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
A B
C
...
Akka 2.4 Cluster Tools - Sharding (Now Stable!)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
val co...
Persistence
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Now Stable!
var state = S0
persistenceId = “a”
Command
Journal
Akka 2.4 Persistence (Now Stable!)
Akka 2.4 and RP commercial features
...
var state = S0
persistenceId = “a”
Journal
Generate Events
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Mala...
var state = S0
persistenceId = “a”
Journal
Generate Events
E1
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` M...
ACK “persisted”
Journal
E1
var state = S0
persistenceId = “a”
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` M...
“Apply” event
Journal
E1
var state = S0
persistenceId = “a”
E1
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` ...
Journal
E1
var state = S0
persistenceId = “a”
E1
Okey!
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski...
Journal
E1
var state = S0
persistenceId = “a”
E1
Okey!
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski...
Journal
E1
var state = S0
persistenceId = “a”
E1
Ok, he got my $.
Akka 2.4 and RP commercial features
with Konrad `@ktosop...
…sum of states…
Journal
E1 E2 E3 E4
E5 E6 E7 E8
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2...
Snapshot Store
snapshot!
state until [E5]
S5Journal
E1 E2 E3 E4
E5 E6 E7 E8
Akka 2.4 and RP commercial features
with Konra...
Snapshot Store
state until [E8]
S8Journal
E1 E2 E3 E4
E5 E6 E7 E8
S5
Akka 2.4 and RP commercial features
with Konrad `@kto...
state until [E8]
S8
Snapshot Store
Journal
E1 E2 E3 E4
E5 E6 E7 E8
crash!
S5
Akka 2.4 and RP commercial features
with Konr...
Snapshot Store
Journal
E1 E2 E3 E4
E5 E6 E7 E8
crash!
S5
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malaws...
“bring me up-to-date!”
Snapshot Store
Journal
E1 E2 E3 E4
E5 E6 E7 E8
restart!
replay!
S5
Akka 2.4 and RP commercial featu...
“bring me up-to-date!”
Snapshot Store
restart!
replay!
S5
Journal
E1 E2 E3 E4
E5 E6 E7 E8
S5
Akka 2.4 and RP commercial fe...
state until [E8]
Snapshot Store
S5
restart!
replay!
S8
Journal
E1 E2 E3 E4
E5 E6 E7 E8
Akka 2.4 and RP commercial features...
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Advanced support for long-term schema evolution.
Event...
Persistence Query
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
New module, experimental!
Akka 2.4 Persistence Queries (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
API still ...
Akka 2.4 Persistence Queries (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
API still ...
Akka Typed
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
New module, experimental!
doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html
class Greeter extends Actor {
def receive = {
case msg: Greet ⇒
pr...
Akka 2.4 Typed (experimental)
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg....
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: Actor...
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: Actor...
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: Actor...
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: Actor...
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: Actor...
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: Actor...
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: Actor...
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: Actor...
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: Actor...
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: Actor...
Akka Distributed Data
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
New module, experimental!
Akka 2.4 Distributed Data (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
for “small, f...
Akka 2.4 Distributed Data (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
for “small, f...
Akka 2.4 Distributed Data (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
value = 5
n1:...
Akka 2.4 Distributed Data (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
value = 6
n1:...
Akka 2.4 Distributed Data (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
node-1 node-2...
Akka 2.4 Distributed Data (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
node-1 node-2...
Akka 2.4 Distributed Data (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
implicit val ...
Akka 2.4 Distributed Data (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Provided data...
Akka Streams & Http
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
1.0 (experimental) currently.
will...
Akka Streams & Http (experimental, to eventually join Akka 2.4.x)
Akka 2.4 and RP commercial features
with Konrad `@ktosop...
http://www.reactive-streams.org/
Reactive Streams (1.0, en route to be included in JDK9)
Akka Streams <-> Actors – Advanced
val subscriber = ActorSubscriber(
system.actorOf(Props[SubStreamParent], ”parent”)
)
So...
Links
• akka.io
• reactive-streams.org
• akka-user
• https://www.typesafe.com/subscription
• Streams and Http
• http://doc...
Perhaps you’d also like…
WEBINAR
Introducing Typesafe
ConductR
WATCH NOW
HAVE QUESTIONS?
Get in touch with
Typesafe today!...
EXPERT TRAINING
Delivered on-site for Akka, Spark, Scala and Play
Help is just a click away. Get in touch
with Typesafe ab...
©Typesafe 2015 – All Rights Reserved©Typesafe 2015 – All Rights Reserved
Upcoming SlideShare
Loading in …5
×

Akka 2.4 plus new commercial features in Typesafe Reactive Platform

5,351 views

Published on

Technologies Referenced: Akka, Typesafe Reactive Platform
Technical Level: Introductory
Audience: Senior Developers, Architects
Presenter: Konrad Malawski, Akka Software Engineer, Typesafe, Inc.

Akka is a runtime framework for building resilient, distributed applications in Java or Scala. In this webinar, Konrad Malawski discusses the roadmap and features of the upcoming Akka 2.4.0 and reveals three upcoming enhancements that enterprises will receive in the latest certified, tested build of Typesafe Reactive Platform.

Akka Split Brain Resolver (SBR)

Akka SBR provides advanced recovery scenarios in Akka Clusters, improving on the safety of Akka’s automatic resolution to avoid cascading partitioning.
Akka Support for Docker and NAT
Run Akka Clusters in Docker containers or NAT with complete hostname and port visibility on Java 6+ and Akka 2.3.11+
Akka Long-Term Support
Receive Akka 2.4 support for Java 6, Java 7, and Scala 2.10

Published in: Software
  • Be the first to comment

Akka 2.4 plus new commercial features in Typesafe Reactive Platform

  1. 1. Akka 2.4.x and Commercial Features 1 September 2015 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  2. 2. Konrad `ktoso` Malawski Akka Team, Reactive Streams TCK Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  3. 3. Reactive Platform: Akka • Reactive Platform: Versioning explained • Remoting / Cluster: Docker networking support • Cluster: Split Brain Resolver (beta) • Akka Persistence: Cross-Scala-version snapshot deseriali • Java 6: Extended LTS • Akka 2.4.x (currently in Release Candidate phase) • Cluster Tools promoted to stable! • Persistence promoted to stable! • Persistence Queries (experimental) • Akka Typed (experimental) • Distributed Data (experimental) • Akka Streams (currently 1.0, will be included in 2.4.x eventually) • Q / A Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  4. 4. Reactive Platform Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  5. 5. Reactive Platform Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski https://together.typesafe.com/products/reactivePlatform
  6. 6. Reactive Platform Versioning 15v05p01 year month patch = Scala 2.10.x Akka 2.3.x … Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski https://together.typesafe.com/products/reactivePlatform
  7. 7. Reactive Platform Versioning https://together.typesafe.com/products/reactivePlatform 15v05p01 year month patch = Scala 2.10.x Akka 2.3.x … 15v09p01 = Scala 2.11.x Akka 2.3.12 => 2.3.++ (binary compatible!) … Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  8. 8. Reactive Platform Versioning https://together.typesafe.com/products/reactivePlatform How does this help? • Huge integration test suite before release • Certified to work well together • Priority updates / additional features • Back-ports, fixes, long-term support Life cycle of each release: 2 years Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  9. 9. NAT Support Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  10. 10. support (NAT support) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  11. 11. support (NAT support) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Available in: RP 15v01p## (Akka 2.3.x), OSS only in Akka 2.4.x (work in progress)
  12. 12. Docker / NAT support docker run -d -p 8000:2551 akka-app Akka App 172.17.0.11:2551 Outside world example.com:8000 doc.akka.io/docs/akka/2.4.0-RC1/general/remoting.html#Peer-to-Peer_vs__Client-Server Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  13. 13. Docker / NAT support akka.remote { netty.tcp { hostname = example.com # external (logical) hostname port = 8000 # external (logical) port bind-hostname = 172.17.0.11 # internal (bind) hostname bind-port = 2552 # internal (bind) port } } Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski doc.akka.io/docs/akka/2.4.0-RC1/general/remoting.html#Peer-to-Peer_vs__Client-Server
  14. 14. Split Brain Resolver Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  15. 15. Split Brain Resolver (customer beta) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Installing the Reactive Platform with Split Brain Resolver
  16. 16. Split Brain Resolver • Fundamental Problem in all distributed systems • SBR helps to make decisions, is not a magic wand • A set of pre-built strategies for when to down nodes in a cluster. • Strategies: • Static Quorum (like zoo-keeper) • Keep Majority • Keep Oldest • Keep Referee Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski http://doc.akka.io/docs/akka/rp-15v09p01/scala/split-brain-resolver.html
  17. 17. Split Brain Resolver • The default behaviour of Akka Cluster is “Manual Downing”: • A node needs to issue cluster.down(address) • This decision can be powered by external monitoring, or DevOps teams observing the cluster. • It is Safe. however involves the most human/automated work • A naive implementation exists called “auto-downing” • It is not very safe to be used in real clusters • Definitely not a good choice for apps using Persistence • It is not recommended for production deployments. Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski http://doc.akka.io/docs/akka/rp-15v09p01/scala/split-brain-resolver.html
  18. 18. Heartbeats A Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  19. 19. Heartbeats A everyone is down! Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  20. 20. Heartbeats A `n-1` is down! I’ll take over `A`! Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  21. 21. Heartbeats A `n-1` is down! I’ll take over `A`! A good if: n-1 really is down. bad: if n-1 is just very unresponsive Fundamentally, it is hard to distinguish the two states in distributed systems. Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  22. 22. Static Quorum (3 (> (n/2 +1)) A Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  23. 23. Static Quorum (3 (> (n/2 +1)) we need to down ourselves A Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  24. 24. Keep Majority (aka. dynamic quorum) A Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  25. 25. Keep Majority (aka. dynamic quorum) A we need to down ourselves Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  26. 26. referee node Keep Referee A down-all-if-less-than-nodes
  27. 27. referee node Keep Referee A can’t see referee node! down-all-if-less-than-nodes
  28. 28. oldest node Keep Oldest A can’t see oldest node! down-if-alone oldest node can change, if “up until now oldest node” leaves the cluster. This is more dynamic than keep-referee.
  29. 29. Persistence Cross-scala-version compatibility for snapshots Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  30. 30. Persistence: Cross-scala-version compat Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Enhanced compatibility for persistent snapshot envelope. (Payload compatibility depends on application.)
  31. 31. Persistence: Cross-scala-version compat Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Enhanced compatibility for persistent snapshot envelope. (Payload compatibility depends on application.) • Scala 2.10 is not binary compatible with 2.11 • 10 => 11 is “major update” by design
  32. 32. Persistence: Cross-scala-version compat Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Enhanced compatibility for persistent snapshot envelope. (Payload compatibility depends on application.) • More compatible deserialisation than the language itself! • Eases migration to latest Scala versions • (Your journal may actually not be affected and be compatible anyway.) • Scala 2.10 is not binary compatible with 2.11 • 10 => 11 is “major update” by design
  33. 33. Persistence: Cross-scala-version compat Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski saveSnapshot( ) Akka 2.3 + Scala 2.10
  34. 34. Persistence: Cross-scala-version compat Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski saveSnapshot( ) Akka 2.3 + Scala 2.10 Akka 2.3 + Scala 2.11 loadSnapshot
  35. 35. Java 6 Extended LTS Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  36. 36. Java 6: Extended LTS Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski • Existing RP releases keep Java 1.6 compatibility
  37. 37. Java 6: Extended LTS Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski • Existing RP releases keep Java 1.6 compatibility • Akka Streams & Http currently work with 1.6 • will be merged into Akka 2.4 (likely after 1.1) • we can back-port and support for RP (Akka 2.3)
  38. 38. Java 6: Extended LTS Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski • Existing RP releases keep Java 1.6 compatibility • Akka Streams & Http currently work with 1.6 • will be merged into Akka 2.4 (likely after 1.1) • we can back-port and support for RP (Akka 2.3) • Akka 2.4 does require Java 8 • Scala 2.11 + Scala 2.12 (once released) • it will enter RP once released
  39. 39. Akka 2.4 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  40. 40. Akka 2.4 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski • 2.3 => 2.4 is a major update • additional effort made it binary compatible! • it does require Java 1.8 • i.e. update your JDK, same sources “just work” • Future: • Version bump to 3.0 if binary incompatible
  41. 41. Cluster Tools Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Now Stable!
  42. 42. Akka 2.4 Cluster Tools (Now Stable!) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski • Distributed Pub Sub • Smart message batching (1 send per node) • Cluster Singleton • useful for “master” or coordinator Actors • Cluster Sharding • useful for sharding load onto the cluster • graceful shut-down • balancing load across cluster
  43. 43. Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-pub-sub.html class Subscriber extends Actor with ActorLogging { import DistributedPubSubMediator.{ Subscribe, SubscribeAck } val mediator = DistributedPubSub(context.system).mediator // subscribe to the topic named "content" mediator ! Subscribe("content", self) def receive = { case SubscribeAck(Subscribe("content", None, `self`)) ⇒ context become ready } def ready: Actor.Receive = { case s: String ⇒ log.info("Got {}", s) } } Akka 2.4 Cluster Tools - PubSub (Now Stable!)
  44. 44. Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski class Publisher extends Actor { import DistributedPubSubMediator.Publish // activate the extension val mediator = DistributedPubSub(context.system).mediator def receive = { case in: String ⇒ val out = in.toUpperCase mediator ! Publish("content", out) } } doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-pub-sub.html Akka 2.4 Cluster Tools - PubSub (Now Stable!)
  45. 45. Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski A B C D http://doc.akka.io/docs/akka/2.4.0-RC1/scala/cluster-singleton.html Akka 2.4 Cluster Tools - Cluster Singleton (Now Stable!)
  46. 46. Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski A B C D role: backend-2 role: backend-2 http://doc.akka.io/docs/akka/2.4.0-RC1/scala/cluster-singleton.html Akka 2.4 Cluster Tools - Cluster Singleton (Now Stable!)
  47. 47. Akka 2.4 Cluster Tools - Sharding (Now Stable!) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski A B C D doc.akka.io/docs/akka/2.4.0-RC1/scala/cluster-sharding.html
  48. 48. Akka 2.4 Cluster Tools - Sharding (Now Stable!) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski val counterRegion: ActorRef = ClusterSharding(system).start( typeName = "Counter", entityProps = Props[Counter], settings = ClusterShardingSettings(system), extractEntityId = extractEntityId, extractShardId = extractShardId) val counterRegion: ActorRef = ClusterSharding(system).shardRegion("Counter") counterRegion ! Get(123) expectMsg(0) Start a shard region: Other nodes in cluster send messages to it: doc.akka.io/docs/akka/2.4.0-RC1/scala/cluster-sharding.html
  49. 49. Persistence Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Now Stable!
  50. 50. var state = S0 persistenceId = “a” Command Journal Akka 2.4 Persistence (Now Stable!) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  51. 51. var state = S0 persistenceId = “a” Journal Generate Events Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  52. 52. var state = S0 persistenceId = “a” Journal Generate Events E1 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  53. 53. ACK “persisted” Journal E1 var state = S0 persistenceId = “a” Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  54. 54. “Apply” event Journal E1 var state = S0 persistenceId = “a” E1 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  55. 55. Journal E1 var state = S0 persistenceId = “a” E1 Okey! Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  56. 56. Journal E1 var state = S0 persistenceId = “a” E1 Okey! Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  57. 57. Journal E1 var state = S0 persistenceId = “a” E1 Ok, he got my $. Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  58. 58. …sum of states… Journal E1 E2 E3 E4 E5 E6 E7 E8 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  59. 59. Snapshot Store snapshot! state until [E5] S5Journal E1 E2 E3 E4 E5 E6 E7 E8 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  60. 60. Snapshot Store state until [E8] S8Journal E1 E2 E3 E4 E5 E6 E7 E8 S5 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  61. 61. state until [E8] S8 Snapshot Store Journal E1 E2 E3 E4 E5 E6 E7 E8 crash! S5 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  62. 62. Snapshot Store Journal E1 E2 E3 E4 E5 E6 E7 E8 crash! S5 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  63. 63. “bring me up-to-date!” Snapshot Store Journal E1 E2 E3 E4 E5 E6 E7 E8 restart! replay! S5 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  64. 64. “bring me up-to-date!” Snapshot Store restart! replay! S5 Journal E1 E2 E3 E4 E5 E6 E7 E8 S5 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  65. 65. state until [E8] Snapshot Store S5 restart! replay! S8 Journal E1 E2 E3 E4 E5 E6 E7 E8 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  66. 66. Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Advanced support for long-term schema evolution. EventAdapters & StringManifestSerializers Akka 2.4 Persistence (Now Stable!)
  67. 67. Persistence Query Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski New module, experimental!
  68. 68. Akka 2.4 Persistence Queries (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski API still work in progress, should be polished very soon. val query: Source[RichEvent, QueryStats] = readJournal.query(ByTagsWithStats(Set("red", "blue"))) query .map { event => s"Event payload: ${event.payload}" } .runWith(Sink.ignore)
  69. 69. Akka 2.4 Persistence Queries (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski API still work in progress, should be polished very soon. val query: Source[RichEvent, QueryStats] = readJournal.query(ByTagsWithStats(Set("red", "blue"))) query .map { event => s"Event payload: ${event.payload}" } .runWith(Sink.ignore) Journalwrite-side query-side Query Optimised Journal Simple view / result
  70. 70. Akka Typed Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski New module, experimental!
  71. 71. doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka 2.4 Typed (experimental)
  72. 72. Akka 2.4 Typed (experimental) val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html
  73. 73. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed The main concept is Behaviour[T] Explicit protocols for the win! doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  74. 74. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed Since Behaviour[Greet] is typed, msgis-a Greet. doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  75. 75. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed The Behaviour[T]is the receive. doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  76. 76. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed sender()is no more. Explicit protocols for the win! doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  77. 77. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed sender()is no more. Explicit protocols for the win! final case class Greet(whom: String, replyTo: ActorRef[Greeted]) doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  78. 78. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed ActorRef[T]is now typed! doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  79. 79. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed become()is required. And replaced by returning the “next” Behaviour[T] // context.become(receive) doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  80. 80. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed become()is required. And replaced by returning the “next” Behaviour[T] On a conceptual level at least, we provide Static[T]if you don’t need become. // context.become(receive) doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  81. 81. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed become()is required. And replaced by returning the “next” Behaviour[T] Special behaviors: Same / Unhandled / Empty / Stopped / Ignore // context.become(receive) doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  82. 82. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed “Root actor” is not user-defined for ActorSystem[T] Encourages thinking about supervision. doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  83. 83. Akka Distributed Data Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski New module, experimental!
  84. 84. Akka 2.4 Distributed Data (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski for “small, fast data” Implements various CRDTs and gossips changes through the Cluster. CRDTs = Conflict-free Replicated Data Types Data structures that can be concurrently updated and always eventually converge on the same value. doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
  85. 85. Akka 2.4 Distributed Data (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski for “small, fast data” Implements various CRDTs and gossips changes through the Cluster. CRDTs = Conflict-free Replicated Data Types Data structures that can be concurrently updated and always eventually converge on the same value. doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
  86. 86. Akka 2.4 Distributed Data (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski value = 5 n1: 2 n2: 0 n3: 3 Akka Cluster (gossip) GCounter example: value = 5 n1: 2 n2: 0 n3: 3 value = 5 n1: 2 n2: 0 n3: 3 node-1 node-2 node-3 doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
  87. 87. Akka 2.4 Distributed Data (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski value = 6 n1: 2+1 n2: 0 n3: 3 Akka Cluster (gossip) GCounter example: value = 5 n1: 2 n2: 0 n3: 3 value = 6 n1: 2 n2: 0 n3: 3+1 node-1 node-2 node-3 doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
  88. 88. Akka 2.4 Distributed Data (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski node-1 node-2 node-3 value = 7 n1: 2+1 n2: 0 n3: 3+1 Akka Cluster (gossip) GCounter example: value = 5 n1: 2 n2: 0 n3: 3 value = 6 n1: 2 n2: 0 n3: 3+1 doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
  89. 89. Akka 2.4 Distributed Data (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski node-1 node-2 node-3 value = 7 n1: 2+1 n2: 0 n3: 3+1 Akka Cluster (gossip) GCounter example: value = 7 n1: 2+1 n2: 0 n3: 3+1 value = 7 n1: 2+1 n2: 0 n3: 3+1 doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
  90. 90. Akka 2.4 Distributed Data (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski implicit val node = Cluster(system) val replicator = DistributedData(system).replicator val Counter1Key = PNCounterKey("counter1") replicator ! Update(Counter1Key, PNCounter(), WriteLocal)(_ + 1) doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
  91. 91. Akka 2.4 Distributed Data (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Provided data types: • Counters: GCounter, PNCounter • Sets: GSet, ORSet • Maps: ORMap, ORMultiMap, LWWMap, PNCounterMap • Registers: LWWRegister, Flag doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
  92. 92. Akka Streams & Http Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski 1.0 (experimental) currently. will join the Akka 2.4.x release.
  93. 93. Akka Streams & Http (experimental, to eventually join Akka 2.4.x) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka Streams Asynchronous Back-pressured Stream Processing An implementation of Reactive Streams. Reactive Streams an initiative co-lead by Typesafe, Netflix, Pivotal, RedHat), allowing for inter-op of asynchronous streaming libraries. Akka Http Superseeds Spray.io, the well known high-performance Http serv Fully based on Akka Streams. http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0/scala.html
  94. 94. http://www.reactive-streams.org/ Reactive Streams (1.0, en route to be included in JDK9)
  95. 95. Akka Streams <-> Actors – Advanced val subscriber = ActorSubscriber( system.actorOf(Props[SubStreamParent], ”parent”) ) Source(1 to 100) .map(_.toString) .filter(_.length == 2) .drop(2) .conflate(seed => seed)((acc, i) => acc + i) .groupBy(_.last) .runWith(subscriber) All the usual ops available for Linear Flows. http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0/scala.html
  96. 96. Links • akka.io • reactive-streams.org • akka-user • https://www.typesafe.com/subscription • Streams and Http • http://doc.akka.io/docs/akka-stream-and-http- experimental/1.0/scala.html • http://doc.akka.io/docs/akka-stream-and-http- experimental/1.0/java.html • Akka 2.4 RC1 • http://doc.akka.io/docs/akka/2.4.0-RC1/scala.html • http://doc.akka.io/docs/akka/2.4.0-RC1/java.html Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  97. 97. Perhaps you’d also like… WEBINAR Introducing Typesafe ConductR WATCH NOW HAVE QUESTIONS? Get in touch with Typesafe today! CONTACT US ACTIVATOR TEMPLATE Akka Distributed Data Samples (Scala) CHECK IT OUT
  98. 98. EXPERT TRAINING Delivered on-site for Akka, Spark, Scala and Play Help is just a click away. Get in touch with Typesafe about our training courses. • Intro Workshop to Apache Spark • Fast Track & Advanced Scala • Fast Track to Akka with Java or Scala • Fast Track to Play with Java or Scala • Advanced Akka with Java or Scala Ask us about local trainings available by 24 Typesafe partners in 14 countries around the world. CONTACT US Learn more about on-site training
  99. 99. ©Typesafe 2015 – All Rights Reserved©Typesafe 2015 – All Rights Reserved

×