SlideShare a Scribd company logo
1 of 173
Download to read offline
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

More Related Content

What's hot

Reactive microservices with play and akka
Reactive microservices with play and akkaReactive microservices with play and akka
Reactive microservices with play and akkascalaconfjp
 
NATS - A new nervous system for distributed cloud platforms
NATS - A new nervous system for distributed cloud platformsNATS - A new nervous system for distributed cloud platforms
NATS - A new nervous system for distributed cloud platformsDerek Collison
 
Why Distributed Databases?
Why Distributed Databases?Why Distributed Databases?
Why Distributed Databases?Sargun Dhillon
 
Reactive Revealed Part 2: Scalability, Elasticity and Location Transparency i...
Reactive Revealed Part 2: Scalability, Elasticity and Location Transparency i...Reactive Revealed Part 2: Scalability, Elasticity and Location Transparency i...
Reactive Revealed Part 2: Scalability, Elasticity and Location Transparency i...Legacy Typesafe (now Lightbend)
 
Reactive programming with scala and akka
Reactive programming with scala and akkaReactive programming with scala and akka
Reactive programming with scala and akkaKnoldus Inc.
 
Joyent circa 2006 (Scale with Rails)
Joyent circa 2006 (Scale with Rails)Joyent circa 2006 (Scale with Rails)
Joyent circa 2006 (Scale with Rails)bcantrill
 
Reactive Systems by Dave Farley at #AgileIndia2019
Reactive Systems by Dave Farley at #AgileIndia2019Reactive Systems by Dave Farley at #AgileIndia2019
Reactive Systems by Dave Farley at #AgileIndia2019Agile India
 
Distributed Reactive Architecture: Extending SOA with Events
Distributed Reactive Architecture: Extending SOA with EventsDistributed Reactive Architecture: Extending SOA with Events
Distributed Reactive Architecture: Extending SOA with EventsSteve Pember
 
Using Hystrix to Build Resilient Distributed Systems
Using Hystrix to Build Resilient Distributed SystemsUsing Hystrix to Build Resilient Distributed Systems
Using Hystrix to Build Resilient Distributed SystemsMatt Jacobs
 
Platform as reflection of values: Joyent, node.js, and beyond
Platform as reflection of values: Joyent, node.js, and beyondPlatform as reflection of values: Joyent, node.js, and beyond
Platform as reflection of values: Joyent, node.js, and beyondbcantrill
 
The impact of cloud NSBCon NY by Yves Goeleven
The impact of cloud NSBCon NY by Yves GoelevenThe impact of cloud NSBCon NY by Yves Goeleven
The impact of cloud NSBCon NY by Yves GoelevenParticular Software
 
NATS Connect Live | Serverless on Kubernetes with OpenFaaS & NATS
NATS Connect Live | Serverless on Kubernetes with OpenFaaS & NATSNATS Connect Live | Serverless on Kubernetes with OpenFaaS & NATS
NATS Connect Live | Serverless on Kubernetes with OpenFaaS & NATSNATS
 
All you didn't know about the CAP theorem
All you didn't know about the CAP theoremAll you didn't know about the CAP theorem
All you didn't know about the CAP theoremKanstantsin Hontarau
 
Stuff About CQRS
Stuff About CQRSStuff About CQRS
Stuff About CQRSthinkddd
 
101 mistakes FINN.no has made with Kafka (Baksida meetup)
101 mistakes FINN.no has made with Kafka (Baksida meetup)101 mistakes FINN.no has made with Kafka (Baksida meetup)
101 mistakes FINN.no has made with Kafka (Baksida meetup)Henning Spjelkavik
 
Distributed Deep Learning with Docker at Salesforce
Distributed Deep Learning with Docker at SalesforceDistributed Deep Learning with Docker at Salesforce
Distributed Deep Learning with Docker at SalesforceDocker, Inc.
 
Open west 2015 talk ben coverston
Open west 2015 talk ben coverstonOpen west 2015 talk ben coverston
Open west 2015 talk ben coverstonbcoverston
 
Client Drivers and Cassandra, the Right Way
Client Drivers and Cassandra, the Right WayClient Drivers and Cassandra, the Right Way
Client Drivers and Cassandra, the Right WayDataStax Academy
 

What's hot (20)

Reactive microservices with play and akka
Reactive microservices with play and akkaReactive microservices with play and akka
Reactive microservices with play and akka
 
NATS - A new nervous system for distributed cloud platforms
NATS - A new nervous system for distributed cloud platformsNATS - A new nervous system for distributed cloud platforms
NATS - A new nervous system for distributed cloud platforms
 
Why Distributed Databases?
Why Distributed Databases?Why Distributed Databases?
Why Distributed Databases?
 
Reactive Revealed Part 2: Scalability, Elasticity and Location Transparency i...
Reactive Revealed Part 2: Scalability, Elasticity and Location Transparency i...Reactive Revealed Part 2: Scalability, Elasticity and Location Transparency i...
Reactive Revealed Part 2: Scalability, Elasticity and Location Transparency i...
 
Intro to Databases
Intro to DatabasesIntro to Databases
Intro to Databases
 
Reactive programming with scala and akka
Reactive programming with scala and akkaReactive programming with scala and akka
Reactive programming with scala and akka
 
Joyent circa 2006 (Scale with Rails)
Joyent circa 2006 (Scale with Rails)Joyent circa 2006 (Scale with Rails)
Joyent circa 2006 (Scale with Rails)
 
Reactive Systems by Dave Farley at #AgileIndia2019
Reactive Systems by Dave Farley at #AgileIndia2019Reactive Systems by Dave Farley at #AgileIndia2019
Reactive Systems by Dave Farley at #AgileIndia2019
 
Distributed Reactive Architecture: Extending SOA with Events
Distributed Reactive Architecture: Extending SOA with EventsDistributed Reactive Architecture: Extending SOA with Events
Distributed Reactive Architecture: Extending SOA with Events
 
Using Hystrix to Build Resilient Distributed Systems
Using Hystrix to Build Resilient Distributed SystemsUsing Hystrix to Build Resilient Distributed Systems
Using Hystrix to Build Resilient Distributed Systems
 
Platform as reflection of values: Joyent, node.js, and beyond
Platform as reflection of values: Joyent, node.js, and beyondPlatform as reflection of values: Joyent, node.js, and beyond
Platform as reflection of values: Joyent, node.js, and beyond
 
The impact of cloud NSBCon NY by Yves Goeleven
The impact of cloud NSBCon NY by Yves GoelevenThe impact of cloud NSBCon NY by Yves Goeleven
The impact of cloud NSBCon NY by Yves Goeleven
 
NATS Connect Live | Serverless on Kubernetes with OpenFaaS & NATS
NATS Connect Live | Serverless on Kubernetes with OpenFaaS & NATSNATS Connect Live | Serverless on Kubernetes with OpenFaaS & NATS
NATS Connect Live | Serverless on Kubernetes with OpenFaaS & NATS
 
All you didn't know about the CAP theorem
All you didn't know about the CAP theoremAll you didn't know about the CAP theorem
All you didn't know about the CAP theorem
 
Cap Theorem
Cap TheoremCap Theorem
Cap Theorem
 
Stuff About CQRS
Stuff About CQRSStuff About CQRS
Stuff About CQRS
 
101 mistakes FINN.no has made with Kafka (Baksida meetup)
101 mistakes FINN.no has made with Kafka (Baksida meetup)101 mistakes FINN.no has made with Kafka (Baksida meetup)
101 mistakes FINN.no has made with Kafka (Baksida meetup)
 
Distributed Deep Learning with Docker at Salesforce
Distributed Deep Learning with Docker at SalesforceDistributed Deep Learning with Docker at Salesforce
Distributed Deep Learning with Docker at Salesforce
 
Open west 2015 talk ben coverston
Open west 2015 talk ben coverstonOpen west 2015 talk ben coverston
Open west 2015 talk ben coverston
 
Client Drivers and Cassandra, the Right Way
Client Drivers and Cassandra, the Right WayClient Drivers and Cassandra, the Right Way
Client Drivers and Cassandra, the Right Way
 

Similar to Cloudstate—Towards Stateful Serverless

Cloudstate - Towards Stateful Serverless
Cloudstate - Towards Stateful ServerlessCloudstate - Towards Stateful Serverless
Cloudstate - Towards Stateful ServerlessLightbend
 
Containerizing Traditional Applications
Containerizing Traditional ApplicationsContainerizing Traditional Applications
Containerizing Traditional ApplicationsJim Bugwadia
 
SpringPeople - Introduction to Cloud Computing
SpringPeople - Introduction to Cloud ComputingSpringPeople - Introduction to Cloud Computing
SpringPeople - Introduction to Cloud ComputingSpringPeople
 
Hadoop application architectures - Fraud detection tutorial
Hadoop application architectures - Fraud detection tutorialHadoop application architectures - Fraud detection tutorial
Hadoop application architectures - Fraud detection tutorialhadooparchbook
 
Apache Kafka - Scalable Message-Processing and more !
Apache Kafka - Scalable Message-Processing and more !Apache Kafka - Scalable Message-Processing and more !
Apache Kafka - Scalable Message-Processing and more !Guido Schmutz
 
Amazon EKS 그리고 Service Mesh (김세호 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
Amazon EKS 그리고 Service Mesh (김세호 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018Amazon EKS 그리고 Service Mesh (김세호 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
Amazon EKS 그리고 Service Mesh (김세호 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018Amazon Web Services Korea
 
Service Mesh CTO Forum (Draft 3)
Service Mesh CTO Forum (Draft 3)Service Mesh CTO Forum (Draft 3)
Service Mesh CTO Forum (Draft 3)Rick Hightower
 
L12 Session State and Distributation Strategies
L12 Session State and Distributation StrategiesL12 Session State and Distributation Strategies
L12 Session State and Distributation StrategiesÓlafur Andri Ragnarsson
 
Serverless Architectures - Where have all the servers gone?
Serverless Architectures - Where have all the servers gone?Serverless Architectures - Where have all the servers gone?
Serverless Architectures - Where have all the servers gone?Nane Kratzke
 
Gluecon Monitoring Microservices and Containers: A Challenge
Gluecon Monitoring Microservices and Containers: A ChallengeGluecon Monitoring Microservices and Containers: A Challenge
Gluecon Monitoring Microservices and Containers: A ChallengeAdrian Cockcroft
 
Microservices architecture
Microservices architectureMicroservices architecture
Microservices architectureFaren faren
 
AI&BigData Lab 2016. Сарапин Виктор: Размер имеет значение: анализ по требова...
AI&BigData Lab 2016. Сарапин Виктор: Размер имеет значение: анализ по требова...AI&BigData Lab 2016. Сарапин Виктор: Размер имеет значение: анализ по требова...
AI&BigData Lab 2016. Сарапин Виктор: Размер имеет значение: анализ по требова...GeeksLab Odessa
 
SOA Solution Patterns
SOA Solution PatternsSOA Solution Patterns
SOA Solution PatternsWSO2
 
Summer School Soa EAP Asanka 18 Jun
Summer School Soa EAP Asanka 18 JunSummer School Soa EAP Asanka 18 Jun
Summer School Soa EAP Asanka 18 JunWSO2
 
Microservices in a Streaming World
Microservices in a Streaming WorldMicroservices in a Streaming World
Microservices in a Streaming WorldHans Jespersen
 
Oasis: Standards & the Cloud June2011
Oasis: Standards & the Cloud June2011Oasis: Standards & the Cloud June2011
Oasis: Standards & the Cloud June2011Jamie Clark
 
From Monoliths to Microservices - A Journey With Confluent With Gayathri Veal...
From Monoliths to Microservices - A Journey With Confluent With Gayathri Veal...From Monoliths to Microservices - A Journey With Confluent With Gayathri Veal...
From Monoliths to Microservices - A Journey With Confluent With Gayathri Veal...HostedbyConfluent
 
Microservice at a glance
Microservice at a glanceMicroservice at a glance
Microservice at a glanceKetan Ghumatkar
 
Changing application demands: What developers need to know
Changing application demands: What developers need to knowChanging application demands: What developers need to know
Changing application demands: What developers need to knowIndicThreads
 

Similar to Cloudstate—Towards Stateful Serverless (20)

Cloudstate - Towards Stateful Serverless
Cloudstate - Towards Stateful ServerlessCloudstate - Towards Stateful Serverless
Cloudstate - Towards Stateful Serverless
 
L21 scalability
L21 scalabilityL21 scalability
L21 scalability
 
Containerizing Traditional Applications
Containerizing Traditional ApplicationsContainerizing Traditional Applications
Containerizing Traditional Applications
 
SpringPeople - Introduction to Cloud Computing
SpringPeople - Introduction to Cloud ComputingSpringPeople - Introduction to Cloud Computing
SpringPeople - Introduction to Cloud Computing
 
Hadoop application architectures - Fraud detection tutorial
Hadoop application architectures - Fraud detection tutorialHadoop application architectures - Fraud detection tutorial
Hadoop application architectures - Fraud detection tutorial
 
Apache Kafka - Scalable Message-Processing and more !
Apache Kafka - Scalable Message-Processing and more !Apache Kafka - Scalable Message-Processing and more !
Apache Kafka - Scalable Message-Processing and more !
 
Amazon EKS 그리고 Service Mesh (김세호 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
Amazon EKS 그리고 Service Mesh (김세호 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018Amazon EKS 그리고 Service Mesh (김세호 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
Amazon EKS 그리고 Service Mesh (김세호 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
 
Service Mesh CTO Forum (Draft 3)
Service Mesh CTO Forum (Draft 3)Service Mesh CTO Forum (Draft 3)
Service Mesh CTO Forum (Draft 3)
 
L12 Session State and Distributation Strategies
L12 Session State and Distributation StrategiesL12 Session State and Distributation Strategies
L12 Session State and Distributation Strategies
 
Serverless Architectures - Where have all the servers gone?
Serverless Architectures - Where have all the servers gone?Serverless Architectures - Where have all the servers gone?
Serverless Architectures - Where have all the servers gone?
 
Gluecon Monitoring Microservices and Containers: A Challenge
Gluecon Monitoring Microservices and Containers: A ChallengeGluecon Monitoring Microservices and Containers: A Challenge
Gluecon Monitoring Microservices and Containers: A Challenge
 
Microservices architecture
Microservices architectureMicroservices architecture
Microservices architecture
 
AI&BigData Lab 2016. Сарапин Виктор: Размер имеет значение: анализ по требова...
AI&BigData Lab 2016. Сарапин Виктор: Размер имеет значение: анализ по требова...AI&BigData Lab 2016. Сарапин Виктор: Размер имеет значение: анализ по требова...
AI&BigData Lab 2016. Сарапин Виктор: Размер имеет значение: анализ по требова...
 
SOA Solution Patterns
SOA Solution PatternsSOA Solution Patterns
SOA Solution Patterns
 
Summer School Soa EAP Asanka 18 Jun
Summer School Soa EAP Asanka 18 JunSummer School Soa EAP Asanka 18 Jun
Summer School Soa EAP Asanka 18 Jun
 
Microservices in a Streaming World
Microservices in a Streaming WorldMicroservices in a Streaming World
Microservices in a Streaming World
 
Oasis: Standards & the Cloud June2011
Oasis: Standards & the Cloud June2011Oasis: Standards & the Cloud June2011
Oasis: Standards & the Cloud June2011
 
From Monoliths to Microservices - A Journey With Confluent With Gayathri Veal...
From Monoliths to Microservices - A Journey With Confluent With Gayathri Veal...From Monoliths to Microservices - A Journey With Confluent With Gayathri Veal...
From Monoliths to Microservices - A Journey With Confluent With Gayathri Veal...
 
Microservice at a glance
Microservice at a glanceMicroservice at a glance
Microservice at a glance
 
Changing application demands: What developers need to know
Changing application demands: What developers need to knowChanging application demands: What developers need to know
Changing application demands: What developers need to know
 

More from Jonas Bonér

We are drowning in complexity—can we do better?
We are drowning in complexity—can we do better?We are drowning in complexity—can we do better?
We are drowning in complexity—can we do better?Jonas Bonér
 
Kalix: Tackling the The Cloud to Edge Continuum
Kalix: Tackling the The Cloud to Edge ContinuumKalix: Tackling the The Cloud to Edge Continuum
Kalix: Tackling the The Cloud to Edge ContinuumJonas Bonér
 
Reactive Microsystems: The Evolution of Microservices at Scale
Reactive Microsystems: The Evolution of Microservices at ScaleReactive Microsystems: The Evolution of Microservices at Scale
Reactive Microsystems: The Evolution of Microservices at ScaleJonas Bonér
 
From Microliths To Microsystems
From Microliths To MicrosystemsFrom Microliths To Microsystems
From Microliths To MicrosystemsJonas Bonér
 
Without Resilience, Nothing Else Matters
Without Resilience, Nothing Else MattersWithout Resilience, Nothing Else Matters
Without Resilience, Nothing Else MattersJonas Bonér
 
Life Beyond the Illusion of Present
Life Beyond the Illusion of PresentLife Beyond the Illusion of Present
Life Beyond the Illusion of PresentJonas Bonér
 
Building Reactive Systems with Akka (in Java 8 or Scala)
Building Reactive Systems with Akka (in Java 8 or Scala)Building Reactive Systems with Akka (in Java 8 or Scala)
Building Reactive Systems with Akka (in Java 8 or Scala)Jonas Bonér
 
Building Scalable, Highly Concurrent & Fault Tolerant Systems - Lessons Learned
Building Scalable, Highly Concurrent & Fault Tolerant Systems -  Lessons LearnedBuilding Scalable, Highly Concurrent & Fault Tolerant Systems -  Lessons Learned
Building Scalable, Highly Concurrent & Fault Tolerant Systems - Lessons LearnedJonas Bonér
 
Event Driven-Architecture from a Scalability perspective
Event Driven-Architecture from a Scalability perspectiveEvent Driven-Architecture from a Scalability perspective
Event Driven-Architecture from a Scalability perspectiveJonas Bonér
 
Scalability, Availability & Stability Patterns
Scalability, Availability & Stability PatternsScalability, Availability & Stability Patterns
Scalability, Availability & Stability PatternsJonas Bonér
 
Akka: Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Ac...
Akka: Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Ac...Akka: Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Ac...
Akka: Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Ac...Jonas Bonér
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Jonas Bonér
 

More from Jonas Bonér (13)

We are drowning in complexity—can we do better?
We are drowning in complexity—can we do better?We are drowning in complexity—can we do better?
We are drowning in complexity—can we do better?
 
Kalix: Tackling the The Cloud to Edge Continuum
Kalix: Tackling the The Cloud to Edge ContinuumKalix: Tackling the The Cloud to Edge Continuum
Kalix: Tackling the The Cloud to Edge Continuum
 
Reactive Microsystems: The Evolution of Microservices at Scale
Reactive Microsystems: The Evolution of Microservices at ScaleReactive Microsystems: The Evolution of Microservices at Scale
Reactive Microsystems: The Evolution of Microservices at Scale
 
From Microliths To Microsystems
From Microliths To MicrosystemsFrom Microliths To Microsystems
From Microliths To Microsystems
 
Without Resilience, Nothing Else Matters
Without Resilience, Nothing Else MattersWithout Resilience, Nothing Else Matters
Without Resilience, Nothing Else Matters
 
Life Beyond the Illusion of Present
Life Beyond the Illusion of PresentLife Beyond the Illusion of Present
Life Beyond the Illusion of Present
 
Building Reactive Systems with Akka (in Java 8 or Scala)
Building Reactive Systems with Akka (in Java 8 or Scala)Building Reactive Systems with Akka (in Java 8 or Scala)
Building Reactive Systems with Akka (in Java 8 or Scala)
 
Introducing Akka
Introducing AkkaIntroducing Akka
Introducing Akka
 
Building Scalable, Highly Concurrent & Fault Tolerant Systems - Lessons Learned
Building Scalable, Highly Concurrent & Fault Tolerant Systems -  Lessons LearnedBuilding Scalable, Highly Concurrent & Fault Tolerant Systems -  Lessons Learned
Building Scalable, Highly Concurrent & Fault Tolerant Systems - Lessons Learned
 
Event Driven-Architecture from a Scalability perspective
Event Driven-Architecture from a Scalability perspectiveEvent Driven-Architecture from a Scalability perspective
Event Driven-Architecture from a Scalability perspective
 
Scalability, Availability & Stability Patterns
Scalability, Availability & Stability PatternsScalability, Availability & Stability Patterns
Scalability, Availability & Stability Patterns
 
Akka: Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Ac...
Akka: Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Ac...Akka: Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Ac...
Akka: Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Ac...
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
 

Recently uploaded

Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencessuser9e7c64
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...OnePlan Solutions
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITmanoharjgpsolutions
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsJean Silva
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesVictoriaMetrics
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slidesvaideheekore1
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 

Recently uploaded (20)

Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conference
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero results
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 Updates
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 

Cloudstate—Towards Stateful Serverless

  • 2. “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
  • 4. Is visionary FaaS FaaS = Function-as-a-Service
  • 5. Is visionary Paved the way FaaS FaaS = Function-as-a-Service
  • 6. Is visionary Paved the way Just the first step FaaS FaaS = Function-as-a-Service
  • 9. 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
  • 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 to build General-Purpose Applications
  • 12. 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
  • 13.
  • 14. State
  • 15. We Need Serverless Support For...
  • 16. We Need Serverless Support For...
  • 17. • Managing in-memory durable session state across individual requests E.g. User Sessions, Shopping Carts, Caching We Need Serverless Support For...
  • 18. • 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...
  • 19. • 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...
  • 20. • 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...
  • 21. • 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...
  • 22. • 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...
  • 24. 1. Stateful long-lived addressable virtual components Actors Technical Requirements
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. User Function Deployment FaaS Is Great At Abstracting Over Communication
  • 31. Message In User Function Deployment FaaS Is Great At Abstracting Over Communication
  • 32. Message In User Function Deployment Message Out FaaS Is Great At Abstracting Over Communication
  • 33. Message In User Function Deployment Message Out FaaS With CRUD
  • 34. Message In User Function Deployment Database Message Out FaaS With CRUD
  • 35. Message In User Function Deployment Database Message Out Not Serverless Leaky Abstraction
  • 37. The Function is a Black BoX The Problem
  • 39. Unconstrained database access Makes it hard to Automate operations The Problem
  • 40. “Freedom is not so much the absence of restrictions as finding the right ones, the liberating restrictions.” - Timothy keller
  • 43. Message In User Function Deployment Message Out FaaS Abstracting Over Communication
  • 44. Message In User Function Deployment Message Out Stateful Serverless Abstracting Over State
  • 45. Message In User Function Deployment Message Out Stateful Serverless Abstracting Over State State In
  • 46. Message In User Function Deployment Message Out Stateful Serverless Abstracting Over State State In State Out
  • 47. Enter
  • 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
  • 54. What Is CloudState? https://cloudstate.io Don’t worry about: 1. Managing: Complexities of Distributed and Concurrent systems
  • 55. 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
  • 56. 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
  • 57. 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
  • 58. 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
  • 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
  • 65. Kubernetes Pod Kubernetes Pod Kubernetes Pod Cloudstate Architecture
  • 66. Kubernetes Pod Kubernetes Pod Kubernetes Pod User Function (JavaScript, Go, Java,…) Cloudstate Architecture User Function (JavaScript, Go, Java,…) User Function (JavaScript, Go, Java,…)
  • 67. 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,…)
  • 68. 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,…)
  • 69. 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
  • 70. 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
  • 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 you with (when being a managed service)
  • 82. • Pay-as-you-go: • On-demand Instance Creation, Passivation, and Failover • Autoscaling—up and down CloudState helps you with (when being a managed service)
  • 83. • 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)
  • 84. Akka Cluster state management
  • 85. Akka Cluster state management Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar
  • 86. Akka Cluster state management Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar
  • 87. 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
  • 88. 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
  • 89. 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
  • 90. 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
  • 91. 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
  • 92. 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
  • 93. 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
  • 94. 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
  • 95. 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
  • 96. 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
  • 97. 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
  • 98. 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
  • 99. 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
  • 100. 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
  • 101. 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
  • 102. 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
  • 103. 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)
  • 104. 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
  • 105. Cloudstate Uses Better Models 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
  • 119. SAD Path, RECOVER FROM FAILURE Event Sourced Entities
  • 120. Event Log SAD Path, RECOVER FROM 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
  • 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)
  • 131. User Function/entity Deployment Event Log In Serverless Event Sourcing
  • 132. Command In User Function/entity Deployment Event Log In Serverless Event Sourcing
  • 133. Command In User Function/entity Deployment Reply Out Event Log In Serverless Event Sourcing
  • 134. Command In User Function/entity Deployment Reply Out Event Log In Events OUt Serverless Event Sourcing
  • 135. Command In User Function/entity Deployment Reply Out Event Log In Events OUt Serverless Event Sourcing
  • 136. Convergent & Commutative Replicated Data Types - Shapiro et. al. 2011 Conflict-Free Replicated Data Types
  • 137. CRDT Convergent & Commutative Replicated 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 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
  • 142. 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
  • 143. 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
  • 148. Message In User Function/entity Deployment Message Out States/Deltas IN Serverless CRDTs
  • 149. Message In User Function/entity Deployment Message Out States/Deltas IN States/deltas OUT Serverless CRDTs
  • 150. Message In User Function/entity Deployment Message Out States/Deltas IN States/deltas OUT Serverless CRDTs
  • 153. User Function/entity Deployment Snapshot In (By Entity KEy) Serverless CRUD Using KeyValue
  • 154. Message In User Function/entity Deployment Snapshot In (By Entity KEy) Serverless CRUD Using KeyValue
  • 155. Message In User Function/entity Deployment Message Out Snapshot In (By Entity KEy) Serverless CRUD Using KeyValue
  • 156. Message In User Function/entity Deployment Message Out Snapshot In (By Entity KEy) Snapshot out (By Entity Key) Serverless CRUD Using KeyValue
  • 157. Example CRDT Entity Presence function in a chat app github.com/cloudstateio/samples-java-chat
  • 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 for online 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 This step is not needed when user Cloudstate as a Service (as intended)
  • 168. # Install Cloudstate kubectl create namespace cloudstate Run in Kubernetes This step is not needed when user Cloudstate as a Service (as intended)
  • 169. # 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)
  • 170. # 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)
  • 171. # 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)
  • 172. # 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)
  • 173. Join Us Try Out The Next Generation Stateful Serverless cloudstate.io