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

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

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 Blue/Green Identity Containers Management Scaling Environment A/B Deployed with: Azure 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”

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    51 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us