Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Cloudstate—Towards Stateful Serverless

The Serverless experience is revolutionary and will grow to dominate the future of Cloud. Function-as-a-Service (FaaS) however—with its ephemeral, stateless, and short-lived functions—is only the first step. FaaS is great for processing-intensive, parallelizable workloads, moving data from A to B providing enrichment and transformation along the way. But it is quite limited and constrained in what use-cases it addresses well, which makes it very hard/inefficient to implement general-purpose application development and distributed systems protocols.

What’s needed is a next-generation Serverless platform and programming model for general-purpose application development in the new world of real-time data and event-driven systems. What is missing is ways to manage distributed state in a scalable and available fashion, support for long-lived virtual stateful services, ways to physically co-locate data and processing, and options for choosing the right data consistency model for the job.

This talk will discuss the challenges, requirements, and introduce you to our proposed solution: Cloudstate—an Open Source project building the next generation Stateful Serverless and leveraging state models such as Event Sourcing, CQRS, and CRDTs, running on Akka, gRPC, Knative, Kubernetes, and GraalVM, in a polyglot fashion with support for Go, JavaScript, Java, Swift, Scala, Python, Kotlin, and more.

  • Login to see the comments

Cloudstate—Towards Stateful Serverless

  1. 1. Jonas Bonér @jboner Towards Stateful Serverless
  2. 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
  3. 3. FaaS FaaS = Function-as-a-Service
  4. 4. Is visionary FaaS FaaS = Function-as-a-Service
  5. 5. Is visionary Paved the way FaaS FaaS = Function-as-a-Service
  6. 6. Is visionary Paved the way Just the first step FaaS FaaS = Function-as-a-Service
  7. 7. Serverless ≠Faas
  8. 8. good use-cases For FaaS?
  9. 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. 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. 11. FAAS: Hard to build General-Purpose Applications
  12. 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. 13. State
  14. 14. We Need Serverless Support For...
  15. 15. We Need Serverless Support For...
  16. 16. • Managing in-memory durable session state across individual requests E.g. User Sessions, Shopping Carts, Caching We Need Serverless Support For...
  17. 17. • 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...
  18. 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 • Real-time stream processing E.g. Recommendation, Anomaly Detection, Prediction Serving We Need Serverless Support For...
  19. 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 • Distributed resilient transactional workflows E.g. Saga Pattern, Workflow Orchestration, Rollback/Compensating Actions We Need Serverless Support For...
  20. 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 • Shared collaborative workspaces E.g. Collaborative Document Editing, Blackboards, Chat Rooms We Need Serverless Support For...
  21. 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 • Leader election, counting, voting …and other distributed systems patterns/protocols for coordination We Need Serverless Support For...
  22. 22. Technical Requirements
  23. 23. 1. Stateful long-lived addressable virtual components Actors Technical Requirements
  24. 24. 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
  25. 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. 3. Options for managing distributed state reliably at scale Ranging from strong to eventual consistency (durable/ephemeral) Technical Requirements
  26. 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) 4. Intelligent adaptive placement of stateful functions Physical co-location of state and processing, sharding, and sticky routing Technical Requirements
  27. 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 5. Predictable performance, latency, and throughput In startup time, communication/coordination, and storage of data Technical Requirements
  28. 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 6. Ways of managing end-to-end guarantees and correctness Technical Requirements
  29. 29. User Function Deployment FaaS Is Great At Abstracting Over Communication
  30. 30. Message In User Function Deployment FaaS Is Great At Abstracting Over Communication
  31. 31. Message In User Function Deployment Message Out FaaS Is Great At Abstracting Over Communication
  32. 32. Message In User Function Deployment Message Out FaaS With CRUD
  33. 33. Message In User Function Deployment Database Message Out FaaS With CRUD
  34. 34. Message In User Function Deployment Database Message Out Not Serverless Leaky Abstraction
  35. 35. The Problem
  36. 36. The Function is a Black BoX The Problem
  37. 37. The Problem
  38. 38. Unconstrained database access Makes it hard to Automate operations The Problem
  39. 39. “Freedom is not so much the absence of restrictions as finding the right ones, the liberating restrictions.” - Timothy keller
  40. 40. User Function Deployment FaaS Abstracting Over Communication
  41. 41. Message In User Function Deployment FaaS Abstracting Over Communication
  42. 42. Message In User Function Deployment Message Out FaaS Abstracting Over Communication
  43. 43. Message In User Function Deployment Message Out Stateful Serverless Abstracting Over State
  44. 44. Message In User Function Deployment Message Out Stateful Serverless Abstracting Over State State In
  45. 45. Message In User Function Deployment Message Out Stateful Serverless Abstracting Over State State In State Out
  46. 46. Enter
  47. 47. What Is CloudState? https://cloudstate.io
  48. 48. Overview: 1. Open Source (Apache 2.0) project What Is CloudState? https://cloudstate.io
  49. 49. Overview: 1. Open Source (Apache 2.0) project 2. Makes Stateful Serverless applications easy What Is CloudState? https://cloudstate.io
  50. 50. 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
  51. 51. 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
  52. 52. What Is CloudState? https://cloudstate.io
  53. 53. What Is CloudState? https://cloudstate.io Don’t worry about: 1. Managing: Complexities of Distributed and Concurrent systems
  54. 54. 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
  55. 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 3. Managing: Databases, Service Meshes, and other infrastructure
  56. 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 4. Managing: Message Routing, Scalability, Fail-over & Recovery
  57. 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 5. Running & Operating your application
  58. 58. What Is CloudState? https://cloudstate.io
  59. 59. 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
  60. 60. 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
  61. 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 3. PolyDB: Supporting SQL, NoSQL, NewSQL and in-memory replication What Is CloudState? https://cloudstate.io
  62. 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 4. Leveraging Akka, gRPC, Knative, GraalVM, running on Kubernetes What Is CloudState? https://cloudstate.io
  63. 63. Cloudstate Architecture
  64. 64. Kubernetes Pod Kubernetes Pod Kubernetes Pod Cloudstate Architecture
  65. 65. Kubernetes Pod Kubernetes Pod Kubernetes Pod User Function (JavaScript, Go, Java,…) Cloudstate Architecture User Function (JavaScript, Go, Java,…) User Function (JavaScript, Go, Java,…)
  66. 66. 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,…)
  67. 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. 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,…) gRPC
  69. 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,…) Datastore (Cassandra, Postgres, Spanner,…) gRPC
  70. 70. Kubernetes Pod User Function (JavaScript, Go, Java,…) Kubernetes PodUser Function (JavaScript, Go, Java,…) Kubernetes Pod User Function (JavaScript, Go, Java,…)
  71. 71. 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
  72. 72. 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
  73. 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 HTTP
  74. 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. 75. 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
  76. 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 Gossip, State replication, Routing Gossip, State replication, Routing
  77. 77. 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
  78. 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 gRPC Kubernetes Pod User Function (JavaScript, Go, Java,…) Akka Sidecar HTTP gRPC Gossip, State replication, Routing Gossip, State replication, Routing
  79. 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 gRPC HTTP gRPC Events Gossip, State replication, Routing Gossip, State replication, Routing
  80. 80. CloudState helps you with (when being a managed service)
  81. 81. • Pay-as-you-go: • On-demand Instance Creation, Passivation, and Failover • Autoscaling—up and down CloudState helps you with (when being a managed service)
  82. 82. • 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)
  83. 83. Akka Cluster state management
  84. 84. Akka Cluster state management Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar
  85. 85. Akka Cluster state management Akka Sidecar Akka Sidecar Akka Sidecar Akka Cluster Akka Sidecar Akka Sidecar Akka Sidecar Akka Sidecar
  86. 86. 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
  87. 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 User FunctionUser Function User Function User Function User Function User Function User Function
  88. 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 •State Sharding & Routing on Entity Key https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  89. 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 (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  90. 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 •Forwarding of Requests (if needed) (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  91. 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) (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  92. 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) •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
  93. 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 •Backed by Event Log (Key, State) (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  94. 94. 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
  95. 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 •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
  96. 96. 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
  97. 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. 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 (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  99. 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) (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  100. 100. 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
  101. 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 (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  102. 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) (Key, State) (Key, State) https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function (Key, State) (Key, State)
  103. 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 https://akka.io User FunctionUser Function User Function User Function User Function User Function User Function
  104. 104. Cloudstate Uses Better Models For Distributed State
  105. 105. battle-tested, Yet Constrained, models like: Cloudstate Uses Better Models For Distributed State
  106. 106. battle-tested, Yet Constrained, models like: Cloudstate Uses Better Models For Distributed State Event Sourcing
  107. 107. battle-tested, Yet Constrained, models like: Cloudstate Uses Better Models For Distributed State Event Sourcing CRDTs
  108. 108. battle-tested, Yet Constrained, models like: Cloudstate Uses Better Models For Distributed State Event Sourcing CRDTs Key Value
  109. 109. Event Sourced Entities Happy Path
  110. 110. Event Sourced Entities Happy Path
  111. 111. Command Event Sourced Entities Happy Path
  112. 112. Command Event Sourced Entities Happy Path
  113. 113. Command Event Sourced Entities Happy Path Command
  114. 114. Command Event Log Event Event Sourced Entities Happy Path Command
  115. 115. Command Event Event Log Event Event Sourced Entities Happy Path Command
  116. 116. Command Event Event Log Event Event Sourced Entities Happy Path Command Memory Image
  117. 117. Event Sourced Entities Happy Path
  118. 118. SAD Path, RECOVER FROM FAILURE Event Sourced Entities
  119. 119. Event Log SAD Path, RECOVER FROM FAILURE Event Sourced Entities
  120. 120. Event Log REPLAY EventS SAD Path, RECOVER FROM FAILURE Event Sourced Entities
  121. 121. Event Log REPLAY EventS SAD Path, RECOVER FROM FAILURE Command Event Sourced Entities
  122. 122. Benefits of Event Sourcing
  123. 123. Benefits of Event Sourcing ✴ One single Source of Truth with All history
  124. 124. Benefits of Event Sourcing ✴ One single Source of Truth with All history ✴ Allows for Memory Image (Durable In-Memory State)
  125. 125. 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
  126. 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 ✴ Allows others to Subscribe to state changes
  127. 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 ✴ Has good Mechanical sympathy (Single Writer Principle)
  128. 128. Deployment Serverless Event Sourcing
  129. 129. User Function/entity Deployment Serverless Event Sourcing
  130. 130. User Function/entity Deployment Event Log In Serverless Event Sourcing
  131. 131. Command In User Function/entity Deployment Event Log In Serverless Event Sourcing
  132. 132. Command In User Function/entity Deployment Reply Out Event Log In Serverless Event Sourcing
  133. 133. Command In User Function/entity Deployment Reply Out Event Log In Events OUt Serverless Event Sourcing
  134. 134. Command In User Function/entity Deployment Reply Out Event Log In Events OUt Serverless Event Sourcing
  135. 135. Convergent & Commutative Replicated Data Types - Shapiro et. al. 2011 Conflict-Free Replicated Data Types
  136. 136. CRDT Convergent & Commutative Replicated Data Types - Shapiro et. al. 2011 Conflict-Free Replicated Data Types
  137. 137. 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
  138. 138. 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
  139. 139. CRDTs are…
  140. 140. CRDTs are… Associative Batch-insensitive (grouping doesn't matter) a+(b+c)=(a+b)+c
  141. 141. 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
  142. 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 Idempotent Retransmission-insensitive (duplication does not matter) a+a=a
  143. 143. Deployment Serverless CRDTs
  144. 144. User Function/entity Deployment Serverless CRDTs
  145. 145. User Function/entity Deployment States/Deltas IN Serverless CRDTs
  146. 146. Message In User Function/entity Deployment States/Deltas IN Serverless CRDTs
  147. 147. Message In User Function/entity Deployment Message Out States/Deltas IN Serverless CRDTs
  148. 148. Message In User Function/entity Deployment Message Out States/Deltas IN States/deltas OUT Serverless CRDTs
  149. 149. Message In User Function/entity Deployment Message Out States/Deltas IN States/deltas OUT Serverless CRDTs
  150. 150. Deployment Serverless CRUD Using KeyValue
  151. 151. User Function/entity Deployment Serverless CRUD Using KeyValue
  152. 152. User Function/entity Deployment Snapshot In (By Entity KEy) Serverless CRUD Using KeyValue
  153. 153. Message In User Function/entity Deployment Snapshot In (By Entity KEy) Serverless CRUD Using KeyValue
  154. 154. Message In User Function/entity Deployment Message Out Snapshot In (By Entity KEy) Serverless CRUD Using KeyValue
  155. 155. Message In User Function/entity Deployment Message Out Snapshot In (By Entity KEy) Snapshot out (By Entity Key) Serverless CRUD Using KeyValue
  156. 156. Example CRDT Entity Presence function in a chat app github.com/cloudstateio/samples-java-chat
  157. 157. Protobuf Descriptor defining service API and messages
  158. 158. 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
  159. 159. 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
  160. 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 { } "// 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
  161. 161. CRDT Entity for online presence
  162. 162. @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
  163. 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) { … } } public static void main(String""... args) { new CloudState() .registerCrdtEntity(…) .start(); } CRDT Entity for online presence
  164. 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) { … } } "// 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
  165. 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 @CommandHandler public OnlineStatus monitor(StreamedCommandContext<OnlineStatus> ctx) { ctx.onChange(change "-> { "// Subscribe to Vote CRDT changes … }); … }
  166. 166. Run in Kubernetes This step is not needed when user Cloudstate as a Service (as intended)
  167. 167. # Install Cloudstate kubectl create namespace cloudstate Run in Kubernetes This step is not needed when user Cloudstate as a Service (as intended)
  168. 168. # 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)
  169. 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 # 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)
  170. 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 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)
  171. 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 # 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)
  172. 172. Join Us Try Out The Next Generation Stateful Serverless cloudstate.io

×