<<

The Future of Cloud Native Applications with Open Application Model (OAM) and Dapr

@markrussinovich 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 Distributed Application Model (OAM) Runtime (Dapr)

https://oam.dev State of Cloud Native Application Platforms Kubernetes for applications

Kubernetes focuses on Application developers Production use of Kubernetes container infrastructure, not need to be experts in requires mastery of the broader on applications Kubernetes APIs cloud-native ecosystem

"[Kubernetes] is really hard to get into it and understand how all the parts play together, even for experienced people." "A key principle for us when it comes to choosing a platform is that we can maintain —Software Architect @ the size of our team." —CTO @ Handled Application Separation Cloud + focused of concerns Edge Application focused

Describes application Flexible application modeling Small and simple applications components and operations as supports a wide range of are easy, large and complex first-class concepts without application architectures applications are manageable having to stitch together individual container primitives

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 Application operators use Infrastructure operators can to focus on their code in powerful and extensible configure their environments a platform-neutral setting to operational traits consistently to satisfy any unique operating deliver business value across platforms and requirements environments

Application Application Infrastructure Developer/Architect Operator Operator

Canary Code and Traffic Auto Cloud or Edge / Identity Containers Management Scaling Environment A/B

Deployed with: DevOps Pipelines GitHub Actions Azure Arc Cloud + Edge

A standard, platform-agnostic Consistent application modeling Extendable by design to application definition for any for small devices, Kubernetes leverage the native APIs, tools, platform in any environment on-premises or cloud, and fully- and unique features of platforms managed cloud environments that users know and love

Open Application Model

Multi-cloud IoT and Edge On-premises Application Developer/Architect Application Operator

Traffic Canary Blue/ Code and Containers Auto Scaling Identity Management Green A/B

Application Application configurations

Open Application Model

Multi-cloud IoT and Edge On-premises

Infrastructure Operator Application Developer/Architect Application Operator

1 Component Application Application - Application Scopes - Application Scopes - Application Scopes - Parameters - Parameters Configuration- Parameters Workload Type Application Scopes Application Reference Parameters Parameters Configured Parameters

Deployment Scopes Traits - Application Scopes Configured Traits - Parameters Trait Type Infrastructure Operator Parameters 1 1

Component Component

Where developers declare the operational characteristics of the code they deliver in infrastructure neutral terms.

- Application Scopes - Parameters

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

For assigning operational features to instances of components.

traits manual-scaler

ingress

Component

Trait Application ApplicationConfiguration Configuration Defines a configuration of an application, its traits, and additional scopes, such as network scopes.

Application Configuration name: manual-scaler

Application

Network Scope X Network Scope Y

Component Component Component Component A B C D

Trait Trait Trait Trait

Health Scope X rudr OAM Application YAML HELM chart

OAM Kubernetes Open Application app resources Model on Kubernetes Azure DevOps kubectl HELM CLI Build and operate cloud-native applications on the leading open GitHub Actions source orchestrator

Application developers can focus on business value, not on container primitives rudr and plumbing

CRDs combine high-level application Kubernetes modeling with familiar Kubernetes concepts Cluster Application

Infra operators continue to use familiar Component Component Kubernetes infrastructure, APIs, and domain knowledge DEMO Deploying an OAM application to rudr Enterprise Distributed Application Service (EDAS) OAM-based PaaS implementation

Empower app developers to focus Stateless Component ROS on building and delivering apps (Alibaba Cloud Resources) without concerning operations

Provide manageability of CRDs, consistency of app model, Monitoring Logging Rollout Ingress Scaling portability of app profiles

Give platform team flexibility to Prometheus Elastisearch ROS-OAM OpenKruise choose and operate the infra Operator Operator Operator tools in their domain knowledge by adopting OAM Kubernetes Cluster https://dapr.io State of Enterprise Developers What is holding back micro-service development?

Hard to incrementally migrate Programming model runtimes Runtimes only target specific from existing code to a have narrow language infrastructure platforms with microservices architecture support and tightly controlled limited code portability across feature sets clouds and edge Sidecar Cloud + Microservice architecture Edge building blocks Sidecar architecture

Standard APIs accessed over http/gRPC protocols from user service code e.g. http://localhost:3500/v1.0/state/inventory

Runs as local “sidecar library” dynamically loaded at runtime for each service

Application code

HTTP API gRPC API

Service-to- State Publish Resource Actors Distributed Extensible service management and bindings tracing invocation subscribe and triggers Sidecar architecture Dapr self-hosted

Resource bindings Scanning Input/output for events

Application

Dapr API Dapr API Service Service code A code B

Load and save state State stores

Messaging Publish and subscribe Sidecar architecture Dapr Kubernetes-hosted

Deploys and manages Dapr

Components 1 Pod Pod Pod Resource bindings CONTAINER CONTAINER CONTAINER Input/output

Component management Placement Sidecar injector Operator

State stores Pod

CONTAINER

Application code

Publish and subscribe Any cloud or edge infrastructure Sidecar architecture Dapr Kubernetes-hosted

Deploys and manages Dapr

Components 1 Pod Pod Pod Resource bindings CONTAINER CONTAINER CONTAINER Input/output

Component management Placement Sidecar injector Operator

Updates actor Injects Dapr runtime Update component partition placement changes to runtime

State stores Pod

CONTAINER CONTAINER Dapr API

HTTP or gRPC Sidecar Application code

Use components Publish and subscribe Any cloud or edge infrastructure Cloud + Edge Build apps using any language with any framework

Application code

Microservices written in

Any code or framework…

HTTP API gRPC API

Service-to- State Publish Resource Actors Distributed Extensible service management and bindings tracing invocation subscribe and triggers

Any cloud or edge infrastructure Microservice building blocks

Service-to- State Publish Resource Actors Distributed service management and bindings tracing invocation subscribe and triggers

Perform direct, Create long Secure, scalable Trigger code through Encapsulate code See and measure secure, service- running, stateless messaging events from a large and data in the message calls to-service and stateful between services array of inputs reusable actor across components method calls services Output bindings to objects as a and networked external resources common services including databases microservices and queues design pattern Microservice building blocks 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" } }] Microservice building blocks Resource bindings: Output Redis

Event Hubs

DynamoDBEventCosmosDBTwilio KafkaRedisHubs App “myApp” Post http://localhost:3500/v1.0/bindings/myDatabase CosmosDB

{ "data": { "sku":"v100", Kafka "quantity":"50" } } Twilio Microservice building blocks Service invocation Post http://localhost:3500/v1.0/invoke/cart/method/checkout

{ "user":"johndoe", "cart":"0001" }

“frontend”

Post http://10.0.0.2:8000/checkout

{ "user":"johndoe", "cart":"0001" }

“cart” Microservice building blocks Resource triggers: Input

Get / Post http://localhost:8000/trigger Redis

{ "user":"johndoe" } Event Hubs

Event KafkaRedisHubsSQS App Kafka

SQS Microservice building blocks Publish and subscribe

Publish Subscribe

“cart” “shipping”

Post Post http://10.0.0.5:8005/order http://localhost:3500/v1.0/publish/ "data":{ "user":"johndoe", "item":"ZeroDay" "topic":"order", } "data":{ "user":"johndoe", Post "item":"ZeroDay" http://10.0.0.4:8004/order },

“email” Microservice building blocks App Insights Distributed tracing and diagnostics

Datadog

Instana App “frontend”

Jaeger OpenCensus +AppPrometheus manyDatadogSignalFX InsightsInstanaJaeger more

SignalFX

App “backend” Prometheus

+ many more DEMO Distributed Calculator Functions with Dapr

Event-driven Stateless Easy replication and sharing

Input/Triggers Output/Bindings App DEMO Functions with Dapr Virtual Actors with Dapr

Stateful, objects of storage and compute

Video Game Dapr Actor features: Enemy Distribution and failover Host/Pod

Turn-based concurrency

State management

Timers

Reminders Host/Pod Microservice building blocks Post Pod X Actors http://10.0.0.6:6004/update { "speed":"1" } Actor A

Actor B

Invoke Pod Y Actor App

Actor C

Post http://localhost:3500/v1.0/actors/MyActors/A/method/update

{ Actor D "speed":"1" } Microservice building blocks Post Pod X Actors http://10.0.0.6:6004/update { "speed":"1" } Actor A

Actor B

Invoke Pod Y Actor Allocate App

Actor C

Post Post http://localhost:3500/v1.0/actors/MyActors/C/method/update http://10.0.0.7:6005/update

{ { Actor D "speed":"3" "speed":"3" } } DEMO Cloud Native Parking Garage Azure Sphere

Microsoft Microsoft building 37 building 99 Community

1 rudr github.com/dapr github.com/oam-dev Roadmap

1 rudr github.com/dapr github.com/oam-dev