SlideShare a Scribd company logo
.NET Aspire
Tamir Dresher
Head of Architecture @ Payoneer
31/01/2024
Distributed Applications /
Microservices
are hard!
Creating a local dev env for
Distributed Applications /
Microservices
is hard!
eShop as an example
https://github.com/dotnet/eshop
eShop as an example
• Running multiple
interconnected services
• Expressing the
system structure
• Configuring
service
discovery
• Multiple
instances
• Making it production
grade: reliability, health
checks, logging,
telemetry etc.
• Local experience for
observability and
debuggability
https://github.com/dotnet/eshop
.NET Aspire
Opinionated, cloud ready stack for building observable, production ready,
distributed applications. .NET
.NET Aspire
Composition & Orchestration Components Tools
• Modeling language for
defining the system resources
and their dependencies
• A runtime to for running and
connecting multi-project
applications and their
dependencies
• Dashboard
• Distributed App VS support
• Service Defaults
• Publishing utils
• Packages of commonly used
services, such as Redis or
Postgres, with standardized
interfaces and capabilities
.NET Aspire
Opinionated, cloud ready stack for building observable, production ready,
distributed applications. .NET
.NET Aspire
Composition & Orchestration Components Tools
• Modeling language for
defining the system resources
and their dependencies
• A runtime to for running and
connecting multi-project
applications and their
dependencies
• Dashboard
• Distributed App VS support
• Service Defaults
• Publishing utils
• Packages of commonly used
services, such as Redis or
Postgres, with standardized
interfaces and capabilities
Orchestration Components Tools
Behind the
scenes
Composition &
Orchestration
Demo
Orchestration Components Tools
Behind the
scenes
Orchestration Components Tools
Behind the
scenes
Orchestration Components Tools
Behind the
scenes
Orchestration Components Tools
Behind the
scenes
Orchestration Components Tools
Behind the
scenes
Q: Where is the link between ‘webfrontend’ and ‘cache’?
A: Aspire set the env callback to set env-var with the url
Orchestration Components Tools
Behind the
scenes
Orchestration Components Tools
Behind the
scenes
A few interesting examples
Resource specific declarative
config
Multiple instances
External JS app
Orchestration Components Tools
Behind the
scenes
.NET Aspire
Opinionated, cloud ready stack for building observable, production ready,
distributed applications. .NET
.NET Aspire
Composition & Orchestration Components Tools
• Modeling language for
defining the system resources
and their dependencies
• A runtime to for running and
connecting multi-project
applications and their
dependencies
• Dashboard
• Distributed App VS support
• Service Defaults
• Publishing utils
• Packages of commonly used
services, such as Redis or
Postgres, with standardized
interfaces and capabilities
Orchestration Components Tools
Behind the
scenes
Aspire Components
Orchestration Components Tools
Behind the
scenes
Standardizing how we use the system resources
• Each system resource our app depends on should be consumed by standardized
client
• The client should provide
– Observability and telemetry
> Logs
> Trace
> Metrics
– Health checks
– Resiliency - the ability of your system to react to failure and still remain functional
> Retries
> Timeouts
> Circuit breakers
• All the above should conform to the same conventions (configuration, API surface
etc) stated in
https://github.com/dotnet/aspire/blob/main/src/Components/README.md
Orchestration Components Tools
Behind the
scenes
Standardizing how we use the system resources
• Each system resource our app depends on should be consumed by standardized
client
• The client should provide
– Observability and telemetry
> Logs
> Trace
> Metrics
– Health checks
– Resiliency - the ability of your system to react to failure and still remain functional
> Retries
> Timeouts
> Circuit breakers
• All the above should conform to the same conventions (configuration, API surface
etc) stated in
https://github.com/dotnet/aspire/blob/main/src/Components/README.md
Orchestration Components Tools
Behind the
scenes
Standardizing how we use the system resources
• Each system resource our app depends on should be consumed by standardized
client
• The client should provide
– Observability and telemetry
> Logs
> Trace
> Metrics
– Health checks
– Resiliency - the ability of your system to react to failure and still remain functional
> Retries
> Timeouts
> Circuit breakers
• All the above should conform to the same conventions (configuration, API surface
etc) stated in
https://github.com/dotnet/aspire/blob/main/src/Components/README.md
Orchestration Components Tools
Behind the
scenes
Orchestration Components Tools
Behind the
scenes
Orchestration Components Tools
Behind the
scenes
https://github.com/dotnet/aspire/blob/main/src/Components/Aspire_Components_Progress.md
Orchestration Components Tools
Behind the
scenes
Kafka as an example
dotnet add package Aspire.Confluent.Kafka
builder.AddKafkaProducer<string, string>(“purchase-events");
{
"ConnectionStrings": {
"purchase-events": “..."
},
"Aspire": {
"Confluent": {
"Kafka": {
"Producer": {
"HealthChecks": true,
"Config": {
"Acks": "All"
}
}
}
}
}
} appsettings.json
Orchestration Components Tools
Behind the
scenes
Kafka as an example
AppHost
Basket Service
Orchestration Components Tools
Behind the
scenes
.NET Aspire
Opinionated, cloud ready stack for building observable, production ready,
distributed applications. .NET
.NET Aspire
Composition & Orchestration Components Tools
• Modeling language for
defining the system resources
and their dependencies
• A runtime to for running and
connecting multi-project
applications and their
dependencies
• Dashboard
• Distributed App VS support
• Service Defaults
• Publishing utils
• Packages of commonly used
services, such as Redis or
Postgres, with standardized
interfaces and capabilities
Orchestration Components Tools
Behind the
scenes
Publishing &
Deploying
Orchestration Components Tools
Behind the
scenes
Aspire Manifest
• Aspire project can generate a manifest that can later be used by other tools to
deploy into an environment
– Think of it as the IL for a distributed .NET app
dotnet run --project AspireApp.AppHost.csproj `
--publisher manifest
--output-path aspire-manifest.json
AspireHost
manifest.json
deploy tool
(azd/Aspir8)
provision
deploy
Orchestration Components Tools
Behind the
scenes
Aspire Manifest
• Aspire project can generate a manifest that can later be used by other tools to
deploy into an environment
– Think of it as the IL for a distributed .NET app
dotnet run --project AspireApp.AppHost.csproj `
--publisher manifest
--output-path aspire-manifest.json
Orchestration Components Tools
Behind the
scenes
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
Orchestration Components Tools
Behind the
scenes
Deploy the manifest to K8s or Compose with Aspir8
• https://github.com/prom3theu5/aspirational-manifests
dotnet tool install -g aspirate --prerelease
aspirate generate aspirate generate --output-format compose
Kustomize: Compose:
Service Defaults
Orchestration Components Tools
Behind the
scenes
Service Defaults - Standardizing services behavior
• Every service enlisted with Aspire will get automatic reference and call to
– AddServiceDefaults()
– MapDefaultEndpoints() – if a web project
• Out of the box services gets these capabilities
– OpenTelemetry
– Default HealthChecks
– Service Discovery
– Standard Resiliency configuration for HttpClient
Orchestration Components Tools
Behind the
scenes
Standardizing how our service should behave
Orchestration Components Tools
Behind the
scenes
Orchestration Components Tools
Behind the
scenes
Orchestration Components Tools
Behind the
scenes
Behind the scenes &
Under the covers
Orchestration Components Tools
Behind the
scenes
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Start process
with kubeconfig
location
Runs apiserver
Orchestration Components Tools
Behind the
scenes
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Start process
with kubeconfig
location
Runs apiserver
Orchestration Components Tools
Behind the
scenes
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Start process
with kubeconfig
location
Runs apiserver
Orchestration Components Tools
Behind the
scenes
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Start process
with kubeconfig
location
Runs apiserver
Orchestration Components Tools
Behind the
scenes
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Start process
with kubeconfig
location
Runs apiserver
Orchestration Components Tools
Behind the
scenes
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Start process
with kubeconfig
location
Runs apiserver
Orchestration Components Tools
Behind the
scenes
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Start process
with kubeconfig
location
Runs apiserver
Orchestration Components Tools
Behind the
scenes
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Read projects info
+ launchProfiles
Orchestration Components Tools
Behind the
scenes
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Read projects info
+ launchProfiles
Orchestration Components Tools
Behind the
scenes
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Start process
with kubeconfig
location
Runs apiserver
Orchestration Components Tools
Behind the
scenes
Orchestration Components Tools
Behind the
scenes
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Create
resource
%TEMP%usvc-servicecontroller-serviceconfig]resource[.yaml
Orchestration Components Tools
Behind the
scenes
Resource
Proxy
(traefik)
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Resource
Proxy
(traefik)
Create
resource
%TEMP%usvc-servicecontroller-serviceconfig]resource[.yaml
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Resource
Proxy
(traefik)
Create
resource
Orchestration Components Tools
Behind the
scenes
%TEMP%usvc-servicecontroller-serviceconfigresource.yaml
Orchestration Components Tools
Behind the
scenes
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Resource
Proxy
(traefik)
Create
resource
%TEMP%usvc-servicecontroller-serviceconfigresource.yaml
Orchestration Components Tools
Behind the
scenes
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Resource
Proxy
(traefik)
Create
resource
%TEMP%usvc-servicecontroller-serviceconfigresource.yaml
Orchestration Components Tools
Behind the
scenes
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Resource
Proxy
(traefik)
Create
resource
%TEMP%usvc-servicecontroller-serviceconfigresource.yaml
Resource
Proxy
(traefik)
Resource
Proxy
(traefik)
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Resource
Proxy
(traefik)
exe
Run and attach
docker run
Set envvars
Set binding:
Services
ConnectionStr
Orchestration Components Tools
Behind the
scenes
Resource
Proxy
(traefik)
Resource
Proxy
(traefik)
AspireHost
Visual Studio
DCP
(Developer
Control Plane)
Resource
Proxy
(traefik)
exe
route requests
route requests
Orchestration Components Tools
Behind the
scenes
https://learn.microsoft.com/en-us/dotnet/aspire/fundamentals/networking-overview
Aspire networking
Orchestration Components Tools
Behind the
scenes
.NET Aspire - Summary
Opinionated, cloud ready stack for building observable, production ready,
distributed applications. .NET
.NET Aspire
Composition & Orchestration Components Tools
• Modeling language for
defining the system resources
and their dependencies
• A runtime to for running and
connecting multi-project
applications and their
dependencies
• Dashboard
• Distributed App VS support
• Service Defaults
• Publishing utils
• Packages of commonly used
services, such as Redis or
Postgres, with standardized
interfaces and capabilities

More Related Content

NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf