SlideShare a Scribd company logo
RowKey design in HBase

Akka Persistence Plugin	

Konrad 'ktoso' Malawski	

GeeCON 2014 @ Kraków, PL
Konrad `@ktosopl` Malawski
Konrad `@ktosopl` Malawski
hAkker @
Konrad `@ktosopl` Malawski
typesafe.com	

geecon.org	

Java.pl / KrakowScala.pl	

sckrk.com / meetup.com/Paper-Cup @ London	

GDGKrakow.pl 	

meetup.com/Lambda-Lounge-Krakow
hAkker @
PersistentActor
Akka	
  Persistence	
  ScalaDays	
  2014
PersistentActor
Compared to “Good ol’ CRUD Model”
state
“Mutable Record”
state
=
apply(es)
“Series of Events”
super quick domain modelling!
sealed trait Command!
case class GiveMe(geeCoins: Int) extends Command!
case class TakeMy(geeCoins: Int) extends Command
Commands - what others “tell” us; not persisted
case class Wallet(geeCoins: Int) {!
def updated(diff: Int) = State(geeCoins + diff)!
}
State - reflection of a series of events
sealed trait Event!
case class BalanceChangedBy(geeCoins: Int) extends Event!
Events - reflect effects, past tense; persisted
var state = S0
!
persistenceId = “a”
!
PersistentActor
Command
!
!
Journal
PersistentActor
var state = S0
!
persistenceId = “a”
!
!
!
Journal
Generate
Events
PersistentActor
var state = S0
!
persistenceId = “a”
!
!
!
Journal
Generate
Events
E1
PersistentActor
ACK
“persisted”
!
!
Journal
E1
var state = S0
!
persistenceId = “a”
!
PersistentActor
“Apply”
event
!
!
Journal
E1
var state = S0
!
persistenceId = “a”
!
E1
PersistentActor
!
!
Journal
E1
var state = S0
!
persistenceId = “a”
!
E1
Okey!
PersistentActor
!
!
Journal
E1
var state = S0
!
persistenceId = “a”
!
E1
Okey!
PersistentActor
!
!
Journal
E1
var state = S0
!
persistenceId = “a”
!
E1
Ok, he got my $.
PersistentActor
class BitCoinWallet extends PersistentActor {!
!
var state = Wallet(coins = 0)!
!
def updateState(e: Event): State = {!
case BalanceChangedBy(coins) => state.updatedWith(coins)!
}!
!
// API:!
!
def receiveCommand = ??? // TODO!
!
def receiveRecover = ??? // TODO!
!
}!
persist(e) { e => }
PersistentActor
def receiveCommand = {!
!
case TakeMy(coins) =>!
persist(BalanceChangedBy(coins)) { changed =>!
state = updateState(changed) !
}!
!
!
!
!
!
!
}
async callback
persist(){} - Ordering guarantees
!
!
Journal
E1
var state = S0
!
persistenceId = “a”
!
C1
C2
C3
!
!
Journal
E1
var state = S0
!
persistenceId = “a”
!
C1
C2
C3
Commands get “stashed” until
processing C1’s events are acted upon.
persist(){} - Ordering guarantees
!
!
Journal
var state = S0
!
persistenceId = “a”
!
C1
C2
C3 E1
E2
E2E1
events get
applied in-order
persist(){} - Ordering guarantees
C2
!
!
Journal
var state = S0
!
persistenceId = “a”
!
C3 E1 E2
E2E1
and the cycle
repeats
persist(){} - Ordering guarantees
Recovery
Akka	
  Persistence	
  ScalaDays
Eventsourced, recovery
/** MUST NOT SIDE-EFFECT! */!
def receiveRecover = {!
case replayedEvent: Event => !
state = updateState(replayedEvent)!
}
re-using updateState, as seen in
receiveCommand
Akka	
  Persistence	
  ScalaDays
Snapshots
Snapshots
(in SnapshotStore)
Eventsourced, snapshots
def receiveCommand = {!
case command: Command =>!
saveSnapshot(state) // async!!
}
/** MUST NOT SIDE-EFFECT! */!
def receiveRecover = {!
case SnapshotOffer(meta, snapshot: State) => !
this.state = state!
!
case replayedEvent: Event => !
updateState(replayedEvent)!
}
snapshot!?
how?
…sum of states…
Snapshots
!
!
Journal
E1 E2 E3 E4
E5 E6 E7 E8
state until [E8]
Snapshots
S8
!
!
Journal
E1 E2 E3 E4
E5 E6 E7 E8
!
!
Snapshot Store
snapshot!
state until [E8]
Snapshots
S8
!
!
Journal
E1 E2 E3 E4
E5 E6 E7 E8
crash!
!
!
Snapshot Store
snapshot!
S8
Snapshots
!
!
Journal
E1 E2 E3 E4
E5 E6 E7 E8
crash!
!
!
Snapshot Store
S8
“bring me up-to-date!”
Snapshots
!
!
Journal
E1 E2 E3 E4
E5 E6 E7 E8
restart!
replay!
!
!
Snapshot Store
S8
“bring me up-to-date!”
Snapshots
restart!
replay!
S8
!
!
Journal
E1 E2 E3 E4
E5 E6 E7 E8
!
!
Snapshot Store
S8
state until [E8]
Snapshots
restart!
replay!
S8
!
!
Journal
E1 E2 E3 E4
E5 E6 E7 E8
!
!
Snapshot Store
S8
state until [E8]
Snapshots
S8
!
!
Journal
E1 E2 E3 E4
E5 E6 E7 E8
We could delete these!
!
!
Snapshot Store
S8
trait MySummer extends Processor {!
var nums: List[Int]!
var total: Int!
!
def receive = {!
case "snap" => saveSnapshot(total)!
case SaveSnapshotSuccess(metadata) => // ...!
case SaveSnapshotFailure(metadata, reason) => // ...!
}!
}!
Snapshots, save
Async!
Snapshot Recovery
class Counter extends Processor {!
var total = 0!
!
def receive = {!
case SnapshotOffer(metadata, snap: Int) => !
total = snap!
!
case Persistent(payload, sequenceNr) => // ...!
}!
}
Persistence Plugins
Akka Persistence TCK
class JournalTCKSpec extends JournalSpec {!
lazy val config = ConfigFactory.parseString(“").!
withFallback(ConfigFactory.load())!
}!
!
!
!
!
class SnapshotStoreTCKSpec extends SnapshotStoreSpec {!
lazy val config = ConfigFactory.parseString(“").!
! ! ! ! ! ! ! ! ! ! withFallback(ConfigFactory.load())!
}!
Journal Plugin API
!
def asyncWriteMessages(!
messages: immutable.Seq[PersistentRepr]!
): Future[Unit]!
!
def asyncDeleteMessagesTo(!
persistenceId: String, !
toSequenceNr: Long, !
permanent: Boolean!
): Future[Unit]!
!
@deprecated("writeConfirmations will be removed.", since = "2.3.4")!
def asyncWriteConfirmations(!
confirmations: immutable.Seq[PersistentConfirmation]!
): Future[Unit]!
!
@deprecated("asyncDeleteMessages will be removed.", since = "2.3.4")!
def asyncDeleteMessages(!
messageIds: immutable.Seq[PersistentId], !
permanent: Boolean!
): Future[Unit]!
Optimising writes
Hbase table data layout
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
Hbase table data layout
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
HBase regions
Hbase table data layout
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
HBase regions
(lexicographical order)
Optimising writes
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
id = “a”
id = “b”
Optimising writes
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
id = “a”
id = “b”
Optimising writes
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
id = “a”
id = “b”
HOT region
Optimising writes
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
id = “a”
id = “b”
HOT region
Optimising writes
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
id = “a”
id = “b”
impossible to
spread load!
Optimising writes
hot-spotting
Optimising writes
hot-spotting
utilise
entire cluster
Optimising writes
001-a-0001,

001-b-0001,

001-a-0051
id = “a”
002-a-0002,

002-b-0002,

002-a-00052
003-a-0003,

003-b-0003,

003-a-0053
049-a-0049,

049-b-0049,

049-a-0099
…
“partition” seeds
[HMaster]
Optimising writes
001-a-0001,

001-b-0001,

001-a-0051
id = “a”
002-a-0002,

002-b-0002,

002-a-00052
003-a-0003,

003-b-0003,

003-a-0053
049-a-0049,

049-b-0049,

049-a-0099
…
“partition” seeds
[HMaster]
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
[HMaster]
Write load spread to cluster!
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
Writes to different regions! [HMaster]
Optimising writes
Optimising reads
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
id = “a”
replay!
Optimising reads
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
id = “a”
replay!
Ordered, batch read,
super efficient!!!
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
this is madness!
replay!
Optimising reads
Optimising recovery
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
Optimising recovery
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
async!
replay!
+ re-sequence
Optimising recovery
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
async!
small
batches
replay!
+ re-sequence
Optimising recovery
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
(to seqNr = 2)
Optimising recovery
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
(to seqNr = 2)
Optimising recovery
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
for short recovery = no need
to check all servers!
replay!
(to seqNr = 2)
Akka	
  Persistence	
  ScalaDays	
  2014
Akka Persistence Plugins
• Journals / Snapshot Stores (http://akka.io/community/)
• Cassandra
• HBase 
• Kafka 
• DynamoDB
• MongoDB
• shared LevelDB journal for testing
Akka	
  Persistence	
  ScalaDays	
  2014
Links
• http://akka.io
• https://groups.google.com/forum/#!forum/akka-user
!
• https://github.com/ktoso/akka-persistence-hbase
!
• http://www.slideshare.net/alexbaranau/intro-to-hbase-
internals-schema-design-for-hbase-users
• http://blog.sematext.com/2012/04/09/hbasewd-avoid-
regionserver-hotspotting-despite-writing-records-with-
sequential-keys/
• https://github.com/OpenTSDB/asynchbase
©Typesafe 2014 – All Rights Reserved

More Related Content

PDF
Reactive Streams / Akka Streams - GeeCON Prague 2014
PDF
Akka persistence == event sourcing in 30 minutes
PDF
DDDing Tools = Akka Persistence
PDF
Fresh from the Oven (04.2015): Experimental Akka Typed and Akka Streams
PDF
[Tokyo Scala User Group] Akka Streams & Reactive Streams (0.7)
PDF
Streaming all the things with akka streams
PPTX
Algebird : Abstract Algebra for big data analytics. Devoxx 2014
PDF
Asynchronous stream processing with Akka Streams
Reactive Streams / Akka Streams - GeeCON Prague 2014
Akka persistence == event sourcing in 30 minutes
DDDing Tools = Akka Persistence
Fresh from the Oven (04.2015): Experimental Akka Typed and Akka Streams
[Tokyo Scala User Group] Akka Streams & Reactive Streams (0.7)
Streaming all the things with akka streams
Algebird : Abstract Algebra for big data analytics. Devoxx 2014
Asynchronous stream processing with Akka Streams

What's hot (20)

PDF
2014 akka-streams-tokyo-japanese
PDF
A dive into akka streams: from the basics to a real-world scenario
PDF
Akka streams - Umeå java usergroup
PDF
Resilient Applications with Akka Persistence - Scaladays 2014
KEY
MongoSF - mongodb @ foursquare
PDF
Reactive stream processing using Akka streams
PPT
whats new in java 8
PDF
Async - react, don't wait - PingConf
PPT
Spark stream - Kafka
KEY
The Why and How of Scala at Twitter
PDF
Reactive programming on Android
PDF
Reactive streams processing using Akka Streams
PDF
Next generation actors with Akka
PDF
Laying down the smack on your data pipelines
PDF
Distributed Consensus A.K.A. "What do we eat for lunch?"
PDF
Buiilding reactive distributed systems with Akka
PDF
Building reactive distributed systems with Akka
KEY
Building Distributed Systems in Scala
PDF
Networks and Types - the Future of Akka @ ScalaDays NYC 2018
PPTX
Akka Actor presentation
2014 akka-streams-tokyo-japanese
A dive into akka streams: from the basics to a real-world scenario
Akka streams - Umeå java usergroup
Resilient Applications with Akka Persistence - Scaladays 2014
MongoSF - mongodb @ foursquare
Reactive stream processing using Akka streams
whats new in java 8
Async - react, don't wait - PingConf
Spark stream - Kafka
The Why and How of Scala at Twitter
Reactive programming on Android
Reactive streams processing using Akka Streams
Next generation actors with Akka
Laying down the smack on your data pipelines
Distributed Consensus A.K.A. "What do we eat for lunch?"
Buiilding reactive distributed systems with Akka
Building reactive distributed systems with Akka
Building Distributed Systems in Scala
Networks and Types - the Future of Akka @ ScalaDays NYC 2018
Akka Actor presentation
Ad

Viewers also liked (20)

PDF
Akka Typed — between Session Types and the Actor Model
PDF
Open soucerers - jak zacząć swoją przygodę z open source
PDF
JavaOne 2013: Java 8 - The Good Parts
PDF
Scalding - the not-so-basics @ ScalaDays 2014
PDF
Need for Async: Hot pursuit for scalable applications
PDF
Ebay legacy-code-retreat
PDF
Android at-xsolve
PDF
TDD drogą do oświecenia w Scali
PDF
Git tak po prostu (SFI version)
PDF
Scala dsls-dissecting-and-implementing-rogue
PDF
BDD in Action - Devoxx 2014
PDF
Android my Scala @ JFokus 2013
PDF
100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK
PDF
Disrupt 2 Grow - Devoxx 2013
PDF
The things we don't see – stories of Software, Scala and Akka
PDF
KrakDroid: Scala on Android
PDF
Scalding - Hadoop Word Count in LESS than 70 lines of code
PDF
[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...
PDF
The Need for Async @ ScalaWorld
PDF
Akka Streams in Action @ ScalaDays Berlin 2016
Akka Typed — between Session Types and the Actor Model
Open soucerers - jak zacząć swoją przygodę z open source
JavaOne 2013: Java 8 - The Good Parts
Scalding - the not-so-basics @ ScalaDays 2014
Need for Async: Hot pursuit for scalable applications
Ebay legacy-code-retreat
Android at-xsolve
TDD drogą do oświecenia w Scali
Git tak po prostu (SFI version)
Scala dsls-dissecting-and-implementing-rogue
BDD in Action - Devoxx 2014
Android my Scala @ JFokus 2013
100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK
Disrupt 2 Grow - Devoxx 2013
The things we don't see – stories of Software, Scala and Akka
KrakDroid: Scala on Android
Scalding - Hadoop Word Count in LESS than 70 lines of code
[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...
The Need for Async @ ScalaWorld
Akka Streams in Action @ ScalaDays Berlin 2016
Ad

Similar to HBase RowKey design for Akka Persistence (20)

PDF
Using Akka Persistence to build a configuration datastore
PDF
Event-sourced architectures with Akka
PDF
Event-sourced architectures with Akka - Sander Mak
PDF
Akka persistence webinar
PPTX
CQRS + ES with Scala and Akka
PDF
Avoiding the Pit of Despair - Event Sourcing with Akka and Cassandra
PDF
Data in Motion: Streaming Static Data Efficiently 2
PDF
Building Stateful Microservices With Akka
PPTX
Actors, akka, streams
PDF
Codemotion akka persistence, cqrs%2 fes y otras siglas del montón
PPT
Stefano Rocco, Roberto Bentivoglio - Scala in increasingly demanding environm...
PDF
Akka stream and Akka CQRS
ODP
Akka Persistence | Event Sourcing
PDF
Scala in increasingly demanding environments - DATABIZ
PDF
Akka with Scala
PDF
Persistent Data Structures by @aradzie
PDF
Event Sourcing using Akka on AWS
PDF
Andrzej Ludwikowski - Event Sourcing - what could possibly go wrong? - Codemo...
PDF
Event Sourcing - what could possibly go wrong?
PDF
Cassandra as an event sourced journal for big data analytics Cassandra Summit...
Using Akka Persistence to build a configuration datastore
Event-sourced architectures with Akka
Event-sourced architectures with Akka - Sander Mak
Akka persistence webinar
CQRS + ES with Scala and Akka
Avoiding the Pit of Despair - Event Sourcing with Akka and Cassandra
Data in Motion: Streaming Static Data Efficiently 2
Building Stateful Microservices With Akka
Actors, akka, streams
Codemotion akka persistence, cqrs%2 fes y otras siglas del montón
Stefano Rocco, Roberto Bentivoglio - Scala in increasingly demanding environm...
Akka stream and Akka CQRS
Akka Persistence | Event Sourcing
Scala in increasingly demanding environments - DATABIZ
Akka with Scala
Persistent Data Structures by @aradzie
Event Sourcing using Akka on AWS
Andrzej Ludwikowski - Event Sourcing - what could possibly go wrong? - Codemo...
Event Sourcing - what could possibly go wrong?
Cassandra as an event sourced journal for big data analytics Cassandra Summit...

More from Konrad Malawski (14)

PDF
Akka Typed (quick talk) - JFokus 2018
PDF
ScalaSwarm 2017 Keynote: Tough this be madness yet theres method in't
PDF
State of Akka 2017 - The best is yet to come
PDF
Building a Reactive System with Akka - Workshop @ O'Reilly SAConf NYC
PDF
Akka-chan's Survival Guide for the Streaming World
PDF
Reactive integrations with Akka Streams
PDF
Not Only Streams for Akademia JLabs
PDF
Reactive Streams, j.u.concurrent & Beyond!
PDF
End to End Akka Streams / Reactive Streams - from Business to Socket
PDF
The Cloud-natives are RESTless @ JavaOne
PDF
Krakow communities @ 2016
PDF
Zen of Akka
PDF
How Reactive Streams & Akka Streams change the JVM Ecosystem
PDF
Reactive Stream Processing with Akka Streams
Akka Typed (quick talk) - JFokus 2018
ScalaSwarm 2017 Keynote: Tough this be madness yet theres method in't
State of Akka 2017 - The best is yet to come
Building a Reactive System with Akka - Workshop @ O'Reilly SAConf NYC
Akka-chan's Survival Guide for the Streaming World
Reactive integrations with Akka Streams
Not Only Streams for Akademia JLabs
Reactive Streams, j.u.concurrent & Beyond!
End to End Akka Streams / Reactive Streams - from Business to Socket
The Cloud-natives are RESTless @ JavaOne
Krakow communities @ 2016
Zen of Akka
How Reactive Streams & Akka Streams change the JVM Ecosystem
Reactive Stream Processing with Akka Streams

Recently uploaded (20)

PPTX
Cloud computing and distributed systems.
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
[발표본] 너의 과제는 클라우드에 있어_KTDS_김동현_20250524.pdf
PDF
GamePlan Trading System Review: Professional Trader's Honest Take
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
cuic standard and advanced reporting.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Machine learning based COVID-19 study performance prediction
Cloud computing and distributed systems.
Review of recent advances in non-invasive hemoglobin estimation
NewMind AI Weekly Chronicles - August'25 Week I
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Advanced methodologies resolving dimensionality complications for autism neur...
[발표본] 너의 과제는 클라우드에 있어_KTDS_김동현_20250524.pdf
GamePlan Trading System Review: Professional Trader's Honest Take
Spectral efficient network and resource selection model in 5G networks
Understanding_Digital_Forensics_Presentation.pptx
cuic standard and advanced reporting.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Dropbox Q2 2025 Financial Results & Investor Presentation
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
The Rise and Fall of 3GPP – Time for a Sabbatical?
Machine learning based COVID-19 study performance prediction

HBase RowKey design for Akka Persistence