Jonas Bonér
@jboner
Towards
Stateful
Serverless
“We predict that Serverless Computing will grow
to dominate the future of Cloud Computing.”
- Berkeley CS Department
Cloud computing simplified: a Berkeley view on serverless computing
FaaS
FaaS = Function-as-a-Service
Is visionary
FaaS
FaaS = Function-as-a-Service
Is visionary
Paved the way
FaaS
FaaS = Function-as-a-Service
Is visionary
Paved the way
Just the first step
FaaS
FaaS = Function-as-a-Service
Serverless ≠Faas
good use-cases
For FaaS?
good use-cases
For FaaS?
Use-cases where throughput is key rather than low latency
and requests can be completed in a short time window
good use-cases
For FaaS?
1. Embarrassingly parallel processing tasks—invoked on demand & intermittently,
examples include: image processing, object recognition, log analysis
2. Low traffic applications—enterprise IT services, and spiky workloads
3. Stateless web applications—serving static content form S3 (or similar)
4. Orchestration functions—integration/coordination of calls to third-party services
5. Composing chains of functions—stateless workflow management, connected via
data dependencies
6. Job scheduling—CRON jobs, triggers, etc.
Use-cases where throughput is key rather than low latency
and requests can be completed in a short time window
FAAS: Hard to build
General-Purpose Applications
1. Functions are stateless, ephemeral, short-lived:
expensive to lose computational context & rehydrate
2. Durable state is always “somewhere else”
3. No co-location of state and processing
4. No direct addressability—all communication over external storage
5. Limited options for managing & coordinating distributed state
6. Limited options for modelling data consistency guarantees
FAAS: Hard to build
General-Purpose Applications
State
We Need Serverless Support For...
We Need Serverless Support For...
• Managing in-memory durable session state across individual requests
E.g. User Sessions, Shopping Carts, Caching
We Need Serverless Support For...
• Managing in-memory durable session state across individual requests
E.g. User Sessions, Shopping Carts, Caching
• Low-latency serving of dynamic in-memory models
E.g. Serving of Machine Learning Models
We Need Serverless Support For...
• Managing in-memory durable session state across individual requests
E.g. User Sessions, Shopping Carts, Caching
• Low-latency serving of dynamic in-memory models
E.g. Serving of Machine Learning Models
• Real-time stream processing
E.g. Recommendation, Anomaly Detection, Prediction Serving
We Need Serverless Support For...
• Managing in-memory durable session state across individual requests
E.g. User Sessions, Shopping Carts, Caching
• Low-latency serving of dynamic in-memory models
E.g. Serving of Machine Learning Models
• Real-time stream processing
E.g. Recommendation, Anomaly Detection, Prediction Serving
• Distributed resilient transactional workflows
E.g. Saga Pattern, Workflow Orchestration, Rollback/Compensating Actions
We Need Serverless Support For...
• Managing in-memory durable session state across individual requests
E.g. User Sessions, Shopping Carts, Caching
• Low-latency serving of dynamic in-memory models
E.g. Serving of Machine Learning Models
• Real-time stream processing
E.g. Recommendation, Anomaly Detection, Prediction Serving
• Distributed resilient transactional workflows
E.g. Saga Pattern, Workflow Orchestration, Rollback/Compensating Actions
• Shared collaborative workspaces
E.g. Collaborative Document Editing, Blackboards, Chat Rooms
We Need Serverless Support For...
• Managing in-memory durable session state across individual requests
E.g. User Sessions, Shopping Carts, Caching
• Low-latency serving of dynamic in-memory models
E.g. Serving of Machine Learning Models
• Real-time stream processing
E.g. Recommendation, Anomaly Detection, Prediction Serving
• Distributed resilient transactional workflows
E.g. Saga Pattern, Workflow Orchestration, Rollback/Compensating Actions
• Shared collaborative workspaces
E.g. Collaborative Document Editing, Blackboards, Chat Rooms
• Leader election, counting, voting
…and other distributed systems patterns/protocols for coordination
We Need Serverless Support For...
Technical Requirements
1. Stateful long-lived addressable virtual components
Actors
Technical Requirements
1. Stateful long-lived addressable virtual components
Actors
2. Options for distributed coordination and communication patterns
Pub-Sub, Point-To-Point, Broadcast—CRDTs, Sagas, etc.
Technical Requirements
1. Stateful long-lived addressable virtual components
Actors
2. Options for distributed coordination and communication patterns
Pub-Sub, Point-To-Point, Broadcast—CRDTs, Sagas, etc.
3. Options for managing distributed state reliably at scale
Ranging from strong to eventual consistency (durable/ephemeral)
Technical Requirements
1. Stateful long-lived addressable virtual components
Actors
2. Options for distributed coordination and communication patterns
Pub-Sub, Point-To-Point, Broadcast—CRDTs, Sagas, etc.
3. Options for managing distributed state reliably at scale
Ranging from strong to eventual consistency (durable/ephemeral)
4. Intelligent adaptive placement of stateful functions
Physical co-location of state and processing, sharding, and sticky routing
Technical Requirements
1. Stateful long-lived addressable virtual components
Actors
2. Options for distributed coordination and communication patterns
Pub-Sub, Point-To-Point, Broadcast—CRDTs, Sagas, etc.
3. Options for managing distributed state reliably at scale
Ranging from strong to eventual consistency (durable/ephemeral)
4. Intelligent adaptive placement of stateful functions
Physical co-location of state and processing, sharding, and sticky routing
5. Predictable performance, latency, and throughput
In startup time, communication/coordination, and storage of data
Technical Requirements
1. Stateful long-lived addressable virtual components
Actors
2. Options for distributed coordination and communication patterns
Pub-Sub, Point-To-Point, Broadcast—CRDTs, Sagas, etc.
3. Options for managing distributed state reliably at scale
Ranging from strong to eventual consistency (durable/ephemeral)
4. Intelligent adaptive placement of stateful functions
Physical co-location of state and processing, sharding, and sticky routing
5. Predictable performance, latency, and throughput
In startup time, communication/coordination, and storage of data
6. Ways of managing end-to-end guarantees and correctness
Technical Requirements
User Function
Deployment
FaaS Is Great At
Abstracting Over
Communication
Message In User Function
Deployment
FaaS Is Great At
Abstracting Over
Communication
Message In User Function
Deployment
Message Out
FaaS Is Great At
Abstracting Over
Communication
Message In User Function
Deployment
Message Out
FaaS With CRUD
Message In User Function
Deployment
Database
Message Out
FaaS With CRUD
Message In User Function
Deployment
Database
Message Out
Not Serverless
Leaky Abstraction
The Problem
The Function is a
Black BoX
The Problem
The Problem
Unconstrained
database access
Makes it hard to
Automate
operations
The Problem
“Freedom is not so much the absence
of restrictions as finding the right ones,
the liberating restrictions.”
- Timothy keller
User Function
Deployment
FaaS
Abstracting Over
Communication
Message In
User Function
Deployment
FaaS
Abstracting Over
Communication
Message In
User Function
Deployment
Message Out
FaaS
Abstracting Over
Communication
Message In
User Function
Deployment
Message Out
Stateful Serverless
Abstracting Over State
Message In
User Function
Deployment
Message Out
Stateful Serverless
Abstracting Over State
State In
Message In
User Function
Deployment
Message Out
Stateful Serverless
Abstracting Over State
State In State Out
Enter
What Is CloudState?
https://cloudstate.io
Overview:
1. Open Source (Apache 2.0) project
What Is CloudState?
https://cloudstate.io
Overview:
1. Open Source (Apache 2.0) project
2. Makes Stateful Serverless applications easy
What Is CloudState?
https://cloudstate.io
Overview:
1. Open Source (Apache 2.0) project
2. Makes Stateful Serverless applications easy
3. Reference implementation for a standard (protocol and spec)
What Is CloudState?
https://cloudstate.io
Overview:
1. Open Source (Apache 2.0) project
2. Makes Stateful Serverless applications easy
3. Reference implementation for a standard (protocol and spec)
4. Let’s you focus on business logic, data model, and workflow
What Is CloudState?
https://cloudstate.io
What Is CloudState?
https://cloudstate.io
What Is CloudState?
https://cloudstate.io
Don’t worry about:
1. Managing: Complexities of Distributed and Concurrent systems
What Is CloudState?
https://cloudstate.io
Don’t worry about:
1. Managing: Complexities of Distributed and Concurrent systems
2. Managing: Distributed State—Consistency, Replication, Persistence
What Is CloudState?
https://cloudstate.io
Don’t worry about:
1. Managing: Complexities of Distributed and Concurrent systems
2. Managing: Distributed State—Consistency, Replication, Persistence
3. Managing: Databases, Service Meshes, and other infrastructure
What Is CloudState?
https://cloudstate.io
Don’t worry about:
1. Managing: Complexities of Distributed and Concurrent systems
2. Managing: Distributed State—Consistency, Replication, Persistence
3. Managing: Databases, Service Meshes, and other infrastructure
4. Managing: Message Routing, Scalability, Fail-over & Recovery
What Is CloudState?
https://cloudstate.io
Don’t worry about:
1. Managing: Complexities of Distributed and Concurrent systems
2. Managing: Distributed State—Consistency, Replication, Persistence
3. Managing: Databases, Service Meshes, and other infrastructure
4. Managing: Message Routing, Scalability, Fail-over & Recovery
5. Running & Operating your application
What Is CloudState?
https://cloudstate.io
Technical Highlights:
1. Polyglot: Client libs in JavaScript, Java, Go—with upcoming support for
Python, .NET, Rust, Swift, Scala
What Is CloudState?
https://cloudstate.io
Technical Highlights:
1. Polyglot: Client libs in JavaScript, Java, Go—with upcoming support for
Python, .NET, Rust, Swift, Scala
2. PolyState: Powerful state models—Event Sourcing, CRDTs, Key Value
What Is CloudState?
https://cloudstate.io
Technical Highlights:
1. Polyglot: Client libs in JavaScript, Java, Go—with upcoming support for
Python, .NET, Rust, Swift, Scala
2. PolyState: Powerful state models—Event Sourcing, CRDTs, Key Value
3. PolyDB: Supporting SQL, NoSQL, NewSQL and in-memory replication
What Is CloudState?
https://cloudstate.io
Technical Highlights:
1. Polyglot: Client libs in JavaScript, Java, Go—with upcoming support for
Python, .NET, Rust, Swift, Scala
2. PolyState: Powerful state models—Event Sourcing, CRDTs, Key Value
3. PolyDB: Supporting SQL, NoSQL, NewSQL and in-memory replication
4. Leveraging Akka, gRPC, Knative, GraalVM, running on Kubernetes
What Is CloudState?
https://cloudstate.io
Cloudstate Architecture
Kubernetes Pod
Kubernetes Pod
Kubernetes Pod
Cloudstate Architecture
Kubernetes Pod
Kubernetes Pod
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Cloudstate Architecture
User Function
(JavaScript, Go, Java,…)
User Function
(JavaScript, Go, Java,…)
Kubernetes Pod
Kubernetes Pod
Kubernetes Pod
Cloudstate Proxy
(Akka Sidecar)
User Function
(JavaScript, Go, Java,…)
Cloudstate Architecture
User Function
(JavaScript, Go, Java,…)
User Function
(JavaScript, Go, Java,…)
Kubernetes Pod
Kubernetes Pod
Kubernetes Pod
Cloudstate Proxy
(Akka Sidecar)
User Function
(JavaScript, Go, Java,…)
Cloudstate Architecture
User Function
(JavaScript, Go, Java,…)
User Function
(JavaScript, Go, Java,…)
Kubernetes Pod
Kubernetes Pod
Kubernetes Pod
Cloudstate Proxy
(Akka Sidecar)
User Function
(JavaScript, Go, Java,…)
Cloudstate Architecture
User Function
(JavaScript, Go, Java,…)
User Function
(JavaScript, Go, Java,…)
gRPC
Kubernetes Pod
Kubernetes Pod
Kubernetes Pod
Cloudstate Proxy
(Akka Sidecar)
User Function
(JavaScript, Go, Java,…)
Cloudstate Architecture
User Function
(JavaScript, Go, Java,…)
User Function
(JavaScript, Go, Java,…)
Datastore
(Cassandra, Postgres, Spanner,…)
gRPC
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Kubernetes PodUser Function
(JavaScript, Go, Java,…)
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
Kubernetes PodUser Function
(JavaScript, Go, Java,…)
Akka Sidecar
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
Akka Cluster
Kubernetes PodUser Function
(JavaScript, Go, Java,…)
Akka Sidecar
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
Akka Cluster
Kubernetes PodUser Function
(JavaScript, Go, Java,…)
Akka Sidecar
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
HTTP
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
Akka Cluster
Kubernetes PodUser Function
(JavaScript, Go, Java,…)
Akka Sidecar
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
HTTP
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
Akka Cluster
gRPC
Kubernetes PodUser Function
(JavaScript, Go, Java,…)
Akka Sidecar
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
HTTP
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
Akka Cluster
gRPC
Kubernetes PodUser Function
(JavaScript, Go, Java,…)
Akka Sidecar
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
HTTP
Gossip, State replication, Routing
Gossip, State replication, Routing
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
Akka Cluster
Datastore
(Cassandra, Postgres, Spanner,…)
gRPC
Kubernetes PodUser Function
(JavaScript, Go, Java,…)
Akka Sidecar
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
HTTP
Gossip, State replication, Routing
Gossip, State replication, Routing
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
Akka Cluster
Datastore
(Cassandra, Postgres, Spanner,…)
gRPC
Kubernetes PodUser Function
(JavaScript, Go, Java,…)
Akka Sidecar
gRPC
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
HTTP
gRPC
Gossip, State replication, Routing
Gossip, State replication, Routing
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
Akka Cluster
Datastore
(Cassandra, Postgres, Spanner,…)
gRPC
Kubernetes PodUser Function
(JavaScript, Go, Java,…)
Akka Sidecar
gRPC
Kubernetes Pod
User Function
(JavaScript, Go, Java,…)
Akka Sidecar
gRPC
HTTP
gRPC
Events
Gossip, State replication, Routing
Gossip, State replication, Routing
CloudState helps you with
(when being a managed service)
• Pay-as-you-go:
• On-demand Instance Creation, Passivation, and Failover
• Autoscaling—up and down
CloudState helps you with
(when being a managed service)
• Pay-as-you-go:
• On-demand Instance Creation, Passivation, and Failover
• Autoscaling—up and down
• ZeroOps:
• Automation of Message Routing and Delivery
• Automation of State Management
• Service of Record—In-Memory Cluster Sharding, Co-location of Data & Processing
• Coordination State—Replication, Consistency
• Automation of Deployment, Provisioning, Upgrades
CloudState helps you with
(when being a managed service)
Akka Cluster state management
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
•Actor-based Distributed Runtime
•Decentralized Masterless P2P
•Epidemic Gossiping, Self-healing
https://akka.io
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
•Actor-based Distributed Runtime
•Decentralized Masterless P2P
•Epidemic Gossiping, Self-healing
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
•Actor-based Distributed Runtime
•Decentralized Masterless P2P
•Epidemic Gossiping, Self-healing
•State Sharding & Routing on Entity Key
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
•Actor-based Distributed Runtime
•Decentralized Masterless P2P
•Epidemic Gossiping, Self-healing
•State Sharding & Routing on Entity Key
(Key, State)
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
•Actor-based Distributed Runtime
•Decentralized Masterless P2P
•Epidemic Gossiping, Self-healing
•State Sharding & Routing on Entity Key
•Forwarding of Requests (if needed)
(Key, State)
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
•Actor-based Distributed Runtime
•Decentralized Masterless P2P
•Epidemic Gossiping, Self-healing
•State Sharding & Routing on Entity Key
•Forwarding of Requests (if needed)
(Key, State)
(Key, State)
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
•Actor-based Distributed Runtime
•Decentralized Masterless P2P
•Epidemic Gossiping, Self-healing
•State Sharding & Routing on Entity Key
•Forwarding of Requests (if needed)
•Co-Location of State & Processing
(Key, State)
(Key, State)
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
•Actor-based Distributed Runtime
•Decentralized Masterless P2P
•Epidemic Gossiping, Self-healing
•State Sharding & Routing on Entity Key
•Forwarding of Requests (if needed)
•Co-Location of State & Processing
•Backed by Event Log
(Key, State)
(Key, State)
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Event Log
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
•Actor-based Distributed Runtime
•Decentralized Masterless P2P
•Epidemic Gossiping, Self-healing
•State Sharding & Routing on Entity Key
•Forwarding of Requests (if needed)
•Co-Location of State & Processing
•Backed by Event Log
(Key, State)
(Key, State)
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Event Log
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
•Actor-based Distributed Runtime
•Decentralized Masterless P2P
•Epidemic Gossiping, Self-healing
•State Sharding & Routing on Entity Key
•Forwarding of Requests (if needed)
•Co-Location of State & Processing
•Backed by Event Log
•Automatic Failover, Rehydration, and
Rebalancing
(Key, State)
(Key, State)
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Event Log
Akka Sidecar
Akka Sidecar
Akka Sidecar
•Actor-based Distributed Runtime
•Decentralized Masterless P2P
•Epidemic Gossiping, Self-healing
•State Sharding & Routing on Entity Key
•Forwarding of Requests (if needed)
•Co-Location of State & Processing
•Backed by Event Log
•Automatic Failover, Rehydration, and
Rebalancing
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Event Log
Akka Sidecar
Akka Sidecar
Akka Sidecar
•Actor-based Distributed Runtime
•Decentralized Masterless P2P
•Epidemic Gossiping, Self-healing
•State Sharding & Routing on Entity Key
•Forwarding of Requests (if needed)
•Co-Location of State & Processing
•Backed by Event Log
•Automatic Failover, Rehydration, and
Rebalancing
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Event Log
Akka Sidecar
Akka Sidecar
Akka Sidecar
•Actor-based Distributed Runtime
•Decentralized Masterless P2P
•Epidemic Gossiping, Self-healing
•State Sharding & Routing on Entity Key
•Forwarding of Requests (if needed)
•Co-Location of State & Processing
•Backed by Event Log
•Automatic Failover, Rehydration, and
Rebalancing
(Key, State)
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Event Log
Akka Sidecar
Akka Sidecar
Akka Sidecar
•Actor-based Distributed Runtime
•Decentralized Masterless P2P
•Epidemic Gossiping, Self-healing
•State Sharding & Routing on Entity Key
•Forwarding of Requests (if needed)
•Co-Location of State & Processing
•Backed by Event Log
•Automatic Failover, Rehydration, and
Rebalancing
(Key, State)
(Key, State)
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
•In-memory Replication of State
•Gossiping State Changes
•Using CRDTs
•State Merged on Local Node
•Highly Available (N Replicas)
•Very Scalable
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
•In-memory Replication of State
•Gossiping State Changes
•Using CRDTs
•State Merged on Local Node
•Highly Available (N Replicas)
•Very Scalable
(Key, State)
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
•In-memory Replication of State
•Gossiping State Changes
•Using CRDTs
•State Merged on Local Node
•Highly Available (N Replicas)
•Very Scalable
(Key, State)
(Key, State)
(Key, State)
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
(Key, State)
(Key, State)
Akka Cluster state management
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Cluster
Akka Sidecar
Akka Sidecar
Akka Sidecar
Akka Sidecar
•In-memory Replication of State
•Gossiping State Changes
•Using CRDTs
•State Merged on Local Node
•Highly Available (N Replicas)
•Very Scalable
https://akka.io
User FunctionUser Function
User Function
User Function
User Function
User Function
User Function
Cloudstate Uses Better Models
For Distributed State
battle-tested, Yet Constrained, models like:
Cloudstate Uses Better Models
For Distributed State
battle-tested, Yet Constrained, models like:
Cloudstate Uses Better Models
For Distributed State
Event
Sourcing
battle-tested, Yet Constrained, models like:
Cloudstate Uses Better Models
For Distributed State
Event
Sourcing CRDTs
battle-tested, Yet Constrained, models like:
Cloudstate Uses Better Models
For Distributed State
Event
Sourcing CRDTs Key
Value
Event
Sourced
Entities
Happy Path
Event
Sourced
Entities
Happy Path
Command
Event
Sourced
Entities
Happy Path
Command
Event
Sourced
Entities
Happy Path
Command
Event
Sourced
Entities
Happy Path
Command
Command
Event
Log
Event
Event
Sourced
Entities
Happy Path
Command
Command
Event
Event
Log
Event
Event
Sourced
Entities
Happy Path
Command
Command
Event
Event
Log
Event
Event
Sourced
Entities
Happy Path
Command
Memory Image
Event
Sourced
Entities
Happy Path
SAD Path, RECOVER FROM FAILURE
Event
Sourced
Entities
Event
Log
SAD Path, RECOVER FROM FAILURE
Event
Sourced
Entities
Event
Log
REPLAY EventS
SAD Path, RECOVER FROM FAILURE
Event
Sourced
Entities
Event
Log
REPLAY EventS
SAD Path, RECOVER FROM FAILURE
Command
Event
Sourced
Entities
Benefits of
Event Sourcing
Benefits of
Event Sourcing
✴ One single Source of Truth with All history
Benefits of
Event Sourcing
✴ One single Source of Truth with All history
✴ Allows for Memory Image (Durable In-Memory State)
Benefits of
Event Sourcing
✴ One single Source of Truth with All history
✴ Allows for Memory Image (Durable In-Memory State)
✴ Avoids the Object-relational mismatch
Benefits of
Event Sourcing
✴ One single Source of Truth with All history
✴ Allows for Memory Image (Durable In-Memory State)
✴ Avoids the Object-relational mismatch
✴ Allows others to Subscribe to state changes
Benefits of
Event Sourcing
✴ One single Source of Truth with All history
✴ Allows for Memory Image (Durable In-Memory State)
✴ Avoids the Object-relational mismatch
✴ Allows others to Subscribe to state changes
✴ Has good Mechanical sympathy (Single Writer Principle)
Deployment
Serverless
Event Sourcing
User Function/entity
Deployment
Serverless
Event Sourcing
User Function/entity
Deployment
Event Log In
Serverless
Event Sourcing
Command In
User Function/entity
Deployment
Event Log In
Serverless
Event Sourcing
Command In
User Function/entity
Deployment
Reply Out
Event Log In
Serverless
Event Sourcing
Command In
User Function/entity
Deployment
Reply Out
Event Log In Events OUt
Serverless
Event Sourcing
Command In
User Function/entity
Deployment
Reply Out
Event Log In Events OUt
Serverless
Event Sourcing
Convergent & Commutative Replicated Data Types - Shapiro et. al. 2011
Conflict-Free Replicated Data Types
CRDT
Convergent & Commutative Replicated Data Types - Shapiro et. al. 2011
Conflict-Free Replicated Data Types
CRDTStrong Eventual Consistency
Replicated & Decentralized
Highly Available & Very Scalable
Data Types Contain Resolution Logic
Always Converge Correctly
Convergent & Commutative Replicated Data Types - Shapiro et. al. 2011
Conflict-Free Replicated Data Types
Data types
Counters
Registers
Sets
Maps
Graphs
(that all compose)
CRDTStrong Eventual Consistency
Replicated & Decentralized
Highly Available & Very Scalable
Data Types Contain Resolution Logic
Always Converge Correctly
Convergent & Commutative Replicated Data Types - Shapiro et. al. 2011
Conflict-Free Replicated Data Types
CRDTs are…
CRDTs are…
Associative
Batch-insensitive
(grouping doesn't matter)
a+(b+c)=(a+b)+c
CRDTs are…
Associative
Batch-insensitive
(grouping doesn't matter)
a+(b+c)=(a+b)+c
Commutative
Order-insensitive
(order doesn't matter)
a+b=b+a
CRDTs are…
Associative
Batch-insensitive
(grouping doesn't matter)
a+(b+c)=(a+b)+c
Commutative
Order-insensitive
(order doesn't matter)
a+b=b+a
Idempotent
Retransmission-insensitive
(duplication does not matter)
a+a=a
Deployment
Serverless
CRDTs
User Function/entity
Deployment
Serverless
CRDTs
User Function/entity
Deployment
States/Deltas IN
Serverless
CRDTs
Message In
User Function/entity
Deployment
States/Deltas IN
Serverless
CRDTs
Message In
User Function/entity
Deployment
Message Out
States/Deltas IN
Serverless
CRDTs
Message In
User Function/entity
Deployment
Message Out
States/Deltas IN States/deltas OUT
Serverless
CRDTs
Message In
User Function/entity
Deployment
Message Out
States/Deltas IN States/deltas OUT
Serverless
CRDTs
Deployment
Serverless
CRUD
Using KeyValue
User Function/entity
Deployment
Serverless
CRUD
Using KeyValue
User Function/entity
Deployment
Snapshot In
(By Entity KEy)
Serverless
CRUD
Using KeyValue
Message In
User Function/entity
Deployment
Snapshot In
(By Entity KEy)
Serverless
CRUD
Using KeyValue
Message In
User Function/entity
Deployment
Message Out
Snapshot In
(By Entity KEy)
Serverless
CRUD
Using KeyValue
Message In
User Function/entity
Deployment
Message Out
Snapshot In
(By Entity KEy)
Snapshot out
(By Entity Key)
Serverless
CRUD
Using KeyValue
Example
CRDT Entity
Presence function in a chat app
github.com/cloudstateio/samples-java-chat
Protobuf Descriptor
defining service API and messages
syntax = "proto3";

import "cloudstate/entity_key.proto";

package cloudstate.samples.presence;

option java_package = "io.cloudstate.samples.presence";

option java_outer_classname = "PresenceProtos";
Protobuf Descriptor
defining service API and messages
syntax = "proto3";

import "cloudstate/entity_key.proto";

package cloudstate.samples.presence;

option java_package = "io.cloudstate.samples.presence";

option java_outer_classname = "PresenceProtos";
"// Messages

message User {

"// Entity key is the unique entity/function identifier

string name = 1 [(.cloudstate.entity_key) = true];

}

message OnlineStatus {

bool online = 1;

}

message Empty {

}

Protobuf Descriptor
defining service API and messages
syntax = "proto3";

import "cloudstate/entity_key.proto";

package cloudstate.samples.presence;

option java_package = "io.cloudstate.samples.presence";

option java_outer_classname = "PresenceProtos";
"// Messages

message User {

"// Entity key is the unique entity/function identifier

string name = 1 [(.cloudstate.entity_key) = true];

}

message OnlineStatus {

bool online = 1;

}

message Empty {

}

"// Service API 

service Presence { 

"// Connect the given user

rpc Connect(User) returns (stream Empty);



"// Monitor the online status of the given user

rpc Monitor(User) returns (stream OnlineStatus);

}
Protobuf Descriptor
defining service API and messages
CRDT Entity for online presence
@CrdtEntity

public class PresenceEntity {

private final Vote vote; "// Vote CRDT for this user. It’s auto replicated 

"// and keeps track how each node has voted

private final String username; "// Entity Key (for sharding and routing)

public PresenceEntity(

Optional<Vote> vote, CrdtCreationContext ctx, @EntityId String username) { … }

}
CRDT Entity for online presence
@CrdtEntity

public class PresenceEntity {

private final Vote vote; "// Vote CRDT for this user. It’s auto replicated 

"// and keeps track how each node has voted

private final String username; "// Entity Key (for sharding and routing)

public PresenceEntity(

Optional<Vote> vote, CrdtCreationContext ctx, @EntityId String username) { … }

}
public static void main(String""... args) {

new CloudState()

.registerCrdtEntity(…)

.start();

}
CRDT Entity for online presence
@CrdtEntity

public class PresenceEntity {

private final Vote vote; "// Vote CRDT for this user. It’s auto replicated 

"// and keeps track how each node has voted

private final String username; "// Entity Key (for sharding and routing)

public PresenceEntity(

Optional<Vote> vote, CrdtCreationContext ctx, @EntityId String username) { … }

}
"// Here we implement the Protobuf Service API, our business logic

@CommandHandler 

public void connect(StreamedCommandContext<Empty> ctx) {

vote.vote(true); "// Set the user to online

ctx.onCancel(cancelled "-> { "// Register cancel callback for user disconnect

vote.vote(false); 

});

…

}
public static void main(String""... args) {

new CloudState()

.registerCrdtEntity(…)

.start();

}
CRDT Entity for online presence
@CrdtEntity

public class PresenceEntity {

private final Vote vote; "// Vote CRDT for this user. It’s auto replicated 

"// and keeps track how each node has voted

private final String username; "// Entity Key (for sharding and routing)

public PresenceEntity(

Optional<Vote> vote, CrdtCreationContext ctx, @EntityId String username) { … }

}
"// Here we implement the Protobuf Service API, our business logic

@CommandHandler 

public void connect(StreamedCommandContext<Empty> ctx) {

vote.vote(true); "// Set the user to online

ctx.onCancel(cancelled "-> { "// Register cancel callback for user disconnect

vote.vote(false); 

});

…

}
public static void main(String""... args) {

new CloudState()

.registerCrdtEntity(…)

.start();

}
CRDT Entity for online presence
@CommandHandler 

public OnlineStatus monitor(StreamedCommandContext<OnlineStatus> ctx) {

ctx.onChange(change "-> { "// Subscribe to Vote CRDT changes

…

}); 

…

}
Run in Kubernetes
This step is not needed when user Cloudstate as a Service (as intended)
# Install Cloudstate
kubectl create namespace cloudstate
Run in Kubernetes
This step is not needed when user Cloudstate as a Service (as intended)
# Install Cloudstate
kubectl create namespace cloudstate
kubectl apply -n cloudstate -f https:"//github.com/
cloudstateio/cloudstate/releases/download/v0.4/
cloudstate-0.4.yaml
Run in Kubernetes
This step is not needed when user Cloudstate as a Service (as intended)
# Install Cloudstate
kubectl create namespace cloudstate
kubectl apply -n cloudstate -f https:"//github.com/
cloudstateio/cloudstate/releases/download/v0.4/
cloudstate-0.4.yaml
Run in Kubernetes
# Install our Presence app and Gateway
kubectl apply -f https:"//raw.githubusercontent.com/
cloudstateio/samples-java-chat/master/deploy/
presence.yaml
This step is not needed when user Cloudstate as a Service (as intended)
# Install Cloudstate
kubectl create namespace cloudstate
kubectl apply -n cloudstate -f https:"//github.com/
cloudstateio/cloudstate/releases/download/v0.4/
cloudstate-0.4.yaml
Run in Kubernetes
# Install our Presence app and Gateway
kubectl apply -f https:"//raw.githubusercontent.com/
cloudstateio/samples-java-chat/master/deploy/
presence.yaml
kubectl apply -f https:"//raw.githubusercontent.com/
cloudstateio/samples-java-chat/master/deploy/
gateway.yaml
This step is not needed when user Cloudstate as a Service (as intended)
# Install Cloudstate
kubectl create namespace cloudstate
kubectl apply -n cloudstate -f https:"//github.com/
cloudstateio/cloudstate/releases/download/v0.4/
cloudstate-0.4.yaml
Run in Kubernetes
# Install our Presence app and Gateway
kubectl apply -f https:"//raw.githubusercontent.com/
cloudstateio/samples-java-chat/master/deploy/
presence.yaml
kubectl apply -f https:"//raw.githubusercontent.com/
cloudstateio/samples-java-chat/master/deploy/
gateway.yaml
# Scale up the app to 3 nodes

kubectl scale deploy/presence-deployment "--replicas 3

This step is not needed when user Cloudstate as a Service (as intended)
Join Us
Try Out
The Next Generation
Stateful Serverless
cloudstate.io

Cloudstate—Towards Stateful Serverless

  • 1.
  • 2.
    “We predict thatServerless Computing will grow to dominate the future of Cloud Computing.” - Berkeley CS Department Cloud computing simplified: a Berkeley view on serverless computing
  • 3.
  • 4.
    Is visionary FaaS FaaS =Function-as-a-Service
  • 5.
    Is visionary Paved theway FaaS FaaS = Function-as-a-Service
  • 6.
    Is visionary Paved theway Just the first step FaaS FaaS = Function-as-a-Service
  • 7.
  • 8.
  • 9.
    good use-cases For FaaS? Use-caseswhere throughput is key rather than low latency and requests can be completed in a short time window
  • 10.
    good use-cases For FaaS? 1.Embarrassingly parallel processing tasks—invoked on demand & intermittently, examples include: image processing, object recognition, log analysis 2. Low traffic applications—enterprise IT services, and spiky workloads 3. Stateless web applications—serving static content form S3 (or similar) 4. Orchestration functions—integration/coordination of calls to third-party services 5. Composing chains of functions—stateless workflow management, connected via data dependencies 6. Job scheduling—CRON jobs, triggers, etc. Use-cases where throughput is key rather than low latency and requests can be completed in a short time window
  • 11.
    FAAS: Hard tobuild General-Purpose Applications
  • 12.
    1. Functions arestateless, ephemeral, short-lived: expensive to lose computational context & rehydrate 2. Durable state is always “somewhere else” 3. No co-location of state and processing 4. No direct addressability—all communication over external storage 5. Limited options for managing & coordinating distributed state 6. Limited options for modelling data consistency guarantees FAAS: Hard to build General-Purpose Applications
  • 14.
  • 15.
    We Need ServerlessSupport For...
  • 16.
    We Need ServerlessSupport For...
  • 17.
    • Managing in-memorydurable session state across individual requests E.g. User Sessions, Shopping Carts, Caching We Need Serverless Support For...
  • 18.
    • Managing in-memorydurable session state across individual requests E.g. User Sessions, Shopping Carts, Caching • Low-latency serving of dynamic in-memory models E.g. Serving of Machine Learning Models We Need Serverless Support For...
  • 19.
    • Managing in-memorydurable session state across individual requests E.g. User Sessions, Shopping Carts, Caching • Low-latency serving of dynamic in-memory models E.g. Serving of Machine Learning Models • Real-time stream processing E.g. Recommendation, Anomaly Detection, Prediction Serving We Need Serverless Support For...
  • 20.
    • Managing in-memorydurable session state across individual requests E.g. User Sessions, Shopping Carts, Caching • Low-latency serving of dynamic in-memory models E.g. Serving of Machine Learning Models • Real-time stream processing E.g. Recommendation, Anomaly Detection, Prediction Serving • Distributed resilient transactional workflows E.g. Saga Pattern, Workflow Orchestration, Rollback/Compensating Actions We Need Serverless Support For...
  • 21.
    • Managing in-memorydurable session state across individual requests E.g. User Sessions, Shopping Carts, Caching • Low-latency serving of dynamic in-memory models E.g. Serving of Machine Learning Models • Real-time stream processing E.g. Recommendation, Anomaly Detection, Prediction Serving • Distributed resilient transactional workflows E.g. Saga Pattern, Workflow Orchestration, Rollback/Compensating Actions • Shared collaborative workspaces E.g. Collaborative Document Editing, Blackboards, Chat Rooms We Need Serverless Support For...
  • 22.
    • Managing in-memorydurable session state across individual requests E.g. User Sessions, Shopping Carts, Caching • Low-latency serving of dynamic in-memory models E.g. Serving of Machine Learning Models • Real-time stream processing E.g. Recommendation, Anomaly Detection, Prediction Serving • Distributed resilient transactional workflows E.g. Saga Pattern, Workflow Orchestration, Rollback/Compensating Actions • Shared collaborative workspaces E.g. Collaborative Document Editing, Blackboards, Chat Rooms • Leader election, counting, voting …and other distributed systems patterns/protocols for coordination We Need Serverless Support For...
  • 23.
  • 24.
    1. Stateful long-livedaddressable virtual components Actors Technical Requirements
  • 25.
    1. Stateful long-livedaddressable virtual components Actors 2. Options for distributed coordination and communication patterns Pub-Sub, Point-To-Point, Broadcast—CRDTs, Sagas, etc. Technical Requirements
  • 26.
    1. Stateful long-livedaddressable virtual components Actors 2. Options for distributed coordination and communication patterns Pub-Sub, Point-To-Point, Broadcast—CRDTs, Sagas, etc. 3. Options for managing distributed state reliably at scale Ranging from strong to eventual consistency (durable/ephemeral) Technical Requirements
  • 27.
    1. Stateful long-livedaddressable virtual components Actors 2. Options for distributed coordination and communication patterns Pub-Sub, Point-To-Point, Broadcast—CRDTs, Sagas, etc. 3. Options for managing distributed state reliably at scale Ranging from strong to eventual consistency (durable/ephemeral) 4. Intelligent adaptive placement of stateful functions Physical co-location of state and processing, sharding, and sticky routing Technical Requirements
  • 28.
    1. Stateful long-livedaddressable virtual components Actors 2. Options for distributed coordination and communication patterns Pub-Sub, Point-To-Point, Broadcast—CRDTs, Sagas, etc. 3. Options for managing distributed state reliably at scale Ranging from strong to eventual consistency (durable/ephemeral) 4. Intelligent adaptive placement of stateful functions Physical co-location of state and processing, sharding, and sticky routing 5. Predictable performance, latency, and throughput In startup time, communication/coordination, and storage of data Technical Requirements
  • 29.
    1. Stateful long-livedaddressable virtual components Actors 2. Options for distributed coordination and communication patterns Pub-Sub, Point-To-Point, Broadcast—CRDTs, Sagas, etc. 3. Options for managing distributed state reliably at scale Ranging from strong to eventual consistency (durable/ephemeral) 4. Intelligent adaptive placement of stateful functions Physical co-location of state and processing, sharding, and sticky routing 5. Predictable performance, latency, and throughput In startup time, communication/coordination, and storage of data 6. Ways of managing end-to-end guarantees and correctness Technical Requirements
  • 30.
    User Function Deployment FaaS IsGreat At Abstracting Over Communication
  • 31.
    Message In UserFunction Deployment FaaS Is Great At Abstracting Over Communication
  • 32.
    Message In UserFunction Deployment Message Out FaaS Is Great At Abstracting Over Communication
  • 33.
    Message In UserFunction Deployment Message Out FaaS With CRUD
  • 34.
    Message In UserFunction Deployment Database Message Out FaaS With CRUD
  • 35.
    Message In UserFunction Deployment Database Message Out Not Serverless Leaky Abstraction
  • 36.
  • 37.
    The Function isa Black BoX The Problem
  • 38.
  • 39.
    Unconstrained database access Makes ithard to Automate operations The Problem
  • 40.
    “Freedom is notso much the absence of restrictions as finding the right ones, the liberating restrictions.” - Timothy keller
  • 41.
  • 42.
  • 43.
    Message In User Function Deployment MessageOut FaaS Abstracting Over Communication
  • 44.
    Message In User Function Deployment MessageOut Stateful Serverless Abstracting Over State
  • 45.
    Message In User Function Deployment MessageOut Stateful Serverless Abstracting Over State State In
  • 46.
    Message In User Function Deployment MessageOut Stateful Serverless Abstracting Over State State In State Out
  • 47.
  • 48.
  • 49.
    Overview: 1. Open Source(Apache 2.0) project What Is CloudState? https://cloudstate.io
  • 50.
    Overview: 1. Open Source(Apache 2.0) project 2. Makes Stateful Serverless applications easy What Is CloudState? https://cloudstate.io
  • 51.
    Overview: 1. Open Source(Apache 2.0) project 2. Makes Stateful Serverless applications easy 3. Reference implementation for a standard (protocol and spec) What Is CloudState? https://cloudstate.io
  • 52.
    Overview: 1. Open Source(Apache 2.0) project 2. Makes Stateful Serverless applications easy 3. Reference implementation for a standard (protocol and spec) 4. Let’s you focus on business logic, data model, and workflow What Is CloudState? https://cloudstate.io
  • 53.
  • 54.
    What Is CloudState? https://cloudstate.io Don’tworry about: 1. Managing: Complexities of Distributed and Concurrent systems
  • 55.
    What Is CloudState? https://cloudstate.io Don’tworry about: 1. Managing: Complexities of Distributed and Concurrent systems 2. Managing: Distributed State—Consistency, Replication, Persistence
  • 56.
    What Is CloudState? https://cloudstate.io Don’tworry about: 1. Managing: Complexities of Distributed and Concurrent systems 2. Managing: Distributed State—Consistency, Replication, Persistence 3. Managing: Databases, Service Meshes, and other infrastructure
  • 57.
    What Is CloudState? https://cloudstate.io Don’tworry about: 1. Managing: Complexities of Distributed and Concurrent systems 2. Managing: Distributed State—Consistency, Replication, Persistence 3. Managing: Databases, Service Meshes, and other infrastructure 4. Managing: Message Routing, Scalability, Fail-over & Recovery
  • 58.
    What Is CloudState? https://cloudstate.io Don’tworry about: 1. Managing: Complexities of Distributed and Concurrent systems 2. Managing: Distributed State—Consistency, Replication, Persistence 3. Managing: Databases, Service Meshes, and other infrastructure 4. Managing: Message Routing, Scalability, Fail-over & Recovery 5. Running & Operating your application
  • 59.
  • 60.
    Technical Highlights: 1. Polyglot:Client libs in JavaScript, Java, Go—with upcoming support for Python, .NET, Rust, Swift, Scala What Is CloudState? https://cloudstate.io
  • 61.
    Technical Highlights: 1. Polyglot:Client libs in JavaScript, Java, Go—with upcoming support for Python, .NET, Rust, Swift, Scala 2. PolyState: Powerful state models—Event Sourcing, CRDTs, Key Value What Is CloudState? https://cloudstate.io
  • 62.
    Technical Highlights: 1. Polyglot:Client libs in JavaScript, Java, Go—with upcoming support for Python, .NET, Rust, Swift, Scala 2. PolyState: Powerful state models—Event Sourcing, CRDTs, Key Value 3. PolyDB: Supporting SQL, NoSQL, NewSQL and in-memory replication What Is CloudState? https://cloudstate.io
  • 63.
    Technical Highlights: 1. Polyglot:Client libs in JavaScript, Java, Go—with upcoming support for Python, .NET, Rust, Swift, Scala 2. PolyState: Powerful state models—Event Sourcing, CRDTs, Key Value 3. PolyDB: Supporting SQL, NoSQL, NewSQL and in-memory replication 4. Leveraging Akka, gRPC, Knative, GraalVM, running on Kubernetes What Is CloudState? https://cloudstate.io
  • 64.
  • 65.
    Kubernetes Pod Kubernetes Pod KubernetesPod Cloudstate Architecture
  • 66.
    Kubernetes Pod Kubernetes Pod KubernetesPod User Function (JavaScript, Go, Java,…) Cloudstate Architecture User Function (JavaScript, Go, Java,…) User Function (JavaScript, Go, Java,…)
  • 67.
    Kubernetes Pod Kubernetes Pod KubernetesPod Cloudstate Proxy (Akka Sidecar) User Function (JavaScript, Go, Java,…) Cloudstate Architecture User Function (JavaScript, Go, Java,…) User Function (JavaScript, Go, Java,…)
  • 68.
    Kubernetes Pod Kubernetes Pod KubernetesPod Cloudstate Proxy (Akka Sidecar) User Function (JavaScript, Go, Java,…) Cloudstate Architecture User Function (JavaScript, Go, Java,…) User Function (JavaScript, Go, Java,…)
  • 69.
    Kubernetes Pod Kubernetes Pod KubernetesPod Cloudstate Proxy (Akka Sidecar) User Function (JavaScript, Go, Java,…) Cloudstate Architecture User Function (JavaScript, Go, Java,…) User Function (JavaScript, Go, Java,…) gRPC
  • 70.
    Kubernetes Pod Kubernetes Pod KubernetesPod Cloudstate Proxy (Akka Sidecar) User Function (JavaScript, Go, Java,…) Cloudstate Architecture User Function (JavaScript, Go, Java,…) User Function (JavaScript, Go, Java,…) Datastore (Cassandra, Postgres, Spanner,…) gRPC
  • 71.
    Kubernetes Pod User Function (JavaScript,Go, Java,…) Kubernetes PodUser Function (JavaScript, Go, Java,…) Kubernetes Pod User Function (JavaScript, Go, Java,…)
  • 72.
    Kubernetes Pod User Function (JavaScript,Go, Java,…) Akka Sidecar Kubernetes PodUser Function (JavaScript, Go, Java,…) Akka Sidecar Kubernetes Pod User Function (JavaScript, Go, Java,…) Akka Sidecar
  • 73.
    Kubernetes Pod User Function (JavaScript,Go, Java,…) Akka Sidecar Akka Cluster Kubernetes PodUser Function (JavaScript, Go, Java,…) Akka Sidecar Kubernetes Pod User Function (JavaScript, Go, Java,…) Akka Sidecar
  • 74.
    Kubernetes Pod User Function (JavaScript,Go, Java,…) Akka Sidecar Akka Cluster Kubernetes PodUser Function (JavaScript, Go, Java,…) Akka Sidecar Kubernetes Pod User Function (JavaScript, Go, Java,…) Akka Sidecar HTTP
  • 75.
    Kubernetes Pod User Function (JavaScript,Go, Java,…) Akka Sidecar Akka Cluster Kubernetes PodUser Function (JavaScript, Go, Java,…) Akka Sidecar Kubernetes Pod User Function (JavaScript, Go, Java,…) Akka Sidecar HTTP
  • 76.
    Kubernetes Pod User Function (JavaScript,Go, Java,…) Akka Sidecar Akka Cluster gRPC Kubernetes PodUser Function (JavaScript, Go, Java,…) Akka Sidecar Kubernetes Pod User Function (JavaScript, Go, Java,…) Akka Sidecar HTTP
  • 77.
    Kubernetes Pod User Function (JavaScript,Go, Java,…) Akka Sidecar Akka Cluster gRPC Kubernetes PodUser Function (JavaScript, Go, Java,…) Akka Sidecar Kubernetes Pod User Function (JavaScript, Go, Java,…) Akka Sidecar HTTP Gossip, State replication, Routing Gossip, State replication, Routing
  • 78.
    Kubernetes Pod User Function (JavaScript,Go, Java,…) Akka Sidecar Akka Cluster Datastore (Cassandra, Postgres, Spanner,…) gRPC Kubernetes PodUser Function (JavaScript, Go, Java,…) Akka Sidecar Kubernetes Pod User Function (JavaScript, Go, Java,…) Akka Sidecar HTTP Gossip, State replication, Routing Gossip, State replication, Routing
  • 79.
    Kubernetes Pod User Function (JavaScript,Go, Java,…) Akka Sidecar Akka Cluster Datastore (Cassandra, Postgres, Spanner,…) gRPC Kubernetes PodUser Function (JavaScript, Go, Java,…) Akka Sidecar gRPC Kubernetes Pod User Function (JavaScript, Go, Java,…) Akka Sidecar HTTP gRPC Gossip, State replication, Routing Gossip, State replication, Routing
  • 80.
    Kubernetes Pod User Function (JavaScript,Go, Java,…) Akka Sidecar Akka Cluster Datastore (Cassandra, Postgres, Spanner,…) gRPC Kubernetes PodUser Function (JavaScript, Go, Java,…) Akka Sidecar gRPC Kubernetes Pod User Function (JavaScript, Go, Java,…) Akka Sidecar gRPC HTTP gRPC Events Gossip, State replication, Routing Gossip, State replication, Routing
  • 81.
    CloudState helps youwith (when being a managed service)
  • 82.
    • Pay-as-you-go: • On-demandInstance Creation, Passivation, and Failover • Autoscaling—up and down CloudState helps you with (when being a managed service)
  • 83.
    • Pay-as-you-go: • On-demandInstance Creation, Passivation, and Failover • Autoscaling—up and down • ZeroOps: • Automation of Message Routing and Delivery • Automation of State Management • Service of Record—In-Memory Cluster Sharding, Co-location of Data & Processing • Coordination State—Replication, Consistency • Automation of Deployment, Provisioning, Upgrades CloudState helps you with (when being a managed service)
  • 84.
  • 85.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar
  • 86.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar
  • 87.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar •Actor-based Distributed Runtime •Decentralized Masterless P2P •Epidemic Gossiping, Self-healing https://akka.io
  • 88.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar •Actor-based Distributed Runtime •Decentralized Masterless P2P •Epidemic Gossiping, Self-healing https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  • 89.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar •Actor-based Distributed Runtime •Decentralized Masterless P2P •Epidemic Gossiping, Self-healing •State Sharding & Routing on Entity Key https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  • 90.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar •Actor-based Distributed Runtime •Decentralized Masterless P2P •Epidemic Gossiping, Self-healing •State Sharding & Routing on Entity Key (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  • 91.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar •Actor-based Distributed Runtime •Decentralized Masterless P2P •Epidemic Gossiping, Self-healing •State Sharding & Routing on Entity Key •Forwarding of Requests (if needed) (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  • 92.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar •Actor-based Distributed Runtime •Decentralized Masterless P2P •Epidemic Gossiping, Self-healing •State Sharding & Routing on Entity Key •Forwarding of Requests (if needed) (Key, State) (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  • 93.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar •Actor-based Distributed Runtime •Decentralized Masterless P2P •Epidemic Gossiping, Self-healing •State Sharding & Routing on Entity Key •Forwarding of Requests (if needed) •Co-Location of State & Processing (Key, State) (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  • 94.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar •Actor-based Distributed Runtime •Decentralized Masterless P2P •Epidemic Gossiping, Self-healing •State Sharding & Routing on Entity Key •Forwarding of Requests (if needed) •Co-Location of State & Processing •Backed by Event Log (Key, State) (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  • 95.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Event Log Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar •Actor-based Distributed Runtime •Decentralized Masterless P2P •Epidemic Gossiping, Self-healing •State Sharding & Routing on Entity Key •Forwarding of Requests (if needed) •Co-Location of State & Processing •Backed by Event Log (Key, State) (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  • 96.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Event Log Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar •Actor-based Distributed Runtime •Decentralized Masterless P2P •Epidemic Gossiping, Self-healing •State Sharding & Routing on Entity Key •Forwarding of Requests (if needed) •Co-Location of State & Processing •Backed by Event Log •Automatic Failover, Rehydration, and Rebalancing (Key, State) (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  • 97.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Event Log Akka Sidecar Akka Sidecar Akka Sidecar •Actor-based Distributed Runtime •Decentralized Masterless P2P •Epidemic Gossiping, Self-healing •State Sharding & Routing on Entity Key •Forwarding of Requests (if needed) •Co-Location of State & Processing •Backed by Event Log •Automatic Failover, Rehydration, and Rebalancing https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  • 98.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Event Log Akka Sidecar Akka Sidecar Akka Sidecar •Actor-based Distributed Runtime •Decentralized Masterless P2P •Epidemic Gossiping, Self-healing •State Sharding & Routing on Entity Key •Forwarding of Requests (if needed) •Co-Location of State & Processing •Backed by Event Log •Automatic Failover, Rehydration, and Rebalancing https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  • 99.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Event Log Akka Sidecar Akka Sidecar Akka Sidecar •Actor-based Distributed Runtime •Decentralized Masterless P2P •Epidemic Gossiping, Self-healing •State Sharding & Routing on Entity Key •Forwarding of Requests (if needed) •Co-Location of State & Processing •Backed by Event Log •Automatic Failover, Rehydration, and Rebalancing (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  • 100.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Event Log Akka Sidecar Akka Sidecar Akka Sidecar •Actor-based Distributed Runtime •Decentralized Masterless P2P •Epidemic Gossiping, Self-healing •State Sharding & Routing on Entity Key •Forwarding of Requests (if needed) •Co-Location of State & Processing •Backed by Event Log •Automatic Failover, Rehydration, and Rebalancing (Key, State) (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  • 101.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar •In-memory Replication of State •Gossiping State Changes •Using CRDTs •State Merged on Local Node •Highly Available (N Replicas) •Very Scalable https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  • 102.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar •In-memory Replication of State •Gossiping State Changes •Using CRDTs •State Merged on Local Node •Highly Available (N Replicas) •Very Scalable (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  • 103.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar •In-memory Replication of State •Gossiping State Changes •Using CRDTs •State Merged on Local Node •Highly Available (N Replicas) •Very Scalable (Key, State) (Key, State) (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function (Key, State) (Key, State)
  • 104.
    Akka Cluster statemanagement Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar •In-memory Replication of State •Gossiping State Changes •Using CRDTs •State Merged on Local Node •Highly Available (N Replicas) •Very Scalable https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  • 105.
    Cloudstate Uses BetterModels For Distributed State
  • 106.
    battle-tested, Yet Constrained,models like: Cloudstate Uses Better Models For Distributed State
  • 107.
    battle-tested, Yet Constrained,models like: Cloudstate Uses Better Models For Distributed State Event Sourcing
  • 108.
    battle-tested, Yet Constrained,models like: Cloudstate Uses Better Models For Distributed State Event Sourcing CRDTs
  • 109.
    battle-tested, Yet Constrained,models like: Cloudstate Uses Better Models For Distributed State Event Sourcing CRDTs Key Value
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
    SAD Path, RECOVERFROM FAILURE Event Sourced Entities
  • 120.
    Event Log SAD Path, RECOVERFROM FAILURE Event Sourced Entities
  • 121.
    Event Log REPLAY EventS SAD Path,RECOVER FROM FAILURE Event Sourced Entities
  • 122.
    Event Log REPLAY EventS SAD Path,RECOVER FROM FAILURE Command Event Sourced Entities
  • 123.
  • 124.
    Benefits of Event Sourcing ✴One single Source of Truth with All history
  • 125.
    Benefits of Event Sourcing ✴One single Source of Truth with All history ✴ Allows for Memory Image (Durable In-Memory State)
  • 126.
    Benefits of Event Sourcing ✴One single Source of Truth with All history ✴ Allows for Memory Image (Durable In-Memory State) ✴ Avoids the Object-relational mismatch
  • 127.
    Benefits of Event Sourcing ✴One single Source of Truth with All history ✴ Allows for Memory Image (Durable In-Memory State) ✴ Avoids the Object-relational mismatch ✴ Allows others to Subscribe to state changes
  • 128.
    Benefits of Event Sourcing ✴One single Source of Truth with All history ✴ Allows for Memory Image (Durable In-Memory State) ✴ Avoids the Object-relational mismatch ✴ Allows others to Subscribe to state changes ✴ Has good Mechanical sympathy (Single Writer Principle)
  • 129.
  • 130.
  • 131.
    User Function/entity Deployment Event LogIn Serverless Event Sourcing
  • 132.
    Command In User Function/entity Deployment EventLog In Serverless Event Sourcing
  • 133.
    Command In User Function/entity Deployment ReplyOut Event Log In Serverless Event Sourcing
  • 134.
    Command In User Function/entity Deployment ReplyOut Event Log In Events OUt Serverless Event Sourcing
  • 135.
    Command In User Function/entity Deployment ReplyOut Event Log In Events OUt Serverless Event Sourcing
  • 136.
    Convergent & CommutativeReplicated Data Types - Shapiro et. al. 2011 Conflict-Free Replicated Data Types
  • 137.
    CRDT Convergent & CommutativeReplicated Data Types - Shapiro et. al. 2011 Conflict-Free Replicated Data Types
  • 138.
    CRDTStrong Eventual Consistency Replicated& Decentralized Highly Available & Very Scalable Data Types Contain Resolution Logic Always Converge Correctly Convergent & Commutative Replicated Data Types - Shapiro et. al. 2011 Conflict-Free Replicated Data Types
  • 139.
    Data types Counters Registers Sets Maps Graphs (that allcompose) CRDTStrong Eventual Consistency Replicated & Decentralized Highly Available & Very Scalable Data Types Contain Resolution Logic Always Converge Correctly Convergent & Commutative Replicated Data Types - Shapiro et. al. 2011 Conflict-Free Replicated Data Types
  • 140.
  • 141.
  • 142.
    CRDTs are… Associative Batch-insensitive (grouping doesn'tmatter) a+(b+c)=(a+b)+c Commutative Order-insensitive (order doesn't matter) a+b=b+a
  • 143.
    CRDTs are… Associative Batch-insensitive (grouping doesn'tmatter) a+(b+c)=(a+b)+c Commutative Order-insensitive (order doesn't matter) a+b=b+a Idempotent Retransmission-insensitive (duplication does not matter) a+a=a
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
    Message In User Function/entity Deployment MessageOut States/Deltas IN Serverless CRDTs
  • 149.
    Message In User Function/entity Deployment MessageOut States/Deltas IN States/deltas OUT Serverless CRDTs
  • 150.
    Message In User Function/entity Deployment MessageOut States/Deltas IN States/deltas OUT Serverless CRDTs
  • 151.
  • 152.
  • 153.
    User Function/entity Deployment Snapshot In (ByEntity KEy) Serverless CRUD Using KeyValue
  • 154.
    Message In User Function/entity Deployment SnapshotIn (By Entity KEy) Serverless CRUD Using KeyValue
  • 155.
    Message In User Function/entity Deployment MessageOut Snapshot In (By Entity KEy) Serverless CRUD Using KeyValue
  • 156.
    Message In User Function/entity Deployment MessageOut Snapshot In (By Entity KEy) Snapshot out (By Entity Key) Serverless CRUD Using KeyValue
  • 157.
    Example CRDT Entity Presence functionin a chat app github.com/cloudstateio/samples-java-chat
  • 158.
  • 159.
    syntax = "proto3"; import"cloudstate/entity_key.proto"; package cloudstate.samples.presence; option java_package = "io.cloudstate.samples.presence"; option java_outer_classname = "PresenceProtos"; Protobuf Descriptor defining service API and messages
  • 160.
    syntax = "proto3"; import"cloudstate/entity_key.proto"; package cloudstate.samples.presence; option java_package = "io.cloudstate.samples.presence"; option java_outer_classname = "PresenceProtos"; "// Messages message User { "// Entity key is the unique entity/function identifier string name = 1 [(.cloudstate.entity_key) = true]; } message OnlineStatus { bool online = 1; } message Empty { } Protobuf Descriptor defining service API and messages
  • 161.
    syntax = "proto3"; import"cloudstate/entity_key.proto"; package cloudstate.samples.presence; option java_package = "io.cloudstate.samples.presence"; option java_outer_classname = "PresenceProtos"; "// Messages message User { "// Entity key is the unique entity/function identifier string name = 1 [(.cloudstate.entity_key) = true]; } message OnlineStatus { bool online = 1; } message Empty { } "// Service API service Presence { "// Connect the given user rpc Connect(User) returns (stream Empty); "// Monitor the online status of the given user rpc Monitor(User) returns (stream OnlineStatus); } Protobuf Descriptor defining service API and messages
  • 162.
    CRDT Entity foronline presence
  • 163.
    @CrdtEntity public class PresenceEntity{ private final Vote vote; "// Vote CRDT for this user. It’s auto replicated "// and keeps track how each node has voted private final String username; "// Entity Key (for sharding and routing) public PresenceEntity( Optional<Vote> vote, CrdtCreationContext ctx, @EntityId String username) { … } } CRDT Entity for online presence
  • 164.
    @CrdtEntity public class PresenceEntity{ private final Vote vote; "// Vote CRDT for this user. It’s auto replicated "// and keeps track how each node has voted private final String username; "// Entity Key (for sharding and routing) public PresenceEntity( Optional<Vote> vote, CrdtCreationContext ctx, @EntityId String username) { … } } public static void main(String""... args) { new CloudState() .registerCrdtEntity(…) .start(); } CRDT Entity for online presence
  • 165.
    @CrdtEntity public class PresenceEntity{ private final Vote vote; "// Vote CRDT for this user. It’s auto replicated "// and keeps track how each node has voted private final String username; "// Entity Key (for sharding and routing) public PresenceEntity( Optional<Vote> vote, CrdtCreationContext ctx, @EntityId String username) { … } } "// Here we implement the Protobuf Service API, our business logic @CommandHandler public void connect(StreamedCommandContext<Empty> ctx) { vote.vote(true); "// Set the user to online ctx.onCancel(cancelled "-> { "// Register cancel callback for user disconnect vote.vote(false); }); … } public static void main(String""... args) { new CloudState() .registerCrdtEntity(…) .start(); } CRDT Entity for online presence
  • 166.
    @CrdtEntity public class PresenceEntity{ private final Vote vote; "// Vote CRDT for this user. It’s auto replicated "// and keeps track how each node has voted private final String username; "// Entity Key (for sharding and routing) public PresenceEntity( Optional<Vote> vote, CrdtCreationContext ctx, @EntityId String username) { … } } "// Here we implement the Protobuf Service API, our business logic @CommandHandler public void connect(StreamedCommandContext<Empty> ctx) { vote.vote(true); "// Set the user to online ctx.onCancel(cancelled "-> { "// Register cancel callback for user disconnect vote.vote(false); }); … } public static void main(String""... args) { new CloudState() .registerCrdtEntity(…) .start(); } CRDT Entity for online presence @CommandHandler public OnlineStatus monitor(StreamedCommandContext<OnlineStatus> ctx) { ctx.onChange(change "-> { "// Subscribe to Vote CRDT changes … }); … }
  • 167.
    Run in Kubernetes Thisstep is not needed when user Cloudstate as a Service (as intended)
  • 168.
    # Install Cloudstate kubectlcreate namespace cloudstate Run in Kubernetes This step is not needed when user Cloudstate as a Service (as intended)
  • 169.
    # Install Cloudstate kubectlcreate namespace cloudstate kubectl apply -n cloudstate -f https:"//github.com/ cloudstateio/cloudstate/releases/download/v0.4/ cloudstate-0.4.yaml Run in Kubernetes This step is not needed when user Cloudstate as a Service (as intended)
  • 170.
    # Install Cloudstate kubectlcreate namespace cloudstate kubectl apply -n cloudstate -f https:"//github.com/ cloudstateio/cloudstate/releases/download/v0.4/ cloudstate-0.4.yaml Run in Kubernetes # Install our Presence app and Gateway kubectl apply -f https:"//raw.githubusercontent.com/ cloudstateio/samples-java-chat/master/deploy/ presence.yaml This step is not needed when user Cloudstate as a Service (as intended)
  • 171.
    # Install Cloudstate kubectlcreate namespace cloudstate kubectl apply -n cloudstate -f https:"//github.com/ cloudstateio/cloudstate/releases/download/v0.4/ cloudstate-0.4.yaml Run in Kubernetes # Install our Presence app and Gateway kubectl apply -f https:"//raw.githubusercontent.com/ cloudstateio/samples-java-chat/master/deploy/ presence.yaml kubectl apply -f https:"//raw.githubusercontent.com/ cloudstateio/samples-java-chat/master/deploy/ gateway.yaml This step is not needed when user Cloudstate as a Service (as intended)
  • 172.
    # Install Cloudstate kubectlcreate namespace cloudstate kubectl apply -n cloudstate -f https:"//github.com/ cloudstateio/cloudstate/releases/download/v0.4/ cloudstate-0.4.yaml Run in Kubernetes # Install our Presence app and Gateway kubectl apply -f https:"//raw.githubusercontent.com/ cloudstateio/samples-java-chat/master/deploy/ presence.yaml kubectl apply -f https:"//raw.githubusercontent.com/ cloudstateio/samples-java-chat/master/deploy/ gateway.yaml # Scale up the app to 3 nodes kubectl scale deploy/presence-deployment "--replicas 3 This step is not needed when user Cloudstate as a Service (as intended)
  • 173.
    Join Us Try Out TheNext Generation Stateful Serverless cloudstate.io