前言

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://learn.microsoft.com/zh-cn/dotnet/aspire/get-started/build-your-first-aspire-app?pivots=visual-studio

译文:https://devblogs.microsoft.com/dotnet/dotnet-aspire-general-availability/

微软正式发布:.NET Aspire 云原生开发框架的更多相关文章

  1. 云原生时代, Kubernetes 多集群架构初探

    为什么我们需要多集群? 近年来,多集群架构已经成为“老生常谈”.我们喜欢高可用,喜欢异地多可用区,而多集群架构天生就具备了这样的能力.另一方面我们也希望通过多集群混合云来降低成本,利用到不同集群各自的 ...

  2. Volcano 社区 v1.7.0 版本正式发布 | 云原生批量计算

    摘要:北京时间2023年1月9日,Volcano社区v1.7.0版本正式发布. 本文分享自华为云社区<Volcano 社区 v1.7.0 版本正式发布 | 云原生批量计算>,作者:华为云云 ...

  3. 云原生生态周报 Vol. 21 | Traefik 2.0 正式发布

    作者 | 浔鸣.心水.元毅.源三.衷源 业界要闻 CNCF 计划将 TOC 升至 11 人 技术监督委员会(TOC)是 CNCF 的三大核心管理机构之一,从 2020 年 1 月起,TOC 将从 9 ...

  4. Spring Boot 2.4.0 正式发布!全新的配置处理机制,拥抱云原生!

    2020年11月12日,Spring官方发布了Spring Boot 2.4.0 GA的公告. 在这个版本中增加了大量的新特性和改进,下面我们一起看看在这个重要版本中都有哪些值得关注的内容! 更新内容 ...

  5. 分布式云原生平台Kurator v0.2.0正式发布!一键构建分布式云原生平台

    摘要:北京时间2023年2月9日,Kurator 正式发布 v0.2.0 版本. 本文分享自华为云社区<分布式云原生平台Kurator v0.2.0正式发布!一键构建分布式云原生平台>,作 ...

  6. 云原生时代 给予.NET的机会

    .NET诞生于与Java的竞争,微软当年被罚款20亿美元. Java绝不仅仅是一种语言,它是COM的替代者! 而COM恰恰是Windows的编程模型.而Java编程很多时候比C++编程要容易的多,更致 ...

  7. 乘风破浪,.Net Core遇见Dapr,为云原生而生的分布式应用运行时

    Dapr是一个由微软主导的云原生开源项目,国内云计算巨头阿里云也积极参与其中,2019年10月首次发布,到今年2月正式发布V1.0版本.在不到一年半的时间内,github star数达到了1.2万,超 ...

  8. 理想汽车 x JuiceFS:从 Hadoop 到云原生的演进与思考

    理想汽车在 Hadoop 时代的技术架构 首先简单回顾下大数据技术的发展,基于我个人的理解,将大数据的发展分了4个时期: 第一个时期: 2006 年到 2008 年.2008 年左右,Hadoop 成 ...

  9. Kubernetes 入门必备云原生发展简史

    作者|张磊 阿里云容器平台高级技术专家,CNCF 官方大使 "未来的软件一定是生长于云上的"这是云原生理念的最核心假设.而所谓"云原生",实际上就是在定义一条能 ...

  10. CNCF官方大使张磊:什么是云原生?

    作者|张磊 阿里云容器平台高级技术专家,CNCF 官方大使 编者说: 从 2015 年 Google 牵头成立 CNCF 以来,云原生技术开始进入公众的视线并取得快速的发展,到 2018 年包括 Go ...

随机推荐

  1. std::thread 四:异步(async)

    *:如果 std::async 中传递参数 std::lunnch::deferred ,就需要等待调用 get() 或者 wait() 才会执行,并且代码非子线程运行,而是在主线程中执行 #incl ...

  2. Qt线程简单使用一:QThread~创建线程类子类

      需求: 点击QPushButton按钮,QLabel中的数字,不断累加,一直到999.   做法: 点击QPushButton后,启动线程,线程while循环,不断发送累加的数字回主线程,修改QL ...

  3. Python调用动态库,获取BSTR字符串

    今天客户在用Python调用我们的动态库的时候,遇到一个问题,调用动态库中的函数,函数返回的是BSTR字符串,但是客户接收到的是一个8位长度的数字. 动态库函数原型:EXTERN_C BSTR ELO ...

  4. 高并发场景QPS等专业指标揭秘大全与调优实战

    高并发场景QPS等专业指标揭秘大全与调优实战 最近经常有小伙伴问及高并发场景下QPS的一些问题,特意结合项目经验和网上技术贴做了一些整理和归纳,供大家参考交流. 一.一直再说高并发,多少QPS才算高并 ...

  5. input 去除默认样式

    前言 如何不自己写框架,基本用不上. 正文 input{ border: 0px; background-color: none; outline: none; } input:focus{ outl ...

  6. 解决跨域问题之fetch的使用

    一.介绍 fetch 提供了一个获取资源的接口 (包括跨域). fetch 的核心主要包括:Request , Response , Header , Body 利用了请求的异步特性 --- 它是基于 ...

  7. 开源数据库PolarDB为什么能捕获娃哈哈的心?

    简介: 在10月25日由阿里云开发者社区.PolarDB开源社区.infoQ联合举办的「开源人说」第三期--<数据库PolarDB专场>沙龙上,中启乘数科技(杭州)有限公司联合创始人唐成带 ...

  8. 免费体验!阿里云智能LOGO帮你解决设计难题

    ​简介:超实用!零基础搞定一个高大上的智能logo设计 新年过后,往往是大家一年中士气最足的时候,散去了年末的疲惫和emo,重燃对新一年的热情和希望. 想创业的朋友们同样意气风发,趁着新年的劲头想大干 ...

  9. OpenYurt 深度解读|开启边缘设备的云原生管理能力

    ​简介: 北京时间 9 月 27 号,OpenYurt 发布 v0.5.0 版本.新发布版本中首次提出 kubernetes-native非侵入.可扩展的边缘设备管理标准,使 Kubernetes 业 ...

  10. [FAQ] Error occured while trying to proxy to: xx.xx.x.xx:xx/xx

    遇到这种情况,要知道证明访问并未到达指定的服务地址. 可能原因有未启动.端口占用 等等,请逐一排查. Tool:ChatAI Refer:Proxy_Error Link:https://www.cn ...