Slide 1

Slide 1 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Christian Weyer https://thinktecture.com/christian-weyer @christianweyer Co-Founder & CTO

Slide 2

Slide 2 text

§ Co-Founder & CTO at Thinktecture AG § Personal focus on § Cloud-native & serverless architectures § Pragmatic end-to-end solutions § Mobile & web-based application architectures § Independent Microsoft Regional Director § Microsoft MVP for Developer Technologies & Azure ASPInsider, AzureInsider § Google GDE for Web Technologies [email protected] @christianweyer https://www.thinktecture.com Christian Weyer Design Patterns & Dapr im Einsatz Pragmatische Microservices: 2

Slide 3

Slide 3 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Three themes Right Thing Right Focus Right Place 3

Slide 4

Slide 4 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Three themes Right Thing Right Focus Right Place 4

Slide 5

Slide 5 text

Microservices - clarified Pragmatische Microservices: Design Patterns & Dapr im Einsatz 5

Slide 6

Slide 6 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz 6

Slide 7

Slide 7 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz 7 ❌

Slide 8

Slide 8 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz 8 ❌

Slide 9

Slide 9 text

§ Docker § Kubernetes § Azure § Serverless § NoSQL § Service Fabric § Dapr § gRPC § … no more than 20 lines of code per service … § … further BS … Microservices do not mean… Pragmatische Microservices: Design Patterns & Dapr im Einsatz 9

Slide 10

Slide 10 text

§ … implement domain boundaries based on business capabilities & data § This is not a technical thing § This is a very hard job to do right § No programming language or framework helps here § … are subject to & influence organization structure (teams etc.) § Conway’s law § … are just one style of architecture § We can mix and match § We can – and should! - be pragmatic to chose Pragmatische Microservices: Design Patterns & Dapr im Einsatz Microservices … 10

Slide 11

Slide 11 text

Cloud-native Pragmatische Microservices: Design Patterns & Dapr im Einsatz 11

Slide 12

Slide 12 text

§ Let’s not talk about Microservices – but about Cloud-native applications § These may be microservices § Built with aspects in mind to be able to run them in the Cloud § But should be runnable anywhere § Typical attributes for architectures and applications – on a use-case-based spectrum § Configurability § Resiliency § Availability § Scalability § Observability Pragmatische Microservices: Design Patterns & Dapr im Einsatz Cloud-native applications 12

Slide 13

Slide 13 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Sample application scenario 13

Slide 14

Slide 14 text

§ Execution independence / Hosting-agnostic § Different programming / tech stacks § Running anywhere § Resiliency § Location transparency § Error handling, retries § Decoupling § Robustness § Async business processes § Observability § Seeing everything end-to- end § Tracing, logging, metrics ➡ Would be nice to have some help here § Proven patterns § By hand – OR Library, SDK, runtime? Pragmatische Microservices: Design Patterns & Dapr im Einsatz Cloud-native applications: Some tedious parts 14

Slide 15

Slide 15 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Three themes Right Thing Right Focus Right Place 15

Slide 16

Slide 16 text

Dapr Basics Pragmatische Microservices: Design Patterns & Dapr im Einsatz 16

Slide 17

Slide 17 text

§ Portable, event-driven runtime for building distributed applications across Cloud and edge § Open-source, community-driven, vendor-neutral § Best practices building blocks § Consistent, portable, open APIs § Extensible & pluggable components § Adopt standards § Platform-agnostic for edge and Cloud § Any language and framework Pragmatische Microservices: Design Patterns & Dapr im Einsatz Dapr: Distributed Application Runtime - for Cloud-native applications 17

Slide 18

Slide 18 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Cloud-native building blocks 18

Slide 19

Slide 19 text

• “Not your concern!” • daprd will do this • Talk to sidecar • Use HTTP or gRPC • Use an SDK Pragmatische Microservices: Design Patterns & Dapr im Einsatz Sidecar pattern: separating concerns 19 My App Dapr API POST http://localhost:3500/v1.0/invoke/cart/method/neworder GET http://localhost:3500/v1.0/state/inventory/item67 POST http://localhost:3500/v1.0/publish/shipping/orders GET http://localhost:3500/v1.0/secrets/keyvault/password HTTP/gRPC Application Sidecar

Slide 20

Slide 20 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Dapr applications: utilizing platform features 20 Service A Observability Bindings & Triggers State Management Secret Management PubSub Messaging Virtual Actors Service Invocation Service B My App

Slide 21

Slide 21 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Dapr components 21 My App Observability Prometheus AppInsights Jaeger Zipkin Bindings & Triggers State Stores Secret Stores PubSub Brokers https://github.com/dapr/components-contrib

Slide 22

Slide 22 text

§ Start right away with CLI § Can be integrated into any IDE § Focus on Dapr infrastructure aspects § VS Code tooling available § Configuration via YAML files § Config § Components § Etc. Pragmatische Microservices: Design Patterns & Dapr im Einsatz Getting started with Dapr 22

Slide 23

Slide 23 text

Dapr Select scenarios Pragmatische Microservices: Design Patterns & Dapr im Einsatz 23

Slide 24

Slide 24 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Cloud-native building blocks 24

Slide 25

Slide 25 text

§ Discover and invoke methods on services § Call services securely with encryption and apply access control on the methods § Handle retries and transient errors § Use tracing to see call graph with metrics to diagnose issues in production Pragmatische Microservices: Design Patterns & Dapr im Einsatz Service invocation 25

Slide 26

Slide 26 text

§ Each app/service needs an ID § Sidecars talk to each other Pragmatische Microservices: Design Patterns & Dapr im Einsatz Service invocation 26 Service A My App mDNS Multicast DNS component for service discovery mTLS encryption POST http://localhost:3500/v1.0/invoke/servicea/method/neworder {"data":"Hello World"} POST http://10.0.0.2:8000/neworder {"data":"Hello World"}

Slide 27

Slide 27 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Input triggers 27 My App Twitter POST http://10.0.0.2:8000/newtweet {"data":“📢 We are excited to announce the …"}

Slide 28

Slide 28 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Output bindings 28 My App Twilio POST http://localhost:3500/v1.0/bindings/twilio {"data":"Hello World"} Hello World

Slide 29

Slide 29 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Sample application scenario 29

Slide 30

Slide 30 text

§ At-least-once semantics for message delivery Pragmatische Microservices: Design Patterns & Dapr im Einsatz Publish & subscribe 30 Service B My App Redis Cache Service A POST http://localhost:3500/v1.0/publish/orders/processed {"data":"Hello World"} POST http://10.0.0.2:8000/orders http://10.0.0.4:8000/factory/orders {"data":"Hello World"}

Slide 31

Slide 31 text

§ Logs § Immutable, timestamped record of discrete events that happened over time § Metrics § Numeric representation of data measured over intervals of time § Traces § Representation of a series of causally related distributed events that encode the end-to-end request flow through a distributed system Pragmatische Microservices: Design Patterns & Dapr im Einsatz Observability 31

Slide 32

Slide 32 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Observability 32 OpenTelemetry collector Logging & tracing extensions My App Redis Cache Twitter Service B Service A

Slide 33

Slide 33 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Three themes Right Thing Right Focus Right Place 33

Slide 34

Slide 34 text

Hosting Pragmatische Microservices: Design Patterns & Dapr im Einsatz 34

Slide 35

Slide 35 text

§ Self-hosted § dapr run all your services § Infrastructure services can be run in Docker (mixed mode) § Docker Compose § Everything running in Docker, on-prem § Lightweight orchestration § Kubernetes § Full power of k8s orchestration § On-prem or in cloud § Azure Container Apps § Dapr built-in § Fixed version Pragmatische Microservices: Design Patterns & Dapr im Einsatz Hosting anywhere 35

Slide 36

Slide 36 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Kubernetes – on-prem or cloud 36 Any cloud or edge infrastructure Pod Actor partition placement Placement Pod Dapr runtime injector Injector Pod Cert authority and identity Sentry Pod Update component changes Operator Pod My App Kubelet Use components Inject Dapr sidecar into annotated pods Inject env variables Manage mTLS between services Assign spiffe identity Create mapping table of actor instances to pods Manage component updates Manage Kubernetes service endpoints Readiness and Liveness probe on healthz API to determine Dapr health state State Stores Pub/Sub Brokers Secret Stores Bindings & Triggers Observability Dapr Components Operator Deploys and manages Dapr

Slide 37

Slide 37 text

Recap Pragmatische Microservices: Design Patterns & Dapr im Einsatz 37

Slide 38

Slide 38 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Three themes Right Thing Right Focus Right Place 38

Slide 39

Slide 39 text

§ Choose wisely – be pragmatic § LOLA: sometimes abstractions just leak § E.g., different pub-sub systems behave differently § State management building block § Limited use cases § Key/value API - no relational or graph storage § Custom API for querying § IMHO: too much of an abstraction Pragmatische Microservices: Design Patterns & Dapr im Einsatz Dapr-all-the-things? 39

Slide 40

Slide 40 text

Recap Pragmatische Microservices: Design Patterns & Dapr im Einsatz 40 YOU need to choose: Dapr abstraction or not Modern applications need to be Cloud-native Microservices are just one architecture style (and more) Dapr 😀 § Encapsulates proven patterns in building blocks § Pluggable components § Language-agnostic § Host-agnostic No technology, framework, runtime can solve business domain problems Dapr 🤔 § Some features seem incomplete § Docs and samples need to be improved § Might be overhead

Slide 41

Slide 41 text

Pragmatische Microservices: Design Patterns & Dapr im Einsatz Last, but not least 41

Slide 42

Slide 42 text

Thank you! Christian Weyer https://thinktecture.com/christian-weyer @christianweyer [email protected] Demo: https://github.com/thinktecture/dapr-basics-demos Articles about Blazor, PWA, Web Components, Angular, .NET Core & more: https://www.thinktecture.com/en/newsletter 42