前言
2024年5月22日北京时间,微软正式发布全新的.NET云原生开发框架---.NET Aspire。
.NET Aspire 是一个新的平台无关、语言无关的框架,旨在简化 .NET云原生服务的开发,并且现在已经全面可用,可以在 Visual Studio 2022 17.10、.NET CLI 或 Visual Studio Code 中开始使用 .NET Aspire。同时支持Java,PHP,Python,Nodejs等应用的云原生框架。
.NET Aspire 整合了工具、模板和 NuGet 包等有助于更轻松地在 .NET 中构建分布式应用。无论是构建全新应用,还是为现有应用添加云原生功能,或是已经在云上部署了 .NET 应用,.NET Aspire 都能帮助我们更快地完成目标。
简单来说,.NET Aspire 是一组针对 .NET 开发者提供的资源和工具,旨在简化云原生应用的开发、部署和管理过程。通过使用这些工具和模板,可以更加高效地构建、测试和部署分布式应用,从而更好地利用云服务的优势。
正文
如何安装.NET Aspire?
1、.NET 命令行
通过运行 dotnet workload update
然后是 dotnet workload install aspire
来安装 .NET Aspire 工作负载。
2、Visual Studio 2022
.NET Aspire 包含在 Visual Studio 2022 17.10 版本的 ASP.NET 和 Web 开发工作负载中,作为一个推荐的组件。
需要升级Visual Studio 2022 17.9 更新到 17.10,并且启用ASP.NET 和 Web 开发功能。
3、Visual Studio Code C# 开发工具包
需要通过上面的 .NET 命令行方法来安装 .NET Aspire 工作负载。
Visual Studio Code C# 开发工具包扩展在最新稳定版中包含了.NET Aspire 的支持。
从 Visual Studio Code 市场安装 C# 开发工具包扩展。
为什么选择.NET Aspire?
.NET Aspire提供了如下3个方面的能力,来帮助我们使用.NET开发分层、云就绪的可观测、本地与生产环境一致的分布式云原生应用程序:
1、微服务的编排能力:在开发和线上环境自动处理多个微服务之间的连接和依赖,也即内置了服务发现等基础能力。
2、基础服务的访问能力:通过提供一系列 NuGet 包,把对一些基础服务的访问进行统一封装(比如,缓存、数据库、消息队列等),方便微服务直接使用。
3、工具链的相应配合:在 VS 和 VS Code 等工具中添加对以上编排能力的支持,并提供一系列开箱即用的模板,来方便开发人员进行开发、调试和部署云原生应用。
为了帮助简化云应用开发体验, .NET Aspire推出了一个为构建可观测的、生产就绪的分布式应用而设计的云就绪堆栈。
即使你只拥有一个与数据库或缓存系统通信的 ASP.NET Core 应用,Aspire 也能改善你的开发体验。
.NET Aspire 引入应用宿主项目
通过C#和.NET Aspire应用宿主项目来组织和管理本地开发环境,提升开发体验。
分布式应用通常由许多应用项目组成,项目之间会相互通信,并且组合在一起的托管服务(如数据库、存储、缓存和消息传递系统)进行通信。在内部循环中管理项目和服务的配置,生命周期可能会非常具有挑战性,而且通常需要使用不同的工具集和编程语言。
.NET Aspire 引入了应用宿主项目(App Host project)允许使用 C# 和 API 来描述和配置构成分布式应用的各种应用项目和托管服务。
项目和服务的集合被称为资源,而应用宿主中的代码则形成了分布式应用的应用模型。
在内部循环中启动应用宿主项目将确保应用模型中的所有资源都根据描述进行配置和启动。向现有应用添加应用宿主项目是向其中添加 .NET Aspire 的第一步。
.NET Aspire 应用宿主项目的 Program.cs 文件的示例:
1 var builder = DistributedApplication.CreateBuilder(args);
2
3 var dbserver = builder.AddPostgres("dbserver")
4 .WithPgAdmin();
5
6 var catalogDb = dbserver.AddDatabase("catalogdb");
7
8 var cache = builder.AddRedis("cache")
9 .WithRedisCommander();
10
11 var catalogApi = builder.AddProject<Projects.AspireShop_CatalogApi>("catalogapi")
12 .WithReference(catalogDb);
13
14 builder.AddProject<Projects.AspireShop_WebFrontend>("webfrontend")
15 .WithExternalHttpEndpoints()
16 .WithReference(cache)
17 .WithReference(catalogApi);
18
19 builder.Build().Run();
说明:
-
添加一个 PostgreSQL 服务器资源和一个子数据库资源
-
启用针对 PostgreSQL 服务器的 pgAdmin 管理工具
-
添加一个 Redis 服务器资源
-
启用针对 Redis 服务器的 Redis Commander 管理工具
-
向应用模型中添加两个项目:一个 Web API 项目和一个 Blazor Web 前端项目
-
声明 API 项目引用了 PostgreSQL 数据库资源
-
声明 Web 前端项目引用了 Web API 项目和 Redis 缓存
-
声明 Web 前端项目应该可以从外部访问(即通过互联网)
使用 .NET Aspire 组件使数据库、消息传递、缓存和云服务连接变得具有弹性和可观察性
当使用 .NET Aspire 构建分布式应用程序时,可以利用其中的组件来增强应用程序与各种服务(如数据库、消息传递系统、缓存和云服务)之间的连接。这些组件旨在提供弹性和可观察性,确保即使在面对故障或性能问题时,应用程序也能保持正常运行并易于监控。
- 弹性(Resilience) :当与外部服务通信时,可能会遇到各种问题,如网络延迟、服务不可用或超时。通过使用 .NET Aspire 组件,您可以配置重试策略、断路器(circuit breakers)和后备机制(fallbacks),以确保应用程序在遇到这些问题时能够优雅地处理,而不是立即崩溃。
- 可观察性(Observability):可观察性是确保能够理解和诊断应用程序运行状况的关键。通过 .NET Aspire 组件,可以轻松地将 OpenTelemetry 数据(如跟踪、指标和日志)集成到应用程序中。数据可以在 Aspire 仪表板上查看,以便能够深入了解应用程序的性能、瓶颈和潜在问题。
总之,通过使用 .NET Aspire 组件,可以构建更加健壮、可靠且易于管理的分布式应用程序,这些应用程序能够处理外部服务连接中的各种问题,并为您提供丰富的数据来监控和诊断应用程序的运行状况。
.NET Aspire 和 Dapr
.NET Aspire 和 Dapr(Distributed Application Runtime)都是用于构建分布式应用程序的框架,但它们有一些关键的区别和不同的关注点。
.NET Aspire 是微软推出的一个技术栈,旨在简化云原生应用的开发和管理。
1、一个固定的云端就绪技术栈,用于构建可观察且生产就绪的分布式应用程序。
2、主要目的是简化云原生应用内各元素的协调和管理,帮助我们更高效地使用.NET构建云原生应用程序。
3、提供了统一的项目格式和固定的技术栈,有助于减少开发人员在选择和配置技术组件时的复杂性。
Dapr是一个可移植的、事件驱动的运行时,为任何语言编写的应用提供了与中间件解耦的模块。
1、Dapr旨在解决微服务架构中的一些问题,如服务拓扑复杂、调用方式不同(HTTP、MQ、RPC)等。
2、提供了一套构建块(APIs)是对一类组件进行高度抽象,使得我们可以更容易地使用各种服务和功能,而无需关心其底层实现。
以下是.NET Aspire 和 Dapr 之间的主要区别:
1、适用范围 :.NET Aspire主要关注于.NET世界,而 Dapr 则更适合多种语言融合。
2、编排能力 :.NET Aspire 的编排能力是内建到框架本身,会嵌入到应用内部。而 Dapr 的编排能力由边车提供,依靠 Dapr Runtime来处理。
3、组件抽象 :.NET Aspire 的组件只是对访问的封装,并没有对一类组件进行抽象。而 Dapr 的 APIs(之前称之为构建块)是对一类组件进行高度抽象。
4、技术栈 :.NET Aspire 是一个固定的技术栈,提供了统一的项目格式和配置。而 Dapr 则更侧重于提供可移植性和事件驱动的能力,与各种语言和框架都能很好地集成。
总的来说.NET Aspire 和 Dapr 都是用于简化分布式应用程序开发的框架,但它们在适用范围、编排能力、组件抽象和技术栈等方面有所不同。选择哪个框架取决于具体需求和所使用的技术栈。
.NET Aspire 总结
.NET Aspire 是一个框架或工具集,极大地简化了在开发过程中预置资源或连接到云中现有资源的流程。这一独特能力使得我们能够用C#语言简洁地表达需要哪些资源来支持开发过程中的应用程序运行,并让.NET Aspire在启动应用程序主机(App Host)项目时协调这些资源的预置。
开发中的资源预置
在开发过程中,.NET Aspire 能够专注于应用程序的逻辑和功能,而无需担心底层的资源预置和配置。通过应用程序主机项目,可以描述需要哪些资源(如数据库、存储、消息队列等),并在启动应用程序时,由.NET Aspire自动协调并预置这些资源。
Azure 本地预置
当使用.NET Aspire来协调Azure资源的本地预置时,可以享受到更加流畅和简化的开发体验。无需手动创建和配置Azure资源,只需在应用程序主机项目中描述所需资源,然后由.NET Aspire在本地开发环境中自动创建和配置这些资源。这大大提高了开发效率,并减少了因配置错误导致的问题。
云部署与Kubernetes
当需要将应用程序部署到云端或自己的Kubernetes实例时,.NET Aspire也提供了强大的支持。通过应用程序主机项目提供的应用程序模型详细信息,.NET Aspire能够协调部署过程中的各种资源和配置。
虽然.NET Aspire不要求改变现有的部署方式(因为.NET Aspire解决方案中的各个项目仍然是标准的ASP.NET Core项目),但使用已更新以支持.NET Aspire的部署工具链时,应用程序主机项目将提供新的部署体验。
例如,Azure Developer CLI (azd) 提供了直接支持,可以将.NET Aspire应用程序主机项目中描述的资源部署到Azure Container Apps。同样,Visual Studio也支持直接从解决方案资源管理器中使用azd将应用程序发布到Azure。
对于 Kubernetes 部署,社区构建的Aspir 8工具提供了基于命令行的简单体验,用于部署由.NET Aspire应用程序主机描述的资源。
总结
.NET Aspire 通过提供在开发过程中自动预置和连接云资源的能力,以及简化的云部署和Kubernetes部署体验,极大地提高了工作效率。使得我们能够专注于应用程序的核心逻辑和功能,而无需过多关注底层的资源管理和配置。
通过使用.NET Aspire,可以更加轻松地构建、测试和部署云原生应用程序。
如果你的项目使用的是 .NET 平台,并且准备开发一个全新的项目,可以尝试使用.NET Aspire!
地址
如何生成第一个 .NET Aspire 应用程序的快速入门
译文:https://devblogs.microsoft.com/dotnet/dotnet-aspire-general-availability/