Microsoft Ignite OAM, dapr, and rudr The future of cloud native applications
Mark Russinovich
@markrussinovich Agenda
Open Application Model dapr: Distributed Application Platform Building Cloud Scale, Hybrid Applications Application Models Describes the topology of your application and its components Programming Models The way developers write their application to interact with other services and data stores Open Application dapr: Distributed Model (OAM) Application Runtime Platform agnostic application model Building blocks for building scalable distributed apps Application model for Cloud and Edge State of Cloud The cloud is going serverless, but K8s is the Native infrastructure on-prem and on-edge Application App developers need to know and code for Platforms each infrastructure they deploy to Kubernetes for applications
Kubernetes focuses on Application developers Production use of Kubernetes container infrastructure, need to be experts in requires mastery of the broader not on applications Kubernetes APIs cloud-native ecosystem
"[Kubernetes] is really hard to get into it "A key principle for us when it comes and understand how all the parts play to choosing a platform is that we can together, even for experienced people." maintain the size of our team." – Software Architect @ Crisp – CTO @ Handled.io OAM: Platform agnostic application model The open application model for cloud and edge
Focuses on developers and applications, not on Application focused container infrastructure
Clearly defined roles for application developers, Separation of concerns application operators, and infrastructure operators
Standard and consistent application model for Cloud + Edge cloud, on-prem, and small-edge devices Application focused
Describes application components and operations as first-class concepts without having to stitch together individual container primitives
Flexible application modeling supports a wide range of application architectures
Small and simple applications are easy, large and complex applications are manageable
Open Application Model Container infrastructure
Deployment Service Endpoint Service ingress autoscale ReplicaSet Namespace ConfigMap
Pod Secret VolumeAttach Task Worker cron canary Job Volume CronJob Separation of concerns
Allows application developers to focus on their code in a platform-neutral setting to deliver business value
Application operators use powerful and extensible operational traits consistently across platforms and environments
Infrastructure operators can configure their environments to satisfy any unique operating requirements
Application Application Infrastructure Developer/Architect Operator Operator
Canary Code & Traffic Auto Blue/Green Identity Cloud or Edge Management Scaling Containers A/B Environment
Deployed with: Azure DevOps Pipelines GitHub Actions Cloud + Edge
A standard, platform-agnostic application definition for any platform in any environment.
Consistent application modeling for small devices, Kubernetes on prem or cloud, and fully-managed cloud environments.
Extendable by design to leverage the native APIs, tools, and unique features of platforms that users know and love
Open Application Model
Multi-Cloud IoT and Edge On-Premises Application Application Developer/Architect Operator
Canary Code & Traffic Auto Blue/Green Identity Containers Management Scaling A/B Open OAM Application configurations Application Application Model Open Application Model
Infrastructure Operator Multi-Cloud IoT and Edge On-Premises rudr: Open Application OAM Application Model on Kubernetes YAML HELM chart
OAM Kubernetes Build and operate cloud-native applications app resources on the leading open source orchestrator
kubectl Helm CLI Application developers can focus on business value, not on container primitives and plumbing
CRDs combine high-level application modeling with familiar Kubernetes concepts rudr
Infra operators continue to use familiar Kubernetes infrastructure, APIs, and Application domain knowledge Component Component
Kubernetes Cluster Open Application Model
Application Configuration Application Application Reference Deployment Scopes Operator
Configured Parameters Configured Traits
Application
Application Scopes Traits
Parameters Trait Type Infrastructure Application Operator Parameters Developer/ Architect Component - Application Scopes - Parameters Workload Type
Parameters Component Component
Where developers declare the operational characteristics of the code they deliver in infrastructure neutral terms.
Component A Component Component Component B C D Application Scope ApplicationScope
A way to loosely couple components into groups with common characteristics.
Network Scope X Network Scope Y
Component Component Component Component A B C D
Health Scope X Application Application
Where developers group components together into a single, deployable unit and specifies cross-component info, such as health scopes.
Application
Component Component Component Component A B C D
Health Scope X Trait Trait
For assigning operational features to instances of components.
Component
Trait Application ApplicationConfiguration Configuration
Defines a configuration of an application, its traits, and additional scopes, such as network scopes.
Application Configuration
Application
Network Scope X Network Scope Y
Component Component Component Component A B C D
Trait Trait Trait Trait
Health Scope X DEMO Deploying an OAM application to rudr Distributed Application Runtime Being asked to develop resilient, scalable, microservice-based apps State of Functions and Actors are powerful Enterprise programming models Developers They write in many languages They want to leverage existing code What is holding back serverless development?
Frequently need to Serverless runtimes have Serverless runtimes don’t have incrementally migrate from narrow language support with composable and incrementally existing and legacy code tightly controlled feature sets adoptable equivalents that can run anywhere Introducing Dapr A portable, event-driven, serverless runtime for building distributed applications across cloud and edge
Developer first, standard APIs used from any Sidecar Architecture programming language or framework
Make it easy for developers to create microservice Microservice Building Blocks applications without being an expert in distributed systems, including migrating existing code
Runs on multiple environments for cloud, on- Cloud + Edge prem, and small-edge including any Kubernetes Sidecar architecture
Standard APIs accessed over http/gRPC protocols from user service code e.g. http://localhost:3500/v1.0/invoke/myapp/method/neworder
Dapr runs as local “side-car library” dynamically loaded at runtime for each service
Service-to-service State invocation management
Publish and subscribe HTTP/gRPC Application Resource API Actors code bindings & triggers
Distributed tracing Extensible… Dapr: Build apps using any language with any framework
Microservice application Services written in
Any code or .NET Core Functions framework…
HTTP/gRPC APIs
Service-to- Resource State Publish and Distributed service bindings & Actors Extensible… management subscribe tracing invocation triggers
Any cloud or edge infrastructure Dapr self-hosted
Resource bindings Scanning for events
Application
Dapr API Dapr API Service Service code A code B
Messaging Publish and subscribe
Load and save state State stores Dapr Kubernetes-hosted
Deploys and manages Dapr
Components Pod Pod Pod CONTAINER CONTAINER CONTAINER Component Input/output bindings management
Placement Sidecar Injector Operator
Updates actor Injects Dapr Update component partition placement runtime changes to runtime
State stores CONTAINER Pod CONTAINER
Dapr API
HTTP or gRPC Service code Sidecar
Publish and Use components subscribe
Any cloud or edge infrastructure Microservice Building Blocks
State Management Service Invocation & Fault Handling Resource Bindings Create long running, stateless Perform direct, secure, service-to- Trigger code through events from a and stateful services service method calls large array of input and output bindings to external resources including databases and queues
Publish & Subscribe Actors Distributed Tracing & Diagnostics Secure, scalable messaging Encapsulate code and data in See and measure the message calls between services reusable actor objects as a common across components and networked microservices design pattern services State management
GET http://localhost:3500/v1.0/state/planet
{ "name": "Tatooine" } key Value
myApp-weapon "DeathStar" App myApp-planet { “myApp” "name": "Tatooine" POST } http://localhost:3500/v1.0/state State store of your choice [{ "key": "weapon", "value": "DeathStar" }, { "key": "planet", "value": { "name": "Tatooine" } }] Output bindings
Redis
Event Hubs
DynamoDBEventCosmosDB KafkaRedisHubsSQS App POST http://localhost:3500/v1.0/bindings/inventory
{ CosmosDB "data": { "sku":"v100", "quantity":"50" } } Kafka
SQS DEMO Dapr State Management and Bindings Service Invocation
POST http://localhost:3500/v1.0/invoke/cart/method/checkout
{ "user":"johndoe", "cart":"0001" }
“frontend”
“cart” POST http://10.0.0.2:8000/checkout
{ "user":"johndoe", "cart":"0001" } Input bindings
GET/POST http://localhost:8000/trigger Redis
{ "user":"johndoe" } Event Hubs
Event KafkaRedisHubsSQS App Kafka
SQS Publishing & Subscribing POST http://10.0.0.4:8004/order
POST http://localhost:3500/v1.0/publish/ “email”
"topic":"order", "data":{ "user":"johndoe", "item":"ZeroDay" "data":{ }, POST "user":"johndoe", http://10.0.0.5:8005/order "item":"ZeroDay" }
“cart” “shipping”
Publish Subscribe Input/Trigger Functions with Dapr
App App App App
Output DEMO Functions with Dapr Virtual Actors with Dapr Video Game Enemy Stateful, objects of storage and compute Host/Pod Dapr Actor Features: • Distribution & failover • Turn-based concurrency • State management • Timers • Reminders Host/Pod POST Pod X Virtual Actors with Dapr http://10.0.0.6:6004/update
{ Actor A “speed":“1" }
POST http://localhost:3500/v1.0/actors/MyActors/A/method/update Actor B
{ “speed":“1" } Invoke Actor Pod Y App Actor C
Get Actor Location Actor D
Placement Service Virtual Actors with Dapr Pod X
Actor A
POST http://localhost:3500/v1.0/actors/MyActors/C/method/updateName Actor B
{ “speed":“3" } Invoke Actor Pod Y App Actor C
Allocate POST http://10.0.0.7:6005/update Get Actor Location { Actor D “speed":“3" Placement } Service DEMO Actors with Dapr Distributed Tracing and Diagnostics App Insights
Datadog
Instana App “frontend”
Jaeger
+AppPrometheus manyDatadogSignalFX InsightsInstanaJaeger more
SignalFX
App Prometheus “backend”
+ many more DEMO Diagnostics with Dapr Building Cloud Scale, Hybrid Applications Retail PoS Application Built with Stateless and Stateful Services
Admin Dashboard Inventory Service Service Invocation Storage Hostname Pub/Sub Binding
Service Event Ingress Invocation Binding
Actor Invocation Scaling Actors State Binding
Checkout Console Register Actors Retail PoS Application Built with Stateless and Stateful Services
OAM Application
Azure Kubernetes Service
Azure Stack Edge DEMO Retail Point of Sale (PoS) Application Incrementally adoptable
App
Service-to- Resource State Publish and Distributed service bindings & Actors Extensible… management subscribe tracing invocation triggers Warehouse Robotics Incremental extensions to a legacy system
Scanner Workorder Manager
Robot Route Manager Warehouse Robotics Incremental extensions to a legacy system
Scanner Workorder Manager
Robot Route Manager Warehouse Robotics Incremental extensions to a legacy system
Scanner Workorder Manager
Smart Contract
Robot Route Manager Warehouse Robotics Incremental extensions to a legacy system
Scanner Workorder Manager
Smart Contract
Messaging Robot Route Manager Warehouse Robotics Incremental extensions to a legacy system
Scanner Workorder Manager
Smart Contract
Messaging Robot Route Manager
Object Detection DEMO Warehouse Robotics Orchestration Learn more and contribute Thank you