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 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 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." – 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 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 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