微软正式发布:.NET Aspire 云原生开发框架
前言
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/
微软正式发布:.NET Aspire 云原生开发框架的更多相关文章
- 云原生时代, Kubernetes 多集群架构初探
为什么我们需要多集群? 近年来,多集群架构已经成为“老生常谈”.我们喜欢高可用,喜欢异地多可用区,而多集群架构天生就具备了这样的能力.另一方面我们也希望通过多集群混合云来降低成本,利用到不同集群各自的 ...
- Volcano 社区 v1.7.0 版本正式发布 | 云原生批量计算
摘要:北京时间2023年1月9日,Volcano社区v1.7.0版本正式发布. 本文分享自华为云社区<Volcano 社区 v1.7.0 版本正式发布 | 云原生批量计算>,作者:华为云云 ...
- 云原生生态周报 Vol. 21 | Traefik 2.0 正式发布
作者 | 浔鸣.心水.元毅.源三.衷源 业界要闻 CNCF 计划将 TOC 升至 11 人 技术监督委员会(TOC)是 CNCF 的三大核心管理机构之一,从 2020 年 1 月起,TOC 将从 9 ...
- Spring Boot 2.4.0 正式发布!全新的配置处理机制,拥抱云原生!
2020年11月12日,Spring官方发布了Spring Boot 2.4.0 GA的公告. 在这个版本中增加了大量的新特性和改进,下面我们一起看看在这个重要版本中都有哪些值得关注的内容! 更新内容 ...
- 分布式云原生平台Kurator v0.2.0正式发布!一键构建分布式云原生平台
摘要:北京时间2023年2月9日,Kurator 正式发布 v0.2.0 版本. 本文分享自华为云社区<分布式云原生平台Kurator v0.2.0正式发布!一键构建分布式云原生平台>,作 ...
- 云原生时代 给予.NET的机会
.NET诞生于与Java的竞争,微软当年被罚款20亿美元. Java绝不仅仅是一种语言,它是COM的替代者! 而COM恰恰是Windows的编程模型.而Java编程很多时候比C++编程要容易的多,更致 ...
- 乘风破浪,.Net Core遇见Dapr,为云原生而生的分布式应用运行时
Dapr是一个由微软主导的云原生开源项目,国内云计算巨头阿里云也积极参与其中,2019年10月首次发布,到今年2月正式发布V1.0版本.在不到一年半的时间内,github star数达到了1.2万,超 ...
- 理想汽车 x JuiceFS:从 Hadoop 到云原生的演进与思考
理想汽车在 Hadoop 时代的技术架构 首先简单回顾下大数据技术的发展,基于我个人的理解,将大数据的发展分了4个时期: 第一个时期: 2006 年到 2008 年.2008 年左右,Hadoop 成 ...
- Kubernetes 入门必备云原生发展简史
作者|张磊 阿里云容器平台高级技术专家,CNCF 官方大使 "未来的软件一定是生长于云上的"这是云原生理念的最核心假设.而所谓"云原生",实际上就是在定义一条能 ...
- CNCF官方大使张磊:什么是云原生?
作者|张磊 阿里云容器平台高级技术专家,CNCF 官方大使 编者说: 从 2015 年 Google 牵头成立 CNCF 以来,云原生技术开始进入公众的视线并取得快速的发展,到 2018 年包括 Go ...
随机推荐
- AJAX 前端开发利器:实现网页动态更新的核心技术
AJAX AJAX是开发者的梦想,因为你可以: 在不重新加载页面的情况下更新网页 在页面加载后请求来自服务器的数据 在页面加载后接收来自服务器的数据 在后台向服务器发送数据 HTML页面 <!D ...
- HMS Core手语服务荣获2022中国互联网大会“特别推荐案例”:助力建设数字社会
11月15日,HMS Core手语服务在2022(第二十一届)中国互联网大会 "互联网助力经济社会数字化转型"案例评选活动中,荣获"特别推荐案例". 经过一年多 ...
- 【代码实现】最新PyTorch机器学习与深度学习技术方法
近年来,随着AlphaGo.无人驾驶汽车.医学影像智慧辅助诊疗.ImageNet竞赛等热点事件的发生,人工智能迎来了新一轮的发展浪潮.尤其是深度学习技术,在许多行业都取得了颠覆性的成果.另外,近年来, ...
- openGauss中如何管理表空间
openGauss 中如何管理表空间 在 openGauss 中,表空间是一个目录,在物理数据和逻辑数据间提供了抽象的一层,为所有的数据库对象分配存储空间,里面存储的是它所包含的数据库的各种物理文件. ...
- Terraform 系列-批量创建资源时如何根据某个字段判断是否创建
系列文章 Terraform 系列文章 Grafana 系列文章 概述 前文 Grafana 系列 - Grafana Terraform Provider 基础 介绍了使用 Grafana Terr ...
- Linux之parted
[摘要] parted用于对磁盘(或RAID磁盘)进行分区及管理,与fdisk分区工具相比,支持2TB以上的磁盘分区,并且允许调整分区的大小. 使用它你可以创建.清除.调整.移动和复制ext2.ext ...
- Code Aesthetic
01 Abstraction Abstraction is the process of aggregating code with high similarity among multiple cl ...
- python抽帧及生成高质量的GIF图
python抽帧及生成高质量的GIF图 对视频进行抽帧只需要两个模块即可: opencv-python (cv2) opencv-contrib-python 我们都知道视频有分辨率,即视频的宽度与高 ...
- 阿里云EMAS移动测试,帮您快速掌握移动端兼容性测试技巧
简介: 兼容性测试用于验证应用在不同设备上进行安装/启动/登录/不同版本覆盖安装/卸载等操作时,是否存在兼容性问题:如界面适配问题.应用性能等,现阿里云EMAS套餐免费试用,帮您快速掌握移动端兼容性测 ...
- 阿里云2020上云采购季,你最pick哪个产品组合?
阿里云2020上云采购季如火如荼进行中,活动还剩最后10天啦,你的云产品都买好了吗? 还没买的,还没逛的,请戳:https://www.aliyun.com/sale-season/2020/proc ...