Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pragmatische Microservices: Design Patterns & D...

Pragmatische Microservices: Design Patterns & Dapr im Einsatz

Microservices-all-the-things! Jaja, wir haben es gehört. Lassen Sie uns in dieser Session über pragmatische Wege zum Entwerfen und Implementieren servicebasierter Architekturen sprechen, die mitunter über die reinen „By-the-book“-Ansätze hinausgehen.Mit der beispielhaften, aber kritischen Verwendung der Open-Source-Lösung Dapr zeigt Christian Weyer, wie man durch Nutzung bewährter Cloud-Native Design Patterns primär Zeit auf das Implementieren von Features & Geschäftslogik konzentrieren kann und nicht auf die Infrastruktur drum herum. Sehen Sie auch, wie [Micro-]Services in einem Spektrum von Ausführungsumgebungen betrieben werden können, von selbst gehosteten lokalen Umgebungen bis hin zu supercoolem serverlosem Azure. 60 Minuten für eine kritische und pragmatische Sicht auf die anhaltende Microservices-Diskussion.

Christian Weyer

July 07, 2022
Tweet

More Decks by Christian Weyer

Other Decks in Programming

Transcript

  1. Pragmatische Microservices: Design Patterns & Dapr im Einsatz Christian Weyer

    https://thinktecture.com/christian-weyer @christianweyer Co-Founder & CTO
  2. § 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
  3. § 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
  4. § … 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
  5. § 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
  6. § 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
  7. § 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
  8. • “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
  9. 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
  10. 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
  11. § 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
  12. § 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
  13. § 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"}
  14. 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 …"}
  15. 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
  16. § 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"}
  17. § 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
  18. Pragmatische Microservices: Design Patterns & Dapr im Einsatz Observability 32

    OpenTelemetry collector Logging & tracing extensions My App Redis Cache Twitter Service B Service A
  19. § 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
  20. 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
  21. § 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
  22. 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